DBCA平时使用图形界面比较多,但有时在云上,不太方便使用图形界面,这个时候,静默模式,就是一个不错的选择,而且,使用DBCA去进行克隆,不需要手工去建立DBLINK,以及克隆后,都不需要手工去打开克隆的PDB,还是很方便的。
目标:
使用DBCA 克隆PDB1 到 cdb2,并名为PDB2
环境:
源:cdb1
目的:CDB2
复制的PDB:PDB1
前提条件:
1.两个CDB开启归档
2.两个CDB使用LOCAL UNDO
3.DBLINK连接用户,需要CREATE PLUGGABLE DATABASE 权限
4.目的端使用OMF
步骤:
1.开启归档
1.1 CDB1 开启归档
SYS@cdb1 >! mkdir /u01/app/oracle/fast_recovery_area
SYS@cdb1 >alter system set db_recovery_file_dest='/u01/app/oracle/fast_recovery_area';
System altered.
SYS@cdb1 >archive log list;
Database log mode No Archive Mode
Automatic archival Disabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 34
Current log sequence 36
SYS@cdb1 >shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SYS@cdb1 >startup mount;
ORACLE instance started.
Total System Global Area 1258287360 bytes
Fixed Size 9163008 bytes
Variable Size 637534208 bytes
Database Buffers 603979776 bytes
Redo Buffers 7610368 bytes
Database mounted.
SYS@cdb1 >alter database archivelog;
Database altered.
SYS@cdb1 >alter database open;
Database altered.
1.2 CDB2开启归档
[oracle@dbserver ~]$ sqlplus /nolog
SQL*Plus: Release 19.0.0.0.0 - Production on Sun Oct 22 11:58:52 2023
Version 19.20.0.0.0
Copyright (c) 1982, 2022, Oracle. All rights reserved.
@ >conn / as sysdba
Connected.
SYS@cdb2 >archive log list;
Database log mode No Archive Mode
Automatic archival Disabled
Archive destination /u01/app/oracle/product/19.20.0/db_1/dbs/arch
Oldest online log sequence 15
Current log sequence 17
SYS@cdb2 >show parameter recover
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest string
db_recovery_file_dest_size big integer 0
db_unrecoverable_scn_tracking boolean TRUE
recovery_parallelism integer 0
remote_recovery_file_dest string
SYS@cdb2 >alter system set db_recovery_file_dest_size=20g;
System altered.
SYS@cdb2 >alter system set db_recovery_file_dest='/u01/app/oracle/fast_recovery_area';
System altered.
SYS@cdb2 >shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SYS@cdb2 >startup mount;
ORACLE instance started.
Total System Global Area 2415918584 bytes
Fixed Size 9166328 bytes
Variable Size 520093696 bytes
Database Buffers 1879048192 bytes
Redo Buffers 7610368 bytes
Database mounted.
SYS@cdb2 >alter database archivelog;
Database altered.
SYS@cdb2 >alter database open;
Database altered.
2.CDB2 设置OMF
SYS@cdb2 >show parameter db_create
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_create_file_dest string
db_create_online_log_dest_1 string
db_create_online_log_dest_2 string
db_create_online_log_dest_3 string
db_create_online_log_dest_4 string
db_create_online_log_dest_5 string
SYS@cdb2 >alter system set db_create_file_dest='/u01/app/oracle/oradata/';
System altered.
3. PDB1 保持打开状态
SYS@cdb1 >show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 PDB1 MOUNTED
4 PDB3 MOUNTED
6 PDB_ORCL MOUNTED
SYS@cdb1 >alter pluggable database pdb1 open;
Pluggable database altered.
SYS@cdb1 >show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 PDB1 READ WRITE NO
4 PDB3 MOUNTED
6 PDB_ORCL MOUNTED
SYS@cdb1 >
4. 创建DBLINK连接用户
在 cdb1 中创建DBLINK连接用户,并授予 create pluggable database 权限
SYS@cdb1 >create user c##remote_user
2 identified by oracle_4U;
SYS@cdb1 >grant create session,create pluggable database
2 to c##remote_user
3 container=all;
Grant succeeded.
5.使用 dbca 去进行PDB克隆
[oracle@dbserver ~]$ dbca -silent -createpluggabledatabase -createFromRemotePDB -remotePDBName PDB1 \
> -remoteDBConnString 192.168.133.120:1521/cdb1 \
> -remoteDBSYSDBAUserName SYS \
> -remoteDBSYSDBAUserPassword oracle_4U \
> -sysDBAUserName sys \
> -sysDBAPassword oracle_4U \
> -dbLinkUsername c##remote_user \
> -dbLinkUserPassword oracle_4U \
> -sourceDB CDB2 -pdbName PDB2
Prepare for db operation
50% complete
Create pluggable database using remote clone operation
100% complete
Pluggable database "PDB2" plugged successfully.
Look at the log file "/u01/app/oracle/cfgtoollogs/dbca/cdb2/PDB2/cdb2.log" for further details.
[oracle@dbserver ~]$
6.确认PDB2 状态
[oracle@dbserver ~]$ sqlplus /nolog
SQL*Plus: Release 19.0.0.0.0 - Production on Sun Oct 22 12:02:49 2023
Version 19.20.0.0.0
Copyright (c) 1982, 2022, Oracle. All rights reserved.
@ >conn / as sysdba
Connected.
SYS@cdb2 >show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 PDB2 READ WRITE NO
SYS@cdb2 >
7.附录 报错信息
7.1 克隆使用脚本:
dbca -silent -createpluggabledatabase -createFromRemotePDB -remotePDBName PDB1 \
-remoteDBConnString 192.168.133.120:1521/cdb1 \
-remoteDBSYSDBAUserName SYS \
-remoteDBSYSDBAUserPassword oracle_4U \
-sysDBAUserName sys \
-sysDBAPassword oracle_4U \
-dbLinkUsername c##remote_user \
-dbLinkUserPassword oracle_4U \
-sourceDB CDB2 -pdbName PDB2
7.2 报错信息
[oracle@dbserver ~]$ dbca -silent -createpluggabledatabase -createFromRemotePDB -remotePDBName PDB1 \
> -remoteDBConnString 192.168.133.120:1521/cdb1 \
> -remoteDBSYSDBAUserName SYS \
> -remoteDBSYSDBAUserPassword oracle_4U \
> -sysDBAUserName sys \
> -sysDBAPassword oracle_4U \
> -dbLinkUsername c##remote_user \
> -dbLinkUserPassword oracle_4U \
> -sourceDB CDB2 -pdbName PDB2
[FATAL] [DBT-08101] The selected PDB (PDB1) is not open.
CAUSE: PDB has to be open in READ WRITE mode to perform the configuration.
[oracle@dbserver ~]$ dbca -silent -createpluggabledatabase -createFromRemotePDB -remotePDBName PDB1 \
> -remoteDBConnString 192.168.133.120:1521/cdb1 \
> -remoteDBSYSDBAUserName SYS \
> -remoteDBSYSDBAUserPassword oracle_4U \
> -sysDBAUserName sys \
> -sysDBAPassword oracle_4U \
> -dbLinkUsername c##remote_user \
> -dbLinkUserPassword oracle_4U \
> -sourceDB CDB2 -pdbName PDB2
[FATAL] [DBT-19401] Archive log mode is not enabled in the (cdb1) database.
CAUSE: (cdb1) database should be configured with archive log mode to perform the operation.
[oracle@dbserver ~]$ dbca -silent -createpluggabledatabase -createFromRemotePDB -remotePDBName PDB1 \
-remoteDBConnString 192.168.133.120:1521/cdb1 \
-remoteDBSYSDBAUserName SYS \
-remoteDBSYSDBAUserPassword oracle_4U \
-sysDBAUserName sys \
-sysDBAPassword oracle_4U \
-dbLinkUsername c##remote_user \
-dbLinkUserPassword oracle_4U \
-sourceDB CDB2 \
-pdbName PDB2
[FATAL] [DBT-19408] Incompatible location type for PDB operation. Pluggable database operation cannot be performed.
CAUSE: Remote CDB(cdb1) is configured with Oracle Managed Files (OMF) option. Local CDB(CDB2) is not configured with OMF option.
[oracle@dbserver ~]$ dbca -silent -createpluggabledatabase -createFromRemotePDB -remotePDBName PDB1 \
> -remoteDBConnString 192.168.133.120:1521/cdb1 \
> -remoteDBSYSDBAUserName SYS \
> -remoteDBSYSDBAUserPassword oracle_4U \
> -sysDBAUserName sys \
> -sysDBAPassword oracle_4U \
> -dbLinkUsername c##remote_user \
> -dbLinkUserPassword oracle_4U \
> -sourceDB CDB2 -pdbName PDB2
[FATAL] [DBT-19401] Archive log mode is not enabled in the (CDB2) database.
CAUSE: (CDB2) database should be configured with archive log mode to perform the operation.