ProxmoxVE 之 安装oracle12C 数据库(CDB和PDB)_第1张图片 ProxmoxVE 之 安装oracle12C 数据库(CDB和PDB)_第2张图片

 上面左边是我的个人微信,如需进一步沟通,请加微信。  右边是我的公众号“Openstack私有云”,如有兴趣,请关注。

    前两天在PVE环境上搭建了oracle12C 的RAC环境(详见另一篇博文“ProxmoxVE 之 安装oracle12C rac集群”),安装完成了grid集群环境的安装以及oracle数据库软件的安装,具备了创建数据库的条件。现在在这个RAC环境上使用dbca创建数据库CDB和PDB。


相关规划如下:

a、存储规划:

    1、  GRID集群组件磁盘组

+grid: 1个,用于OCR+VOTING DISK ,85G ,使用asmdiskc ,共享存储

    2、  数据库安装磁盘组

+system:用于数据库基本表空间,控制文件,参数文件等,50G,使用asmdiskd ,共享存储

+recovery:用于归档与闪回日志空间,50G,使用asmdiske ,共享存储

+data:用户数据库业务表空间,50G,使用asmdiskf ,共享存储


b、IP规划:

    oraclenode1:

        publicip : ens18 :192.168.1.32

        vip:192.168.1.36

        privateip :ens19 :192.168.170.32

    oraclenode2:

        publicip : ens18 :192.168.1.33

        vip:192.168.1.37

        privateip :ens19 :192.168.170.33


        scanip :192.168.1.38


c、软件版本:

    操作系统:CentOS 7.2

    数据库:ORACLE12c R2

    集群管理软件:ORACLEGRID 12.2.0.1


d、主机名规划:    

#public ip 

192.168.1.32         oraclenode1

192.168.1.33         oraclenode2

 

#private ip 

192.168.170.32  oraclenode1pri

192.168.170.32  oraclenode2pri

 

#vip ip

192.168.1.36         oraclenode1vip

192.168.1.37         oraclenode2vip

 

#scan ip

192.168.1.38         oraclenodescan


e、用户及用户组规划:

groupadd -g 60001 oinstall

groupadd -g 60002 dba

groupadd -g 60003 oper

groupadd -g 60004 backupdba

groupadd -g 60005 dgdba

groupadd -g 60006 kmdba

groupadd -g 60007 asmdba

groupadd -g 60008 asmoper

groupadd -g 60009 asmadmin

useradd -u 61001 -g oinstall -G asmadmin,asmdba,dba,asmoper grid

useradd -u 61002 -g oinstall -G dba,backupdba,dgdba,kmdba,asmadmin,oper,asmdba oracle

 

echo "grid" | passwd --stdin grid

echo "oracle" | passwd --stdin oracle


f、目录规划:

mkdir -p /data/oracle/app/grid

mkdir -p /data/oracle/app/12.2.0.1/grid

chown -R grid:oinstall /data/oracle

 

mkdir -p /data/oracle/app/oraInventory

chown -R grid:oinstall /data/oracle/app/oraInventory

 

mkdir -p /data/oracle/app/oracle

chown -R oracle:oinstall /data/oracle/app/oracle

chmod -R 775 /data/oracle

    

asm磁盘组安装:

    登录grid账号,ssh grid@oraclenode1 -X   ,运行 asmca ,按照规划创建asm磁盘组,其中grid磁盘组在配置grid的时候已经创建了,剩下system、recovery、data三个磁盘组需要创建:

ProxmoxVE 之 安装oracle12C 数据库(CDB和PDB)_第3张图片

ProxmoxVE 之 安装oracle12C 数据库(CDB和PDB)_第4张图片

创建完成之后:

ProxmoxVE 之 安装oracle12C 数据库(CDB和PDB)_第5张图片

上面显示4个asm磁盘组都已经创建完成。接下来安装CDB数据库和PDB数据库。


CDB数据库安装:

    以oracle账号登录,ssh oracle@oraclenode1 -X ,运行 dbca :

ProxmoxVE 之 安装oracle12C 数据库(CDB和PDB)_第6张图片

ProxmoxVE 之 安装oracle12C 数据库(CDB和PDB)_第7张图片

ProxmoxVE 之 安装oracle12C 数据库(CDB和PDB)_第8张图片


ProxmoxVE 之 安装oracle12C 数据库(CDB和PDB)_第9张图片

ProxmoxVE 之 安装oracle12C 数据库(CDB和PDB)_第10张图片

ProxmoxVE 之 安装oracle12C 数据库(CDB和PDB)_第11张图片

ProxmoxVE 之 安装oracle12C 数据库(CDB和PDB)_第12张图片

ProxmoxVE 之 安装oracle12C 数据库(CDB和PDB)_第13张图片

ProxmoxVE 之 安装oracle12C 数据库(CDB和PDB)_第14张图片

ProxmoxVE 之 安装oracle12C 数据库(CDB和PDB)_第15张图片

ProxmoxVE 之 安装oracle12C 数据库(CDB和PDB)_第16张图片

上面这一步很重要,字符集一旦选定就不能改了。提前跟需求部门确定字符集,如果是数据库迁移,提前确定源数据库的字符集,使之一致。


ProxmoxVE 之 安装oracle12C 数据库(CDB和PDB)_第17张图片

ProxmoxVE 之 安装oracle12C 数据库(CDB和PDB)_第18张图片

使用统一的密码 : oracle

ProxmoxVE 之 安装oracle12C 数据库(CDB和PDB)_第19张图片


ProxmoxVE 之 安装oracle12C 数据库(CDB和PDB)_第20张图片


ProxmoxVE 之 安装oracle12C 数据库(CDB和PDB)_第21张图片

ProxmoxVE 之 安装oracle12C 数据库(CDB和PDB)_第22张图片

ProxmoxVE 之 安装oracle12C 数据库(CDB和PDB)_第23张图片

ProxmoxVE 之 安装oracle12C 数据库(CDB和PDB)_第24张图片

开始安装,耐心等待。。。。。

安装完成,如下:

ProxmoxVE 之 安装oracle12C 数据库(CDB和PDB)_第25张图片

使用grid登录,使用crsctl status res -t 命令查看状态如下:

[grid@oraclenode2 ~]$ crsctl status res -t
--------------------------------------------------------------------------------
Name           Target  State        Server                   State details       
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
ora.ASMNET1LSNR_ASM.lsnr
               ONLINE  ONLINE       oraclenode1              STABLE
               ONLINE  ONLINE       oraclenode2              STABLE
ora.DATA.dg
               ONLINE  ONLINE       oraclenode1              STABLE
               ONLINE  ONLINE       oraclenode2              STABLE
ora.GRID.dg
               ONLINE  ONLINE       oraclenode1              STABLE
               ONLINE  ONLINE       oraclenode2              STABLE
ora.LISTENER.lsnr
               ONLINE  ONLINE       oraclenode1              STABLE
               ONLINE  ONLINE       oraclenode2              STABLE
ora.RECOVERY.dg
               ONLINE  ONLINE       oraclenode1              STABLE
               ONLINE  ONLINE       oraclenode2              STABLE
ora.SYSTEM.dg
               ONLINE  ONLINE       oraclenode1              STABLE
               ONLINE  ONLINE       oraclenode2              STABLE
ora.chad
               ONLINE  ONLINE       oraclenode1              STABLE
               ONLINE  ONLINE       oraclenode2              STABLE
ora.net1.network
               ONLINE  ONLINE       oraclenode1              STABLE
               ONLINE  ONLINE       oraclenode2              STABLE
ora.ons
               ONLINE  ONLINE       oraclenode1              STABLE
               ONLINE  ONLINE       oraclenode2              STABLE
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.LISTENER_SCAN1.lsnr
      1        ONLINE  ONLINE       oraclenode1              STABLE
ora.MGMTLSNR
      1        ONLINE  ONLINE       oraclenode1              169.254.178.157 192.
                                                             168.170.32,STABLE
ora.asm
      1        ONLINE  ONLINE       oraclenode1              Started,STABLE
      2        ONLINE  ONLINE       oraclenode2              Started,STABLE
      3        OFFLINE OFFLINE                               STABLE
ora.cvu
      1        ONLINE  ONLINE       oraclenode1              STABLE
ora.mgmtdb
      1        ONLINE  ONLINE       oraclenode1              Open,STABLE
ora.oraclenode1.vip
      1        ONLINE  ONLINE       oraclenode1              STABLE
ora.oraclenode2.vip
      1        ONLINE  ONLINE       oraclenode2              STABLE
ora.orcl.db
      1        ONLINE  ONLINE       oraclenode1              Open,HOME=/data/orac
                                                             le/app/oracle/produc
                                                             t/12.2.0.1/db_1,STAB
                                                             LE
      2        ONLINE  ONLINE       oraclenode2              Open,HOME=/data/orac
                                                             le/app/oracle/produc
                                                             t/12.2.0.1/db_1,STAB
                                                             LE
ora.qosmserver
      1        ONLINE  ONLINE       oraclenode1              STABLE
ora.scan1.vip
      1        ONLINE  ONLINE       oraclenode1              STABLE
--------------------------------------------------------------------------------
[grid@oraclenode2 ~]$

现在就可以很开心的使用CDB和PDB了,相关的概念和常用操作具体可以参考这个网址:

https://blog.51cto.com/fengfeng688/1946278

需要注意的是,oracle和grid的环境变量中有一个SID,两个rac节点需要不一样,比如数据库安装的时候SID前缀设置为orcldb1 ,那么两个节点的$ORACLE_SID分别应该是: 

orcldb11

orcldb12

grid的环境变量,$ORACLE_SID分别是:

ASMI

ASM2

如果SID没有设置对,查看集群资源的时候会看到db资源处于OPEN状态,但是使用oracle账号登录使用sqlplus进入数据库管理的时候会提示connect to an idle instance 。


CDB和PDB相关测试:

  

查看当前的容器:
SQL> show con_name;
CON_NAME
------------------------------
CDB$ROOT

查看CDB中的PDB信息:
SQL> select con_id, dbid, guid, name , open_mode from v$pdbs;
    CON_ID DBID GUID
---------- ---------- --------------------------------
NAME
--------------------------------------------------------------------------------
OPEN_MODE
--------------------
 2 2349385738 7F78C92375923F6DE0532001A8C0107F
PDB$SEED
READ ONLY
 3  364970257 7F7A374E7B7E37F5E0532001A8C09EA4
ORCL_PDB1
READ WRITE
    CON_ID DBID GUID
---------- ---------- --------------------------------
NAME
--------------------------------------------------------------------------------
OPEN_MODE
--------------------

创建一个测试pdb:
SQL> create pluggable database test_pdb admin user admin identified by admin;
Pluggable database created.

将一个pdb打开:
SQL> alter pluggable database test_pdb open; 
Pluggable database altered.
SQL> select con_id,dbid,con_uid,guid,name,open_mode,create_scn,total_size,block_size from v$pdbs;
    CON_ID DBID CON_UID GUID
---------- ---------- ---------- --------------------------------
NAME
--------------------------------------------------------------------------------
OPEN_MODE     CREATE_SCN TOTAL_SIZE BLOCK_SIZE
-------------------- ---------- ---------- ----------
 2 2349385738 2349385738 7F78C92375923F6DE0532001A8C0107F
PDB$SEED
READ ONLY1408773  801112064 8192
 3  364970257  364970257 7F7A374E7B7E37F5E0532001A8C09EA4
ORCL_PDB1
READ WRITE1467170  911212544 8192
    CON_ID DBID CON_UID GUID
---------- ---------- ---------- --------------------------------
NAME
--------------------------------------------------------------------------------
OPEN_MODE     CREATE_SCN TOTAL_SIZE BLOCK_SIZE
-------------------- ---------- ---------- ----------
 4  841599650  841599650 7F7A57321EE03A16E0532001A8C0E4B4
TEST_PDB
READ WRITE1471014  801112064 8192

从一个pdb中克隆一个pdb:
SQL> create pluggable database test2_pdb from test_pdb; 
Pluggable database created.
SQL>  alter pluggable database test2_pdb open;          
Pluggable database altered.

切换cdb和pdb线程:
SQL> alter session set container=test_pdb;
Session altered.
SQL>  alter session set container=cdb$root; 
Session altered.

关闭一个pdb:
SQL> alter pluggable database test_pdb close;
Pluggable database altered.

关闭所有的pdb:
SQL> alter pluggable database all close;  
Pluggable database altered.

拔出pdb并生成xml文件:
SQL> alter pluggable database orcl_pdb1 unplug into '/home/oracle/orcl_pdb1.xml';
alter pluggable database orcl_pdb1 unplug into '/home/oracle/orcl_pdb1.xml'
*
ERROR at line 1:
ORA-65025: Pluggable database ORCL_PDB1 is not closed on all instances.
上面报错,是因为在rac环境,需要在所有实例中关闭pdb,在另外一个节点oraclenode2中也关闭pdb后,在执行下面的语句:
SQL> alter pluggable database orcl_pdb1 unplug into '/home/oracle/orcl_pdb1.xml';
Pluggable database altered.

删除pdb:
SQL> drop pluggable database orcl_pdb1 keep datafiles;
Pluggable database dropped.

在另一个节点oraclenode2上执行存储过程检查pdb兼容性:
SQL> exec DBMS_PDB.Check_Plug_Compatibility(PDB_Descr_File=>'/home/oracle/orcl_pdb1.xml'); 
BEGIN DBMS_PDB.Check_Plug_Compatibility(PDB_Descr_File=>'/home/oracle/orcl_pdb1.xml'); END;
      *
ERROR at line 1:
ORA-06550: line 1, column 7:
PLS-00221: 'CHECK_PLUG_COMPATIBILITY' is not a procedure or is undefined
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored
报错说没有Check_Plug_Compatibility这个存储过程,忽略,因为是同一套集群,版本是一致的。、

将xml文件拷贝到另一个节点oraclenode2上,并执行从xml中创建pdb:
SQL> create pluggable database orcl_pdb1  using '/home/oracle/orcl_pdb1.xml' ;

Pluggable database created.
SQL> 
SQL> alter pluggable database orcl_pdb1 open;
Pluggable database altered.
SQL>

  

至此,CDB和PDB相关的简单测试完成。


总结:

    在安装完成RAC集群的情况下,再安装数据库软件,安装数据库就显得比较简单了,主要难点还是在安装RAC集群grid上面 。

    数据库的安装主要的工作应该是需要放在根据实际生产环境规划存储,规划数据文件,规划CDB和PDB,以及优化相关的数据库参数。安装本身来说是比较简单的,只需要在图形化界面中运行dbca一路根据规划进行安装即可。

    在我自己的安装过程中,碰到一个问题是安装成功后发现sqlplus进去提示connect to an idle instance  ,后面检查发现是oracle账号的$ORACLE_SID环境变量设置不正确导致的,调整正确后就正常了。

    CDB和PDB还有客户端的连接使用这一块没有测试。

    从方便性上现在还不能说有了PDB之后就更方便了,只能说有了PDB之后,对于更多复杂应用和更大型的数据库应用逻辑区分更清楚一些了,同一类的业务,可以新建一个CDB,在一个CDB中对每一个业务创建一个PDB。原来的数据库是通过用户schema来区分,现在直接通过pdb区分。另外数据导入导出方面没有经过测试,不知道PDB的拔出插入是不是比以前的expdp或者rman方式要效率高,只有在今后使用过程中通过实践来检验了。