ORACLE 19C NONCDB 转 PDB

使用DBMS_PDB.DESCRIBE ,将 非CDB 库插入到CDB 中

主机信息

角色主机名IP地址数据库版本实例名DB名
NONCDBtest01192.168.65.16919.30orcltest01orcltest01
CDBechodd192.168.65.16819.30orclorcl

NONCDB 库操作

1、以只读模式打开:

SQL> startup mount;
ORACLE instance started.

Total System Global Area 4731172128 bytes
Fixed Size                  8906016 bytes
Variable Size             872415232 bytes
Database Buffers         3841982464 bytes
Redo Buffers                7868416 bytes
Database mounted.

// 开启到只读状态
SQL> alter database open read only;
Database altered.

2、执行 DBMS_PDB.DESCRIBE 包,创建 XML 文件,其中包含有关 NONCDB 数据库数据文件的描述:

SQL> exec dbms_pdb.describe(pdb_descr_file => '/home/oracle/testdb01.xml');

PL/SQL procedure successfully completed.

3、关闭 NONCDB 数据库:

SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.

注意:这里不能打开数据库,详细原因在后面,先看

4、完整拷贝数据文件目录和 XML文件拷贝到目标端:

[oracle@test01:/home/oracle]$ scp testdb01.xml 192.168.65.168:/home/oracle
oracle@192.168.65.168's password: 
testdb01.xml                   100% 6945     7.2MB/s   00:00  
[oracle@test01:/home/oracle]$ cd /u01/app/oracle/oradata
[oracle@test01:/u01/app/oracle/oradata]$ scp -r ORCLTEST01 192.168.65.168:/oradata
oracle@192.168.65.168's password: 
system01.dbf                                                                                                                                100%  990MB 123.7MB/s   00:08    
sysaux01.dbf                                                                                                                                100%  710MB 177.4MB/s   00:04    
undotbs01.dbf                                                                                                                               100%  605MB 121.0MB/s   00:05    
users01.dbf                                                                                                                                 100% 5128KB 114.3MB/s   00:00    
control01.ctl                                                                                                                               100%   10MB 162.5MB/s   00:00    
control02.ctl                                                                                                                               100%   10MB 165.3MB/s   00:00    
redo01.log                                                                                                                                  100%  200MB 100.0MB/s   00:02    
redo02.log                                                                                                                                  100%  200MB 199.9MB/s   00:01    
redo03.log                                                                                                                                  100%  200MB 199.9MB/s   00:01    
temp01.dbf                                                                                                                                  100%   95MB  95.0MB/s   00:01  

CDB 库操作

1、执行 DBMS_PDB.CHECK_PLUG_COMPATIBILITY ,检查 NON-CDB 兼容性,修改新pdb名称:

SQL> set serveroutput on
DECLARE
  compatible CONSTANT VARCHAR2(3) := CASE dbms_pdb.check_plug_compatibility(pdb_descr_file => '/home/oracle/testdb01.xml',
                                                                        pdb_name       => 'Echodd')
                                       WHEN TRUE THEN
                                        'YES'
                                       ELSE
                                        'NO'
                                     END;
BEGIN
  dbms_output.put_line(compatible);
END;
/SQL>   2    3    4    5    6    7    8    9   10   11   12  
YES   //这个是输出

PL/SQL procedure successfully completed.

注:输出 YES,代表正常兼容,可以正常转换

(如果返回 FALSE/NO,需在 PDB_PLUG_IN_VIOLATIONS 视图中检查)

select time, name, type, error_number error, status, line, message, cause, action from pdb_plug_in_violations order by time desc;

2、插入为新pdb:

// copy 创建
SQL> CREATE PLUGGABLE DATABASE echodd USING '/home/oracle/testdb01.xml'
    COPY FILE_NAME_CONVERT = ('/oradata/ORCLTEST01', '/oradata/ORCL/ECHODD');  2  

Pluggable database created.

// nocopy 创建
SQL> create pluggable database echodddb using '/home/oracle/testdb01.xml' nocopy tempfile reuse;

Pluggable database created.

注意:在上面生成XML文件后如果打开了数据库,关闭后再传输,会导致数据不一致,如下XML文件中记录的fcpsb值是2292714,而数据文件中的值是2292717

SQL> CREATE PLUGGABLE DATABASE echodd USING '/home/oracle/testdb01.xml'
    COPY FILE_NAME_CONVERT = ('/oradata/ORCLTEST01', '/oradata/ORCL/ECHODD');
CREATE PLUGGABLE DATABASE echodd USING '/home/oracle/testdb01.xml'
    COPY FILE_NAME_CONVERT = ('/oradata/ORCLTEST01', '/oradata/ORCL/ECHODD')
*
ERROR at line 1:
ORA-65139: Mismatch between XML metadata file and data file
/oradata/ORCLTEST01/system01.dbf for value of fcpsb (2292714 in the plug XML
file, 2292717 in the data file)

3、连接到 pdb并执行noncdb_to_pdb.sql 脚本,对新创建的PDB进行必要的数据字典和信息转换:

SQL> show pdbs

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

Session altered.

SQL> @?/rdbms/admin/noncdb_to_pdb.sql
。。。。。。很长。。。等等等等。。。

4、打开 PDB:

SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         5 ECHODD                         MOUNTED
SQL> alter pluggable database echodd open;

Pluggable database altered.

SQL> 
SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         5 ECHODD                         READ WRITE NO
SQL> SELECT * FROM CUST;  //查看原库数据

   CUST_ID LAST_NAME                      FIRST_NAME
---------- ------------------------------ ------------------------------
         1 Smith                          John
         2 Jones                          Jane
         3 Brown                          Michael
         4 Davis                          Emily
         5 Wilson                         David

5 rows selected.

完成。

注:

1、如果是copy方式,会在目标路径下生成如下文件:

[root@echodd:/oradata/ORCL/echodd]# ll
total 1054808
-rw-r----- 1 oracle oinstall 482353152 Feb 25 21:01 sysaux01.dbf
-rw-r----- 1 oracle oinstall 377495552 Feb 25 21:01 system01.dbf
-rw-r----- 1 oracle oinstall  84942848 Feb 25 20:37 temp01.dbf
-rw-r----- 1 oracle oinstall 214966272 Feb 25 21:01 undotbs01.dbf
-rw-r----- 1 oracle oinstall   5251072 Feb 25 21:01 users01.dbf

2、如果是nocopy方式,还会复用传输过来的文件,但是control、redo不再使用:

[root@echodd:/oradata/ORCLTEST01]# ll
total 3446036
-rw-r----- 1 oracle oinstall   10600448 Feb 27 17:47 control01.ctl
-rw-r----- 1 oracle oinstall   10600448 Feb 27 17:47 control02.ctl
-rw-r----- 1 oracle oinstall  209715712 Feb 27 17:47 redo01.log
-rw-r----- 1 oracle oinstall  209715712 Feb 27 17:47 redo02.log
-rw-r----- 1 oracle oinstall  209715712 Feb 27 17:47 redo03.log
-rw-r----- 1 oracle oinstall  744497152 Feb 27 19:05 sysaux01.dbf
-rw-r----- 1 oracle oinstall 1038098432 Feb 27 19:05 system01.dbf
-rw-r----- 1 oracle oinstall   99622912 Feb 27 17:56 temp01.dbf
-rw-r----- 1 oracle oinstall  990912512 Feb 27 19:04 undotbs01.dbf
-rw-r----- 1 oracle oinstall    5251072 Feb 27 18:01 users01.dbf
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值