文章目录
  1. 1. 环境
  2. 2. 在Virtualbox中配置虚拟机实例
  3. 3. 安装Oralce Linux
    1. 3.1. 配置网络
    2. 3.2. 设置主机名
    3. 3.3. 关闭防火墙
    4. 3.4. 停用 SELinux (需要重启系统才能生效)
    5. 3.5. 配置YUM源
    6. 3.6. 安装必须的软件包
    7. 3.7. 安装VirtualBox Guest Additions (可选)
  4. 4. 数据库安装选项设置
  5. 5. 静默安装数据库
    1. 5.1. 准备数据库安装文件
    2. 5.2. 编写Oracle Universal Installer(OUI)响应文件
    3. 5.3. 开始静默安装
    4. 5.4. 开始静默手动创库
    5. 5.5. 以静默方式配置监听
  6. 6. 安装后设置
  7. 7. 配置数据库实验环境
    1. 7.1. CDB和PDB
    2. 7.2. 创建表空间
    3. 7.3. 创建测试用户
    4. 7.4. 测试用户访问PDB
      1. 7.4.1. 方法一:使用EZCONNECT连接到PDB(推荐)
      2. 7.4.2. 方法二:使用传统的TNSNAMES连接到PDB

本文记录了在Oracle Linux 7中以静默方式(Silent)安装和配置Oracle Database 12c的具体方法和实施步骤。

如果想通过图形界面的方式进行安装的话,请参考本站的另一篇文章《Oracle Linux 7.3 下安装 Oracle Database 12c R2》

环境

  • 主机: Windows 10 64bit,内存16GB,处理器Intel i5@2.6GHz 4 core
  • 虚拟机平台: VirtualBox 5.1.26
  • 数据库安装操作系统: Oracle Linux 7.4
  • 数据库安装文件: Oracle Database 12c Release 2:

在Virtualbox中配置虚拟机实例

打开Oracle VM VirtualBox Manager,打开File -> Preferences... -> Network -> Host-only Networks -> 双击 VirtualBox Host-Only Ethernet Adapter。在弹出窗口中,取消选择Enable Server,以禁止为Host-Only网卡自动分配地址。

Disabled DHCP for Host-only

在Virtualbox中创建一个虚拟机实例,配置如下:

  • System: MEM=4096MB
  • Storage:64GB(Dynamically Allocate)
  • Network:
    • Adapter1: NAT - 该网卡的作用是为了从虚拟机接入外部网络,如果无此需求的话,可以不用之
    • Adapter2: Host-only

安装Oralce Linux

在创建好的虚拟机实例中安装Oracle Linux 7.4,选择默认的最小化安装方式。

Minimal Installation of OL7.4

配置网络

重启之后,以root用户登陆到系统中,开始配置网络。

/etc/sysconfig/network-scripts中有三个文件:

  • ifcfg-lo 这个是127.0.0.1的环回地址网卡,不用配置
  • ifcfg-enp0s3 这个是第一块网卡,根据虚拟机的配置,是设置为NAT的Adapter1
  • ifcfg-enp0s8 这个是第二块网卡,根据虚拟机的配置,是设置为Host-only的Adapter2

Network configuration files

先配置ifcfg-enp0s3,只需要改动一处:ONBOOT=yes,确保开机时自动激活该网卡。NAT方式的网卡都会以DHCP自动分配IP,所以不用配置IP地址。

ifcfg-enp0s3

再配置ifcfg-enp0s8

1
2
3
4
BOOTPROTO=static #static为静态IP地址
ONBOOT=yes #开机自动启用网络连接
IPADDR0=192.168.56.112 #设置静态IP地址
PREFIXO0=24 #设置子网掩码

ifcfg-enp0s3

注意这里没有配置网关和DNS,如果你想配置的话,加入如下内容:

1
2
3
GATEWAY0=192.168.21.1 #设置网关
DNS1=8.8.8.8 #设置主DNS
DNS2=144.144.144.144 #设置备DNS

重启网络服务,并查看IP分配情况:

1
2
service network restart
ip addr

确认IP分配情况

可以看到,NAT的网卡1动态分配了10.0.2.15这个地址,而Host-only的网卡2获取了静态地址192.168.56.112

从主机用Putty直接访问192.168.56.112,就可以不再使用VirtualBox的那个终端了。

Putty访问

设置主机名

接下来设置主机名称为12col7-112.example.com。这里不再配置DNS服务器(bind),而简单的配置一个静态的/etc/hosts文件,确保主机名永远都能被解析到。最后重启系统。

1
2
3
4
5
6
7
8
9
[root@localhost ~]# hostname 12col7-112.example.com

[root@localhost ~]# cat /etc/hostname
12col7-112.example.com
[root@localhost ~]# cat /etc/hosts
127.0.0.1 localhost
::1 localhost
192.168.56.112 12col7-112 12col7-112.example.com
[root@localhost ~]# reboot

关闭防火墙

请参考关闭防火墙

停用 SELinux (需要重启系统才能生效)

请参考停用 SELinux

配置YUM源

打开虚拟机实例的窗口,在菜单中选择Devices-> Optical Drives -> Choose Disk Image... 打开刚才的系统安装光盘镜像。

登录到虚拟机实例中,挂载光盘到 /media/cdrom:

1
2
[root@12col7-112 ~]# mkdir /media/cdrom
[root@12col7-112 ~]# mount -r /dev/cdrom /media/cdrom

备份原来的Yum源,配置新的本地Yum源:

1
2
3
4
5
6
7
8
9
10
[root@12col7-112 ~]# mkdir /etc/yum.repos.d/orig.repo.d
[root@12col7-112 ~]# mv /etc/yum.repos.d/public-yum-ol7.repo /etc/yum.repos.d/orig.repo.d/
[root@12col7-112 ~]# cat <<EOF>/etc/yum.repos.d/local.repo
> [Local]
> name=OL7.4
> baseurl=file:///media/cdrom
> gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY
> enabled=1
> EOF
[root@12col7-112 ~]#

测试本地Yum源:

1
2
3
4
5
6
7
8
9
10
[root@12col7-112 ~]# yum repolist
Loaded plugins: ulninfo
Local | 3.6 kB 00:00
(1/2): Local/group_gz | 136 kB 00:00
(2/2): Local/primary_db | 4.7 MB 00:00
repo id repo name status
Local OL7.4 4,970
repolist: 4,970
[root@12col7-112 ~]#

安装必须的软件包

oracle-database-server-12cR2-preinstall 包是Oracle Linux独有的软件包,它为安装Oracle数据库提供了方便(包括安装数据库依赖包,创建Oracle用户和组,修改内核参数等等)。

1
[root@12col7-112 ~]# yum install -y oracle-database-server-12cR2-preinstall

安装VirtualBox Guest Additions (可选)

执行这步的目的是为了使用虚拟机与主机之间的共享目录功能,以方便安装文件的复制。当然,这个步骤并不是必须的。因为在网络配置好之后,还可以使用sftp通过主机向虚拟机中复制安装文件。

下面这些包是编译和安装 Guest Additions 时需要的:

1
[root@12col7-112 ~]# yum install lsof bzip2 gcc kernel-uek-devel

然后卸载系统安装镜像文件:

1
[root@12col7-112 ~]# umount /media/cdrom

然后打开虚拟机实例的窗口,在菜单中选择Devices-> Optical Drives -> Remove disk from virtual drive 彻底弹出系统安装镜像。

接着,继续在菜单中选择Devices-> Insert Guest Additions CD Image...把Guest Additions的镜像转到CD驱动器中。

登录到虚拟机实例,挂载Guest Additions光盘镜像并开始安装:

1
2
3
4
5
6
7
8
9
10
11
12
[root@12col7-112 ~]# mount -r /dev/cdrom /media/cdrom
[root@12col7-112 ~]# sh /media/cdrom/VBoxLinuxAdditions.run

Verifying archive integrity... All good.
Uncompressing VirtualBox 5.1.26 Guest Additions for Linux...........
VirtualBox Guest Additions installer
Copying additional installer modules ...
Installing additional modules ...
vboxadd.sh: Starting the VirtualBox Guest Additions.

Could not find the X.Org or XFree86 Window System, skipping.
[root@12col7-112 ~]#

数据库安装选项设置

执行下面的命令,修改/etc/pam.d/login,启用 limits:

1
2
3
sed -i -e '/session    required     pam_selinux.so open/i\
session required \/lib64\/security\/pam_limits.so\
session required pam_limits.so' /etc/pam.d/login

修改后的文件如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[root@12col7-112 ~]# cat /etc/pam.d/login
#%PAM-1.0
auth [user_unknown=ignore success=ok ignore=ignore default=bad] pam_securetty.so
auth substack system-auth
auth include postlogin
account required pam_nologin.so
account include system-auth
password include system-auth
# pam_selinux.so close should be the first session rule
session required pam_selinux.so close
session required pam_loginuid.so
session optional pam_console.so
# pam_selinux.so open should only be followed by sessions to be executed in the user context
session required /lib64/security/pam_limits.so
session required pam_limits.so
session required pam_selinux.so open
session required pam_namespace.so
session optional pam_keyinit.so force revoke
session include system-auth
session include postlogin
-session optional pam_ck_connector.so
[root@12col7-112 ~]#

修改oracle用户的密码为welcome

1
2
3
4
5
6
7
[root@12col7-112 ~]# passwd oracle
Changing password for user oracle.
New password:
BAD PASSWORD: The password is shorter than 8 characters
Retype new password:
passwd: all authentication tokens updated successfully.
[root@12col7-112 ~]#

创建安装目录,并设置权限:

1
2
3
4
5
6
[root@12col7-112 ~]# mkdir -p /u01/app
[root@12col7-112 ~]# chown oracle:oinstall /u01/app
[root@12col7-112 ~]# usermod -G oinstall,dba,vboxsf oracle
[root@12col7-112 ~]# id oracle
uid=54321(oracle) gid=54321(oinstall) groups=54321(oinstall),54322(dba),996(vboxsf)
[root@12col7-112 ~]#

重启系统,并以oracle用户登陆。

静默安装数据库

准备数据库安装文件

先从共享目录中把数据库的安装文件拷贝到oracle用户的主目录中,并解压缩。

1
2
3
4
[oracle@12col7-112 ~]$ mkdir install
[oracle@12col7-112 ~]$ cp /media/sf_VM/iso/linuxx64_12201_database.zip install/
[oracle@12col7-112 ~]$ cd install/
[oracle@12col7-112 install]$ unzip linuxx64_12201_database.zip

为保险起见,这时可以打开虚拟机实例的窗口,选择Machine -> Take Snapshot 建立一个快照。这样万一后面的步骤出了问题进行不下去的话,总可以回退到这个快照重新开始。

编写Oracle Universal Installer(OUI)响应文件

事实上,Oracle数据库安装包里面已经提供了各种响应文件的参考例子,这里只需要把这些文件拷贝出来,根据自己的需要修改即可。

1
2
[oracle@12col7-112 ~]$ mkdir -p silent-install/response
[oracle@12col7-112 ~]$ cp install/database/response/db_install.rsp silent-install/response/

需要修改的地方汇总如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
oracle.install.option=INSTALL_DB_SWONLY # 只安装数据库软件,之后我们会手动创库
UNIX_GROUP_NAME=oinstall
INVENTORY_LOCATION=/u01/app/oraInventory
ORACLE_HOME=/u01/app/oracle/product/12.2.0/dbhome_1
ORACLE_BASE=/u01/app/oracle
oracle.install.db.InstallEdition=EE # 安装Enterprise Edition
oracle.install.db.OSDBA_GROUP=dba
oracle.install.db.OSOPER_GROUP=dba
oracle.install.db.OSBACKUPDBA_GROUP=dba
oracle.install.db.OSDGDBA_GROUP=dba
oracle.install.db.OSKMDBA_GROUP=dba
oracle.install.db.OSRACDBA_GROUP=dba
DECLINE_SECURITY_UPDATES=true

去除了空白行和注释,完整的db_install.rsp文件内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
[oracle@12col7-112 ~]$ cat silent-install/response/db_install.rsp | grep -v ^$ |grep -v ^#
oracle.install.responseFileVersion=/oracle/install/rspfmt_dbinstall_response_schema_v12.2.0
oracle.install.option=INSTALL_DB_SWONLY
UNIX_GROUP_NAME=oinstall
INVENTORY_LOCATION=/u01/app/oraInventory
ORACLE_HOME=/u01/app/oracle/product/12.2.0/dbhome_1
ORACLE_BASE=/u01/app/oracle
oracle.install.db.InstallEdition=EE
oracle.install.db.OSDBA_GROUP=dba
oracle.install.db.OSOPER_GROUP=dba
oracle.install.db.OSBACKUPDBA_GROUP=dba
oracle.install.db.OSDGDBA_GROUP=dba
oracle.install.db.OSKMDBA_GROUP=dba
oracle.install.db.OSRACDBA_GROUP=dba
oracle.install.db.rac.configurationType=
oracle.install.db.CLUSTER_NODES=
oracle.install.db.isRACOneInstall=
oracle.install.db.racOneServiceName=
oracle.install.db.rac.serverpoolName=
oracle.install.db.rac.serverpoolCardinality=
oracle.install.db.config.starterdb.type=
oracle.install.db.config.starterdb.globalDBName=
oracle.install.db.config.starterdb.SID=
oracle.install.db.ConfigureAsContainerDB=
oracle.install.db.config.PDBName=
oracle.install.db.config.starterdb.characterSet=
oracle.install.db.config.starterdb.memoryOption=
oracle.install.db.config.starterdb.memoryLimit=
oracle.install.db.config.starterdb.installExampleSchemas=
oracle.install.db.config.starterdb.password.ALL=
oracle.install.db.config.starterdb.password.SYS=
oracle.install.db.config.starterdb.password.SYSTEM=
oracle.install.db.config.starterdb.password.DBSNMP=
oracle.install.db.config.starterdb.password.PDBADMIN=
oracle.install.db.config.starterdb.managementOption=
oracle.install.db.config.starterdb.omsHost=
oracle.install.db.config.starterdb.omsPort=
oracle.install.db.config.starterdb.emAdminUser=
oracle.install.db.config.starterdb.emAdminPassword=
oracle.install.db.config.starterdb.enableRecovery=
oracle.install.db.config.starterdb.storageType=
oracle.install.db.config.starterdb.fileSystemStorage.dataLocation=
oracle.install.db.config.starterdb.fileSystemStorage.recoveryLocation=
oracle.install.db.config.asm.diskGroup=
oracle.install.db.config.asm.ASMSNMPPassword=
MYORACLESUPPORT_USERNAME=
MYORACLESUPPORT_PASSWORD=
SECURITY_UPDATES_VIA_MYORACLESUPPORT=
DECLINE_SECURITY_UPDATES=true
PROXY_HOST=
PROXY_PORT=
PROXY_USER=
PROXY_PWD=
COLLECTOR_SUPPORTHUB_URL=
[oracle@12col7-112 ~]$

开始静默安装

启动OUI安装器,指定响应文件,开始静默安装,大概需要3分钟左右,很快不是么?

1
<INSTALL_DIR>/runInstaller -ignoreSysPrereqs -waitforcompletion -silent -responseFile <FULL PATH>

需要注意的是:

  • -responseFile 需要使用绝对路径,相对路径会出错
  • -ignoreSysPrereqs 忽略系统检查,这会让你的生活更美好
  • -waitforcompletion 等待安装完成,如果不指定的话,安装过程会转到后台执行,不看日志的话,是不知道有没有安装完的。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[oracle@12col7-112 ~]$ /home/oracle/install/database/runInstaller -ignoreSysPrereqs -waitforcompletion -silent -responseFile /home/oracle/silent-install/response/db_install.rsp
Starting Oracle Universal Installer...

Checking Temp space: must be greater than 500 MB. Actual 39345 MB Passed
Checking swap space: must be greater than 150 MB. Actual 3967 MB Passed
Preparing to launch Oracle Universal Installer from /tmp/OraInstall2017-09-21_11-47-25AM. Please wait ...You can find the log of this install session at:
/u01/app/oraInventory/logs/installActions2017-09-21_11-47-25AM.log

The installation of Oracle Database 12c was successful.
Please check '/u01/app/oraInventory/logs/silentInstall2017-09-21_11-47-25AM.log' for more details.

As a root user, execute the following script(s):
1. /u01/app/oraInventory/orainstRoot.sh
2. /u01/app/oracle/product/12.2.0/dbhome_1/root.sh



Successfully Setup Software.

按照上面的说明,切换到root用户,执行这两个脚本:

1
2
3
4
5
6
7
8
9
10
11
12
13
[oracle@12col7-112 ~]$ su -
Password:
Last login: Thu Sep 21 10:41:14 CST 2017 from 192.168.56.1 on pts/0
[root@12col7-112 ~]# /u01/app/oraInventory/orainstRoot.sh
Changing permissions of /u01/app/oraInventory.
Adding read,write permissions for group.
Removing read,write,execute permissions for world.

Changing groupname of /u01/app/oraInventory to oinstall.
The execution of the script is complete.
[root@12col7-112 ~]# /u01/app/oracle/product/12.2.0/dbhome_1/root.sh
Check /u01/app/oracle/product/12.2.0/dbhome_1/install/root_12col7-112.example.com_2017-09-21_11-56-20-903254406.log for the output of root script
[root@12col7-112 ~]#

开始静默手动创库

先编写一个Oracle环境变量配置文件db_profile.sh

1
2
3
4
5
[oracle@12col7-112 ~]$ cat db_profile.sh
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/12.2.0/dbhome_1
export PATH=$ORACLE_HOME/bin:$PATH
export ORACLE_SID=orcl

在当前的Shell中,执行该文件,导入Oracle环境变量,确保dbca命令能正确找到:

1
2
3
4
5
6
7
[oracle@12col7-112 ~]$ . db_profile.sh
[oracle@12col7-112 ~]$ env|grep ORACLE
ORACLE_SID=orcl
ORACLE_BASE=/u01/app/oracle
ORACLE_HOME=/u01/app/oracle/product/12.2.0/dbhome_1
[oracle@12col7-112 ~]$ which dbca
/u01/app/oracle/product/12.2.0/dbhome_1/bin/dbca

开始安装。下面的命令会创建一个pdb,其中包含一个数据库实例orcl,所有管理员的密码都设置为welcome

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
dbca -silent \
-createDatabase \
-templateName General_Purpose.dbc \
-gdbName orcl.example.com \
-sid orcl \
-createAsContainerDatabase true \
-numberOfPdbs 1 \
-pdbName pdb \
-pdbadminUsername pdba \
-pdbadminPassword welcome \
-SysPassword welcome \
-SystemPassword welcome \
-emConfiguration NONE \
-recoveryAreaDestination $ORACLE_BASE/recovery_area \
-characterSet "AL32UTF8" \
-nationalCharacterSet "UTF8" \
-enableArchive true \
-redoLogFileSize 100

实际执行结果如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
[oracle@12col7-112 ~]$ dbca -silent \
> -createDatabase \
> -templateName General_Purpose.dbc \
> -gdbName orcl.example.com \
> -sid orcl \
> -createAsContainerDatabase true \
> -numberOfPdbs 1 \
> -pdbName pdb \
> -pdbadminUsername pdba \
> -pdbadminPassword welcome \
> -SysPassword welcome \
> -SystemPassword welcome \
> -emConfiguration NONE \
> -recoveryAreaDestination $ORACLE_BASE/recovery_area \
> -recoveryAreaSize 3200 \
> -characterSet "AL32UTF8" \
> -nationalCharacterSet "UTF-8" \
> -enableArchive true \
> -redoLogFileSize 100
[WARNING] [DBT-06801] Specified Fast Recovery Area size (3,200 MB) is less than the recommended value.
CAUSE: Fast Recovery Area size should at least be three times the database size (2,430 MB).
ACTION: Specify Fast Recovery Area Size to be at least three times the database size.
[FATAL] [DBT-11152] National character set specified (UTF-8) is invalid.
[oracle@12col7-112 ~]$ dbca -silent \
> -createDatabase \
> -templateName General_Purpose.dbc \
> -gdbName orcl.example.com \
> -sid orcl \
> -createAsContainerDatabase true \
> -numberOfPdbs 1 \
> -pdbName pdb \
> -pdbadminUsername pdba \
> -pdbadminPassword welcome \
> -SysPassword welcome \
> -SystemPassword welcome \
> -emConfiguration NONE \
> -recoveryAreaDestination $ORACLE_BASE/recovery_area \
> -characterSet "AL32UTF8" \
> -nationalCharacterSet "UTF8" \
> -enableArchive true \
> -redoLogFileSize 100
[WARNING] [DBT-06208] The 'SYS' password entered does not conform to the Oracle recommended standards.
CAUSE:
a. Oracle recommends that the password entered should be at least 8 characters in length, contain at least 1 uppercase character, 1 lower case character and 1 digit [0-9].
b.The password entered is a keyword that Oracle does not recommend to be used as password
ACTION: Specify a strong password. If required refer Oracle documentation for guidelines.
[WARNING] [DBT-06208] The 'SYSTEM' password entered does not conform to the Oracle recommended standards.
CAUSE:
a. Oracle recommends that the password entered should be at least 8 characters in length, contain at least 1 uppercase character, 1 lower case character and 1 digit [0-9].
b.The password entered is a keyword that Oracle does not recommend to be used as password
ACTION: Specify a strong password. If required refer Oracle documentation for guidelines.
[WARNING] [DBT-06208] The 'PDBADMIN' password entered does not conform to the Oracle recommended standards.
CAUSE:
a. Oracle recommends that the password entered should be at least 8 characters in length, contain at least 1 uppercase character, 1 lower case character and 1 digit [0-9].
b.The password entered is a keyword that Oracle does not recommend to be used as password
ACTION: Specify a strong password. If required refer Oracle documentation for guidelines.
Copying database files
1% complete
13% complete
25% complete
Creating and starting Oracle instance
26% complete
30% complete
31% complete
35% complete
38% complete
39% complete
41% complete
Completing Database Creation
42% complete
43% complete
44% complete
46% complete
49% complete
50% complete
Creating Pluggable Databases
55% complete
75% complete
Executing Post Configuration Actions
100% complete
Look at the log file "/u01/app/oracle/cfgtoollogs/dbca/orcl/orcl.log" for further details.
[oracle@12col7-112 ~]$

登陆数据库,查看一下数据库实例的状态:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
[oracle@12col7-112 ~]$ sqlplus / as sysdba

SQL*Plus: Release 12.2.0.1.0 Production on Thu Sep 21 13:35:34 2017

Copyright (c) 1982, 2016, Oracle. All rights reserved.


Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

SQL> select instance_name, status from v$instance;

INSTANCE_NAME STATUS
---------------- ------------
orcl OPEN


SQL> show pdbs

CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 PDB READ WRITE NO

SQL> select name from v$datafile;

NAME
--------------------------------------------------------------------------------
/u01/app/oracle/oradata/orcl/system01.dbf
/u01/app/oracle/oradata/orcl/sysaux01.dbf
/u01/app/oracle/oradata/orcl/undotbs01.dbf
/u01/app/oracle/oradata/orcl/pdbseed/system01.dbf
/u01/app/oracle/oradata/orcl/pdbseed/sysaux01.dbf
/u01/app/oracle/oradata/orcl/users01.dbf
/u01/app/oracle/oradata/orcl/pdbseed/undotbs01.dbf
/u01/app/oracle/oradata/orcl/pdb/system01.dbf
/u01/app/oracle/oradata/orcl/pdb/sysaux01.dbf
/u01/app/oracle/oradata/orcl/pdb/undotbs01.dbf
/u01/app/oracle/oradata/orcl/pdb/users01.dbf

11 rows selected.

SQL> select name from v$controlfile;

NAME
--------------------------------------------------------------------------------
/u01/app/oracle/oradata/orcl/control01.ctl
/u01/app/oracle/recovery_area/orcl/control02.ctl

SQL> select member from v$logfile;

MEMBER
--------------------------------------------------------------------------------
/u01/app/oracle/oradata/orcl/redo03.log
/u01/app/oracle/oradata/orcl/redo02.log
/u01/app/oracle/oradata/orcl/redo01.log

以静默方式配置监听

同样,安装包里面提供了配置监听的响应文件。只需要在这个文件的基础上修改就行。

1
[oracle@12col7-112 ~]$ cp install/database/response/netca.rsp silent-install/response/

去除空白行和注释之后的响应文件内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[oracle@12col7-112 ~]$ cat silent-install/response/netca.rsp | grep -v ^$ | grep -v ^#
[GENERAL]
RESPONSEFILE_VERSION="12.2"
CREATE_TYPE="CUSTOM"
SHOW_GUI=false
[oracle.net.ca]
INSTALLED_COMPONENTS={"server","net8","javavm"}
INSTALL_TYPE=""typical""
LISTENER_NUMBER=1
LISTENER_NAMES={"LISTENER"}
LISTENER_PROTOCOLS={"TCP;1521"}
LISTENER_START=""LISTENER""
NAMING_METHODS={"TNSNAMES","ONAMES","HOSTNAME"}
NSN_NUMBER=1
NSN_NAMES={"EXTPROC_CONNECTION_DATA"}
NSN_SERVICE={"PLSExtProc"}
NSN_PROTOCOLS={"TCP;HOSTNAME;1521"}
[oracle@12col7-112 ~]$

通过响应文件,鸟悄地默默开始配置监听器:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[oracle@12col7-112 ~]$ netca -silent -responsefile /home/oracle/silent-install/response/netca.rsp

Parsing command line arguments:
Parameter "silent" = true
Parameter "responsefile" = /home/oracle/silent-install/response/netca.rsp
Done parsing command line arguments.
Oracle Net Services Configuration:
Profile configuration complete.
Oracle Net Listener Startup:
Running Listener Control:
/u01/app/oracle/product/12.2.0/dbhome_1/bin/lsnrctl start LISTENER
Listener Control complete.
Listener started successfully.
Listener configuration complete.
Oracle Net Services configuration successful. The exit code is 0
[oracle@12col7-112 ~]$

确认监听器状态:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
[oracle@12col7-112 ~]$ lsnrctl

LSNRCTL for Linux: Version 12.2.0.1.0 - Production on 21-SEP-2017 15:00:49

Copyright (c) 1991, 2016, Oracle. All rights reserved.

Welcome to LSNRCTL, type "help" for information.

LSNRCTL> status
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=12col7-112)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for Linux: Version 12.2.0.1.0 - Production
Start Date 21-SEP-2017 14:59:54
Uptime 0 days 0 hr. 0 min. 59 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /u01/app/oracle/product/12.2.0/dbhome_1/network/admin/listener.ora
Listener Log File /u01/app/oracle/diag/tnslsnr/12col7-112/listener/alert/log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=12col7-112)(PORT=1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
Services Summary...
Service "59acf70353b0390ae0537038a8c0a3af.example.com" has 1 instance(s).
Instance "orcl", status READY, has 1 handler(s) for this service...
Service "orcl.example.com" has 1 instance(s).
Instance "orcl", status READY, has 1 handler(s) for this service...
Service "orclXDB.example.com" has 1 instance(s).
Instance "orcl", status READY, has 1 handler(s) for this service...
Service "pdb.example.com" has 1 instance(s).
Instance "orcl", status READY, has 1 handler(s) for this service...
The command completed successfully
LSNRCTL>

安装后设置

请参考下面的文档进行:

最后设置好的数据库可以用EM来访问。

EM

重启系统,之后继续登陆EM,看看数据库是否正常启动。

配置数据库实验环境

CDB和PDB

在配置之前需要先了解在Oracle 12c 中引入的多租用户环境(Multitenant Environment),也就是让一个CDB(数据库容器)存放多个PDB(可插拔数据库),像下面这样:

  • 一组后台进程
  • 一个SGA
  • 多个PDB

CDB with Two PDBs

可以看出,在一个CDB数据库容器中包含了以下几个容器:

  1. 有且只有一个Root容器:CDB$ROOT - 存储着:
  • Oracle提供的元数据,例如Oracle提供的PL/SQL包
  • Common User,每个容器中都存在的用户,比如SYS用户就是一个典型的Common User,这类用户一般以C##_为用户名前缀。
  1. 有且只有一个Seed容器:PDB$SEED - 创建PDB时的模板,这个容器不能修改
  2. 零或多个用户创建的PDB - 包含了用户数据和代码的实体,可以认为这就是以前的数据库,可以进行大多数常规操作。比如一个PDB可以支撑一个HR应用程序,另外一个PDB可以支撑销售系统应用程序

在使用sqlplus / as sysdba登陆时,默认登陆到Root容器:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

[oracle@12col7-112 ~]$ sqlplus / as sysdba

SQL*Plus: Release 12.2.0.1.0 Production on Fri Sep 22 10:27:51 2017

Copyright (c) 1982, 2016, Oracle. All rights reserved.


Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

SQL> show con_name;

CON_NAME
------------------------------
CDB$RO

SQL> show pdbs;

CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 PDB READ WRITE NO
SQL>

创建表空间

在理解了以上概念之后,就明白要创建表空间,首先要切换到PDB中。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
SQL> show pdbs;

CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 PDB READ WRITE NO
SQL> alter session set container=PDB;

Session altered.

SQL> show con_name;

CON_NAME
------------------------------
PDB
SQL>

然后在这个PDB中,创建一个名称为TEST01_TBS,大小为4GB的表空间:

1
2
3
4
5
6
SQL> create tablespace test01_tbs datafile '/u01/app/oracle/oradata/orcl/pdb/test01_tbs.dbf' size 4g;

Tablespace created.

SQL>

如果这一步出错了,想删除表空间的话:

1
drop tablespace TEST01_TBS including contents and datafiles;

查看表空间:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
SQL> set linesize 200
SQL> col file_name for a50
SQL> select file_name, tablespace_name from dba_data_files;

FILE_NAME TABLESPACE_NAME
-------------------------------------------------- ------------------------------
/u01/app/oracle/oradata/orcl/pdb/system01.dbf SYSTEM
/u01/app/oracle/oradata/orcl/pdb/sysaux01.dbf SYSAUX
/u01/app/oracle/oradata/orcl/pdb/undotbs01.dbf UNDOTBS1
/u01/app/oracle/oradata/orcl/pdb/users01.dbf USERS
/u01/app/oracle/oradata/orcl/pdb/test01_tbs.dbf TEST01_TBS

SQL>

创建测试用户

先切换到PDB中,创建测试用户test01,指定默认表空间为test_tbs,密码为test01,并解锁用户账号。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
SQL> show con_name

CON_NAME
------------------------------
PDB
SQL> create user test01 identified by test01 default tablespace TEST01_TBS account unlock;

User created.

SQL> col username for a6
SQL> col default_tablespace for a15
SQL> col temporary_tablespace for a15
SQL> select username,default_tablespace,temporary_tablespace,account_status from dba_users where username like '%TEST01%';

USERNA DEFAULT_TABLESP TEMPORARY_TABLE ACCOUNT_STATUS
------ --------------- --------------- --------------------------------
TEST01 TEST01_TBS TEMP OPEN

SQL>

为test01用户赋予权限,这样test01用户才能访问和操作数据库:

1
2
3
4
5
6
SQL> grant connect, resource to test01;

Grant succeeded.

SQL>

测试用户访问PDB

查看CBD中可以用的服务,会发现通过pdb.example.com这个service_name是可以远程连接到PDB的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
SQL> col name for a15
SQL> col name for a30
SQL> select name,pdb from v$services;

NAME PDB
------------------------------ --------------------
orclXDB CDB$ROOT
orcl.example.com CDB$ROOT
SYS$BACKGROUND CDB$ROOT
SYS$USERS CDB$ROOT
pdb.example.com PDB

SQL>

此外,查看$ORACLE_HOME/network/admin/sqlnet.ora的内容,可以看到Oracle默认启用了两种命名方式:

1
2
3
4
5
6
7
[oracle@12col7-112 ~]$ cat $ORACLE_HOME/network/admin/sqlnet.ora
# sqlnet.ora Network Configuration File: /u01/app/oracle/product/12.2.0/dbhome_1/network/admin/sqlnet.ora
# Generated by Oracle configuration tools.

NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)

[oracle@12col7-112 ~]$

那么,接下来就使用这两种方式分别链接到数据库。

方法一:使用EZCONNECT连接到PDB(推荐)

这种方法无需任何配置,直接可以使用,需要注意的是格式。

如果已经进入到了sqlplus中,使用下面的格式:

1
CONNECT username/password@[//]host[:port][/service_name]

否则,使用下面的格式:

1
sqlplus username/password@[//]host[:port][/service_name]

所以,在数据库本机上,以下任何一种形式都可以让test01用户访问到PDB中:

1
2
3
4
sqlplus test01/test01@12col7-112:1521/pdb.example.com
sqlplus test01/test01@localhost:1521/pdb.example.com
sqlplus test01/test01@12col7-112/pdb.example.com
sqlplus test01/test01@localhost/pdb.example.com

实际效果如下:

1
2
3
4
5
6
7
8
9
10
11
12
[oracle@12col7-112 admin]$ sqlplus test01/test01@12col7-112:1521/pdb.example.com

SQL*Plus: Release 12.2.0.1.0 Production on Fri Sep 22 14:21:40 2017

Copyright (c) 1982, 2016, Oracle. All rights reserved.

Last Successful login time: Fri Sep 22 2017 14:13:32 +08:00

Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

SQL>

方法二:使用传统的TNSNAMES连接到PDB

为了能通过TNSNAMES访问到数据库,需要在$ORACLE_HOME/network/admin/tnsnames.ora
文件中加入如下内容:

1
2
3
4
5
6
7
8
9
pdb =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 12col7-112)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = pdb.example.com)
)
)

之后,就可以通过下面的方式直接访问到PDB了:

1
2
3
4
5
6
7
8
9
10
11
12
13
[oracle@12col7-112 ~]$ sqlplus test01/test01@pdb

SQL*Plus: Release 12.2.0.1.0 Production on Fri Sep 22 14:30:11 2017

Copyright (c) 1982, 2016, Oracle. All rights reserved.

Last Successful login time: Fri Sep 22 2017 14:21:40 +08:00

Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

SQL>

=== END ===

文章目录
  1. 1. 环境
  2. 2. 在Virtualbox中配置虚拟机实例
  3. 3. 安装Oralce Linux
    1. 3.1. 配置网络
    2. 3.2. 设置主机名
    3. 3.3. 关闭防火墙
    4. 3.4. 停用 SELinux (需要重启系统才能生效)
    5. 3.5. 配置YUM源
    6. 3.6. 安装必须的软件包
    7. 3.7. 安装VirtualBox Guest Additions (可选)
  4. 4. 数据库安装选项设置
  5. 5. 静默安装数据库
    1. 5.1. 准备数据库安装文件
    2. 5.2. 编写Oracle Universal Installer(OUI)响应文件
    3. 5.3. 开始静默安装
    4. 5.4. 开始静默手动创库
    5. 5.5. 以静默方式配置监听
  6. 6. 安装后设置
  7. 7. 配置数据库实验环境
    1. 7.1. CDB和PDB
    2. 7.2. 创建表空间
    3. 7.3. 创建测试用户
    4. 7.4. 测试用户访问PDB
      1. 7.4.1. 方法一:使用EZCONNECT连接到PDB(推荐)
      2. 7.4.2. 方法二:使用传统的TNSNAMES连接到PDB