数据库起步

安装

Docker安装

构建Docker镜像

1
git clone --depth=1 https://github.com/oracle/docker-images.git

Oracle Technology Network下载所需的数据库版本,然后放在dockerfiles/<version>,所需的文件名应该类似linuxx64__database.zip。

然后进入dockerfiles目录,并运行buildDockerImage.sh脚本:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
[oracle@localhost dockerfiles]$ ./buildDockerImage.sh -h

Usage: buildDockerImage.sh -v [version] [-e | -s | -x] [-i] [-o] [Docker build option]
Builds a Docker Image for Oracle Database.

Parameters:
   -v: version to build
       Choose one of: 11.2.0.2  12.1.0.2  12.2.0.1  18.3.0  18.4.0  19.3.0
   -e: creates image based on 'Enterprise Edition'
   -s: creates image based on 'Standard Edition 2'
   -x: creates image based on 'Express Edition'
   -i: ignores the MD5 checksums
   -o: passes on Docker build option

* select one edition only: -e, -s, or -x

LICENSE UPL 1.0

Copyright (c) 2014-2019 Oracle and/or its affiliates. All rights reserved.

基于RPM安装

从Oracle Database 18c开始,您可以使用RPM软件包安装单实例Oracle数据库或Oracle Database Instant Client软件。

基于RPM的安装执行预安装检查,提取数据库软件,将提取的软件的所有权重新分配给预配置的用户和组,维护Oracle清单,并执行为单实例Oracle配置Oracle数据库软件所需的所有根操作数据库创建和配置。

基于RPM的安装过程会检测当不满足安装的最低要求时,提示您完成这些最低预安装要求。

基于RPM的安装执行仅限软件的Oracle数据库安装并创建Oracle主目录。创建Oracle主目录后,您可以使用Oracle数据库配置助手(Oracle DBCA)创建Oracle数据库。

基于RPM的安装过程为您提供了使用/etc/init.d/oracledb_ORCLCDB-19c服务配置脚本使用默认设置创建数据库的选项。

以下命令需以root用户登录运行

安装数据库

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
# Oracle Linux
yum -y install oracle-database-preinstall-19c 
# CentOS
curl -o oracle-database-preinstall-19c-1.0-1.el7.x86_64.rpm https://yum.oracle.com/repo/OracleLinux/OL7/latest/x86_64/getPackage/oracle-database-preinstall-19c-1.0-1.el7.x86_64.rpm
yum -y localinstall oracle-database-preinstall-19c-1.0-1.el7.x86_64.rpm
# 日志:/var/log/oracle-database-preinstall-18c/backup/timestamp/orakernel.log
# 安装完成后可删除RPM文件
rm oracle-database-preinstall-19c-1.0-1.el7.x86_64.rpm
# 下载RPM软件包
curl https://download.oracle.com/otn/linux/oracle19c/190000/oracle-database-ee-19c-1.0-1.x86_64.rpm?AuthParam=1556298955_996cba12c2e750f722b598036f05bc7f -o oracle-database-ee-19c-1.0-1.x86_64.rpm
# 安装
yum -y localinstall oracle-database-ee-19c-1.0-1.x86_64.rpm

创建并配置数据库

通过修改/etc/sysconfig/oracledb_ORCLCDB-19c.conf文件来修改Oracle数据库配置参数

1
2
/etc/init.d/oracledb_ORCLCDB-19c configure
# 日志:/opt/oracle/cfgtoollogs/dbca/ORCLCDB

也可以修改/etc/init.d/oracledb_ORCLCDB-19c脚本来进行更多控制

后续操作

配置环境

  • 为Oracle用户设置密码
1
passwd oracle
  • 设置环境变量
1
2
3
4
5
6
7
8
9
#Added by Weixin
export ORACLE_BASE=/opt/oracle
export ORACLE_HOME=/opt/oracle/product/19c/dbhome_1 
export ORACLE_SID=ORCLCDB
export PDB_NAME=ORCLPDB1
export LD_LIBRARY_PATH=\$ORACLE_HOME/lib:/lib:/usr/lib
export CLASSPATH=\$ORACLE_HOME/jlib:\$ORACLE_HOME/rdbms/jlib

export PATH=$ORACLE_HOME/bin:$PATH
  • 关闭防火墙
1
2
3
4
systemctl status firewalld
systemctl start firewalld
systemctl stop firewalld # 临时
systemctl disable firewalld # 永久
  • 启停数据库
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
# Oracle Linux6:
/etc/init.d/oracledb_ORCLCDB-18c stop
/etc/init.d/oracledb_ORCLCDB-18c start
# Oracle Linux7:
systemctl start oracledb_ORCLCDB-19c
systemctl stop oracledb_ORCLCDB-19c
systemctl restart oracledb_ORCLCDB-19c
# 通过SQL*PLUS
$ sqlplus / as sysdba #sqlplus sys/wxroot@orclpdb1 as sysdba
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP
SQL> ALTER PLUGGABLE DATABASE ALL OPEN; 
  • 启停监听器
1
2
3
lsnrctl status
lsnrctl start
lsnrctl stop
  • 自启停数据库
1
2
3
4
5
6
7
# Oracle Linux6:
/sbin/chkconfig oracledb_ORCLCDB-18c on
/sbin/service oracledb_ORCLCDB-18c start

# Oracle Linux7:
systemctl daemon-reload
systemctl enable oracledb_ORCLCDB-18c
  • 删除oracle实例
1
2
3
4
5
6
# 以oracle的账号登录删除实例,删除监听,再以root的账号删除软件。
$ cd $ORACLE_HOME/bin 
$ ./dbca
$ cd $ORACLE_HOME/bin 
$ ./netca
# yum -y remove oracle-database-ee-18c

建议的操作

  1. 备份root.sh
  2. 设置NLS_开头的参数
  3. 重新编译无效对象
1
2
sqlplus "/ AS SYSDBA"
SQL> @Oracle_home/rdbms/admin/utlrp.sql
  1. 更新Oracle ORAchk Health Check Tool
  2. 从12.2.0.1开始,System Global Area (SGA)读写权限仅限于Oracle安装用户,也就是oracle用户。如果希望OSDBA用户组也有权限读写SGA,需将ALLOW_GROUP_ACCESS_TO_SGA修改为TRUE,强烈不建议这么干!

初始化

配置数据库

解锁并重置用户密码

1
2
3
4
5
$ $ORACLE_HOME/bin/sqlplus
SQL> CONNECT SYS as SYSDBA
Enter password: sys_password 

ALTER USER account IDENTIFIED BY password ACCOUNT UNLOCK;# 以解锁账户并修改密码

除了SYS, SYSTEM,和DBSNMP用户外,其他用户解锁后密码立即失效,必须修改!

解锁HR账户以启用HR示例schema

1
ALTER USER HR IDENTIFIED BY your_password ACCOUNT UNLOCK;

忘记密码

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
--conn和connect是一样的
-- 忘记非SYS/SYSTEM用户密码
CONN SYS/PASS_WORD AS SYSDBA; --用SYS (或SYSTEM)用户登录
ALTER USER user_name IDENTIFIED BY "newpassword"; --修改用户的密码,密码不能是数字开头,否则会出现:ORA-00988: 口令缺失或无效
--忘记SYS/SYSTEM用户密码
CONN SYS/PASS_WORD AS SYSDBA; --如果是忘记SYSTEM用户的密码,可以用SYS用户登录。
ALTER USER SYSTEM IDENTIFIED BY "newpassword";

CONN SYSTEM/PASS_WORD AS SYSDBA; --如果是忘记SYS用户的密码,可以用SYSTEM用户登录。
ALTER USER SYS IDENTIFIED BY "newpassword";
--全部密码忘记
su oracle
sqlplus /nolog;
connect / as sysdba
alter user sys identified by "wxroot";
alter user system identified by newpassword;

创建用户

1
2
3
4
5
CREATE TABLESPACE APPS_DATA datafile 'apps_data.dbf' SIZE 10M autoextend ON;
CREATE TABLESPACE APPS_INDEX datafile 'apps_index.dbf' SIZE 10M autoextend ON;
create temporary tablespace apps_temp tempfile 'apps_temp.dbf' SIZE 5M autoextend on;
CREATE USER apps IDENTIFIED BY apps  DEFAULT TABLESPACE APPS_DATA TEMPORARY TABLESPACE apps_temp;
GRANT CONNECT,RESOURCE,DBA TO apps;

连接数据库

1
2
3
4
5
6
7
--连接CDB
CONN system/password@//localhost:1521/cdb1
CONN system/password@cdb1
--连接PDB
CONN system/password@//localhost:1521/pdb1
CONN system/password@pdb1
ALTER DATABASE OPEN;

保存状态

sqlplus sys/passwd as sysdba
1
2
3
4
5
6
7
-- method 1
ALTER PLUGGABLE DATABASE orclpdb1 OPEN;
alter pluggable database all open/close;
-- method 2
alter pluggable database orclpdb1 save state;
alter pluggable database all SAVE/DISCARD state;
alter pluggable database all except pdb_name1, pdb_name2 save state;