版本说明:
原库:ORACLE 12cR1 非CDB架构
目标库:ORACLE 12cR1 CDB架构
一、 目标数据库安装
略
二、 dbca创建CDB数据库实例
#dbca -silent -createDatabase -templateName General_Purpose.dbc -responseFile NO_VALUE \
-GDBNAME T24_CDB \
-SID T24_CDB \
-EMCONFIGURATION "NONE" \
-SYSPASSWORD "Password_4U" \
-SYSTEMPASSWORD "Password_4U" \
-DBSNMPPASSWORD "Password_4U" \
-STORAGETYPE FS \
-CREATEASCONTAINERDATABASE TRUE \
-NUMBEROFPDBS 1 \
-PDBNAME SGP_DEV \
-DATAFILEDESTINATION "/odata/datafile/" \
-RECOVERYAREADESTINATION "/odata/fast_recovery_area/" \
-MEMORYPERCENTAGE "15" \
-AUTOMATICMEMORYMANAGEMENT TRUE \
-CHARACTERSET "AL32UTF8" \
-NATIONALCHARACTERSET "AL16UTF16"
注意:
- 此处CREATEASCONTAINERDATABASE选项标识(TRUE)创建CDB容器数据库;
- NUMBEROFPDBS 指定初始的PDB数量,除pdb$seed外,系统自动创建可插拔数据库PDB数量;
- PDBNAME指定所创建的PDB名,也可以不指定,由系统默认;
- 其他GDBNAME、SID、DATAFILEDESTINATION等与非CDB架构相同;
三、 配置到源库的tns连接串
如:tnsnames.ora
SGP_DEV2 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 99.12.98.194)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = SGP_DEV2)
)
)
配置完成后使用tnsping测试:
bash-4.2$ tnsping SGP_DEV2
TNS Ping Utility for Linux: Version 12.1.0.2.0 - Production on 08-JUL-2019 19:27:57
Copyright (c) 1997, 2014, Oracle. All rights reserved.
Used parameter files:
/oinstall/oracle/product/12.1.0/dbhome_1/network/admin/sqlnet.ora
Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 99.12.98.194)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = SGP_DEV2)))
OK (10 msec)
bash-4.2$
四、 目标库创建DB link
SQL> create database link OLDDB connect to system identified by XXX using ‘TNS_NAME’;
注意:
- TNS_NAME为第三步创建的tns连接串名;
- OLDDB为db link对象名;
- XXX表示用户SYSTEM的密码
五、 将原库设置为read only
SQL>shutdown immediate;
SQL>startup open read only;
说明:因为12cR1 的undo表空间只支持share模式,即CDB架构中的所有PDB共享UNDO表空间,且防止clone过程中原库发生变化,必须将原库设置为只读。否则后续步骤报错。
六、 使用db link克隆远程数据库
SQL> create pluggable database PDB_DEV from NON$CDB@OLDDB file_name_convert=(‘PATH1’,’PATH2’);
注意:
- 克隆生成的PDB名为:PDB_DEV
- 此命令使用NON$CDB用户连接DB link,NON$CDB为oracle官方提供的专用于非CDB迁移的用户??
- file_name_convert用于文件路径转换;
命令执行完后,理论上PDB_DEV这个PDB已创建成功,相关service也就绪(lsnrctl status查看);
七、 noncdb_to_pdb.sql转换
- 修改会话:
SQL> alter session set container= PDB_DEV
- 转换成PDB
SQL> @$ORACLE_HOME/rdbms/admin/noncdb_to_pdb.sql
注意:
1. 此步骤可能耗费 5~10min,请耐心等待;
2. 据说,12cR1版本调用此脚本可能会报错(ORA-600),此报错是oracle的一个bug,笔者在转换时暂未出现;
八、 最后
转换后的PDB处于read only状态(or mount 状态),修改为open状态:
SQL> alter pluggable database PDB_DEV open
完--------------------欢迎讨论