本文主要是介绍OCA/OCP Oracle 数据库12c考试指南读书笔记:第27章: Duplicating a Database,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
可传输表空间可将表空间从一个数据库拷贝到另一数据库,而无需耗时的export/import。
可传输数据库是可传输表空间的扩展,可创建新数据库,并将非系统表空间拷贝到新数据库。
还可以复制整个数据库,源数据库可以不停机,无需RMAN中间文件,因此可节省时间和空间。
描述和使用可传输表空间和可传输数据库
数据在数据库间的传递可使用Database Link,Data Pump和可传输表空间。数据量大时,可传输表空间是最快的。
简单来说,是利用Data Pump导出元数据,然后拷贝数据文件到目标端,然后在目标数据库中导入元数据。源和目标数据库的硬件平台可以不同,但字符集必须相同。
配置可传输表空间
源和目标平台必须Oracle支持。
确认兼容性需求
Oracle数据库兼容性受COMPATIBLE参数控制,已启用或禁用某些数据库特性。
例如从11g升级到12c时,可以暂时将兼容性设置为11g,这样如果升级后遇到问题,可以回退到11g而无需做数据库恢复。
从11g开始,可以将表空间迁移到相同或更高兼容性级别的硬件平台。
确认字节序(Endian)要求
字节序分为Little Endian和Big Endian,例如2,如果存为0x0002,则称为Big Endian,如果存为0x0200,则称为Little Endian。
如果两个平台的字节序不同,则需要做转换。
以下为支持平台的字节序:
SQL> select platform_id, platform_name, endian_format from v$transportable_platform;PLATFORM_ID PLATFORM_NAME ENDIAN_FORMAT
----------- ------------------------------------ --------------1 Solaris[tm] OE (32-bit) Big2 Solaris[tm] OE (64-bit) Big7 Microsoft Windows IA (32-bit) Little10 Linux IA (32-bit) Little6 AIX-Based Systems (64-bit) Big3 HP-UX (64-bit) Big5 HP Tru64 UNIX Little4 HP-UX IA (64-bit) Big11 Linux IA (64-bit) Little15 HP Open VMS Little8 Microsoft Windows IA (64-bit) Little9 IBM zSeries Based Linux Big13 Linux x86 64-bit Little16 Apple Mac OS Big12 Microsoft Windows x86 64-bit Little17 Solaris Operating System (x86) Little18 IBM Power Based Linux Big19 HP IA Open VMS Little20 Solaris Operating System (x86-64) Little21 Apple Mac OS (x86-64) Little22 Linux OS (S64) Big21 rows selected.
当前平台的字节序:
SQL> select platform_name, endian_format from v$transportable_platform join v$database using(platform_name);PLATFORM_NAME ENDIAN_FORMAT
------------------------------------ --------------
Linux x86 64-bit Little
如果两个平台的字节序不同,则必须在源或目标端利用RMAN来将数据文件转为目标平台支持的格式,例如:
RMAN> convert datafile 'path_to_file' to platform 'AIX-Based Systems (64-bit)' format 'path_to_file';
文件可直接或通过DBMS_FILE_TRANSFER拷贝到目标平台。
传输的表空间必须是自包含的
表空间中包含的对象必须是完整的,若一个对象引用零一对象,则它们必须都包含在内。DBMS_TTS可以测试自包含性。
例如一个表包含多个分区,每个分区在不同的表空间。
可传输表空间
大致过程如下:
- 将源表空间设为只读
- 在源端,使用DataPump导出表空间的元数据
- 如果与目标端的字节序不同,则转换数据文件(可以在源或目标端做)
- 将表空间相关的数据文件和元数据拷贝到目标端(可使用DBMS_FILE_TRANSFER完成)
- 使用Data Pump导入元数据
- 将源和目标数据库设为读写
示例:
-- 连接到PDB
connect sys/Welcome1@orclpdb1 as sysdba
create tablespace trans datafile '/opt/oracle/oradata/ORCLCDB/ORCLPDB1/trans.dbf' size 10m;
create table transtab tablespace trans as select * from all_users;
-- 检测耗时会长些
exec dbms_tts.transport_set_check('trans');
select * from transport_set_violations;
alter tablespace trans read only;
然后导出元数据,这个命令执行时间较长:
$ expdp "sys/Welcome1@orclpdb1 as sysdba" dumpfile=trans.dmp transport_tablespaces=trans
LRM-00108: invalid positional parameter value 'sysdba'[oracle@oracle-19c-vagrant ~]$ expdp system/Welcome1@orclpdb1 dumpfile=trans.dmp transport_tablespaces=transExport: Release 19.0.0.0.0 - Production on Tue Dec 24 18:28:21 2019
Version 19.3.0.0.0Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved.Connected to: Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Starting "SYSTEM"."SYS_EXPORT_TRANSPORTABLE_01": system/********@orclpdb1 dumpfile=trans.dmp transport_tablespaces=trans
Processing object type TRANSPORTABLE_EXPORT/STATISTICS/TABLE_STATISTICS
Processing object type TRANSPORTABLE_EXPORT/PLUGTS_BLK
Processing object type TRANSPORTABLE_EXPORT/POST_INSTANCE/PLUGTS_BLK
Processing object type TRANSPORTABLE_EXPORT/TABLE
Master table "SYSTEM"."SYS_EXPORT_TRANSPORTABLE_01" successfully loaded/unloaded
******************************************************************************
Dump file set for SYSTEM.SYS_EXPORT_TRANSPORTABLE_01 is:/opt/oracle/admin/ORCLCDB/dpdump/974B2FC950D006CEE0530100007FB806/trans.dmp
******************************************************************************
Datafiles required for transportable tablespace TRANS:/opt/oracle/oradata/ORCLCDB/ORCLPDB1/trans.dbf
Job "SYSTEM"."SYS_EXPORT_TRANSPORTABLE_01" successfully completed at Tue Dec 24 18:31:58 2019 elapsed 0 00:03:31# 元数据
$ ll /opt/oracle/admin/ORCLCDB/dpdump/974B2FC950D006CEE0530100007FB806/trans.dmp
-rw-r-----. 1 oracle oinstall 180224 Dec 24 18:31 /opt/oracle/admin/ORCLCDB/dpdump/974B2FC950D006CEE0530100007FB806/trans.dmp# 数据
$ ll /opt/oracle/oradata/ORCLCDB/ORCLPDB1/trans.dbf
-rw-r-----. 1 oracle oinstall 10493952 Dec 24 18:24 /opt/oracle/oradata/ORCLCDB/ORCLPDB1/trans.dbf
以上导出使用system用户是为了避免转义,也可以用下面的命令:
$ expdp \"sys/Welcome1@orclpdb1 as sysdba\" dumpfile=trans_sys.dmp transport_tablespaces=trans
删除表空间,但保留数据文件:
drop tablespace trans including contents;
为使模拟更真实,将数据文件重命名并移动位置:
$ mv /opt/oracle/oradata/ORCLCDB/ORCLPDB1/trans.dbf /tmp/ts_trans.dbf
导入:
$ impdp system/Welcome1@orclpdb1 directory=data_pump_dir dumpfile=trans.dmp transport_datafiles='/tmp/ts_trans.dbf';Import: Release 19.0.0.0.0 - Production on Tue Dec 24 18:47:25 2019
Version 19.3.0.0.0Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved.Connected to: Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Master table "SYSTEM"."SYS_IMPORT_TRANSPORTABLE_01" successfully loaded/unloaded
Starting "SYSTEM"."SYS_IMPORT_TRANSPORTABLE_01": system/********@orclpdb1 directory=data_pump_dir dumpfile=trans.dmp transport_datafiles=/tmp/ts_trans.dbf
Processing object type TRANSPORTABLE_EXPORT/PLUGTS_BLK
Processing object type TRANSPORTABLE_EXPORT/TABLE
Processing object type TRANSPORTABLE_EXPORT/STATISTICS/TABLE_STATISTICS
Processing object type TRANSPORTABLE_EXPORT/POST_INSTANCE/PLUGTS_BLK
Job "SYSTEM"."SYS_IMPORT_TRANSPORTABLE_01" successfully completed at Tue Dec 24 18:47:39 2019 elapsed 0 00:00:11
将表空间置为读写并验证:
SQL> select tablespace_name, status from dba_tablespaces;TABLESPACE_NAME STATUS
------------------------------ ---------
SYSTEM ONLINE
SYSAUX ONLINE
UNDOTBS1 ONLINE
TEMP ONLINE
USERS ONLINE
DBFS_TS ONLINE
OBE_TBS1 ONLINE
OBE_TBS2 ONLINE
TRANS READ ONLY9 rows selected.SQL> alter tablespace trans read write;Tablespace altered.SQL> select count(*) from transtab;COUNT(*)
----------49
SQL> drop tablespace trans including contents and datafiles;Tablespace dropped.
传输数据库
传输数据库和传输表空间类似,区别在于事先并没有目标数据库。大致过程为:
- 只读方式打开源数据库(之前必须正常关闭)
- 拷贝数据文件
- RMAN将数据文件转为目标平台格式,可以在源或目标端进行
- 在目标端启动新数据库实例
- 为实例生成控制文件
- RESETLOGS方式打开目标数据库
以上步骤3-5可通过RMAN CONVERT命令实现。
生成数据库传输脚本示例:
-- 将源数据库置为只读
shutdown immediate;
startup mount;
alter database open read only;
生成转换脚本:
$ rlwrap rman target / catalog rcat_owner/Welcome1@rcatRecovery Manager: Release 19.0.0.0.0 - Production on Tue Dec 24 19:47:36 2019
Version 19.3.0.0.0Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved.connected to target database: ORCLCDB (DBID=2795391422)
connected to recovery catalog databaseRMAN> convert database on target platform convert script 'cnvt_linuxdb.sql' transport script 'crdb_linuxdb.sql' new database 'linuxdb' to platform 'Linux x86 64-bit' format '/tmp/%U';Starting conversion at source at 24-DEC-19
starting full resync of recovery catalog
full resync complete
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=33 device type=DISK
allocated channel: ORA_DISK_2
channel ORA_DISK_2: SID=266 device type=DISK
allocated channel: ORA_DISK_3
channel ORA_DISK_3: SID=34 device type=DISK
allocated channel: ORA_DISK_4
channel ORA_DISK_4: SID=267 device type=DISKExternal table SYS.OPATCH_XML_INV found in the databaseDirectory SYS.SDO_DIR_WORK found in the database
Directory SYS.SDO_DIR_ADMIN found in the database
Directory SYS.XMLDIR found in the database
Directory SYS.XSDDIR found in the database
Directory SYS.OPATCH_INST_DIR found in the database
Directory SYS.ORACLE_OCM_CONFIG_DIR2 found in the database
Directory SYS.ORACLE_BASE found in the database
Directory SYS.ORACLE_HOME found in the database
Directory SYS.ORACLE_OCM_CONFIG_DIR found in the database
Directory SYS.DATA_PUMP_DIR found in the database
Directory SYS.OPATCH_SCRIPT_DIR found in the database
Directory SYS.OPATCH_LOG_DIR found in the database
Directory SYS.JAVA$JOX$CUJS$DIRECTORY$ found in the databaseUser SYS with SYSDBA and SYSOPER privilege found in password file
channel ORA_DISK_1: starting to check datafiles
input datafile file number=00004 name=/opt/oracle/oradata/ORCLCDB/undotbs01.dbf
channel ORA_DISK_1: datafile checking complete, elapsed time: 00:00:00
channel ORA_DISK_1: starting to check datafiles
input datafile file number=00006 name=/opt/oracle/oradata/ORCLCDB/pdbseed/sysaux01.dbf
channel ORA_DISK_1: datafile checking complete, elapsed time: 00:00:00
channel ORA_DISK_1: starting to check datafiles
input datafile file number=00009 name=/opt/oracle/oradata/ORCLCDB/ORCLPDB1/system01.dbf
channel ORA_DISK_1: datafile checking complete, elapsed time: 00:00:00
channel ORA_DISK_1: starting to check datafiles
input datafile file number=00005 name=/opt/oracle/oradata/ORCLCDB/pdbseed/system01.dbf
channel ORA_DISK_1: datafile checking complete, elapsed time: 00:00:00
channel ORA_DISK_1: starting to check datafiles
input datafile file number=00012 name=/opt/oracle/oradata/ORCLCDB/ORCLPDB1/users01.dbf
channel ORA_DISK_1: datafile checking complete, elapsed time: 00:00:00
channel ORA_DISK_1: starting to check datafiles
input datafile file number=00014 name=/opt/oracle/product/19c/dbhome_1/dbs/obe_tbs1.dbf
channel ORA_DISK_1: datafile checking complete, elapsed time: 00:00:00
channel ORA_DISK_1: starting to check datafiles
input datafile file number=00015 name=/opt/oracle/product/19c/dbhome_1/dbs/obe_tbs2.dbf
channel ORA_DISK_1: datafile checking complete, elapsed time: 00:00:00
channel ORA_DISK_1: starting to check datafiles
input datafile file number=00008 name=/opt/oracle/oradata/ORCLCDB/pdbseed/undotbs01.dbf
channel ORA_DISK_1: datafile checking complete, elapsed time: 00:00:00
channel ORA_DISK_1: starting to check datafiles
input datafile file number=00011 name=/opt/oracle/oradata/ORCLCDB/ORCLPDB1/undotbs01.dbf
channel ORA_DISK_1: datafile checking complete, elapsed time: 00:00:00
channel ORA_DISK_1: starting to check datafiles
input datafile file number=00007 name=/opt/oracle/oradata/ORCLCDB/users01.dbf
channel ORA_DISK_1: datafile checking complete, elapsed time: 00:00:00
channel ORA_DISK_1: starting to check datafiles
input datafile file number=00013 name=/u01/app/oracle/oradata/DB11G/dbfs01.dbf
channel ORA_DISK_1: datafile checking complete, elapsed time: 00:00:00
channel ORA_DISK_2: starting to check datafiles
input datafile file number=00001 name=/opt/oracle/oradata/ORCLCDB/system01.dbf
channel ORA_DISK_2: datafile checking complete, elapsed time: 00:00:00
channel ORA_DISK_3: starting to check datafiles
input datafile file number=00003 name=/opt/oracle/oradata/ORCLCDB/sysaux01.dbf
channel ORA_DISK_3: datafile checking complete, elapsed time: 00:00:00
channel ORA_DISK_4: starting to check datafiles
input datafile file number=00010 name=/opt/oracle/oradata/ORCLCDB/ORCLPDB1/sysaux01.dbf
channel ORA_DISK_4: datafile checking complete, elapsed time: 00:00:00
Edit init.ora file /tmp/init_00uk8ijq_1_0.ora. This PFILE will be used to create the database on the target platform
Run RMAN script /tmp/cnvt_linuxdb.sql on target platform to convert datafiles
Run SQL script /tmp/crdb_linuxdb.sql on the target platform to create database
To recompile all PL/SQL modules, run utlirp.sql and utlrp.sql on the target platform
To change the internal database identifier, use DBNEWID Utility
Finished conversion at source at 24-DEC-19
查看脚本:
$ cat /tmp/cnvt_linuxdb.sql
STARTUP NOMOUNT PFILE = '/tmp/init_00uk8ijq_1_0.ora';
RUN {CONVERTFROM PLATFORM 'Linux x86 64-bit'PARALLELISM 1
DATAFILE '/opt/oracle/oradata/ORCLCDB/undotbs01.dbf' FORMAT '/tmp/data_D-ORCLCDB_I-2795391422_TS-UNDOTBS1_FNO-4_35uk8ijq'
DATAFILE '/opt/oracle/oradata/ORCLCDB/pdbseed/sysaux01.dbf' FORMAT '/tmp/data_D-ORCLCDB_I-2795391422_TS-SYSAUX_FNO-6_36uk8ijq'
DATAFILE '/opt/oracle/oradata/ORCLCDB/ORCLPDB1/system01.dbf' FORMAT '/tmp/data_D-ORCLCDB_I-2795391422_TS-SYSTEM_FNO-9_37uk8ijq'
DATAFILE '/opt/oracle/oradata/ORCLCDB/pdbseed/system01.dbf' FORMAT '/tmp/data_D-ORCLCDB_I-2795391422_TS-SYSTEM_FNO-5_38uk8ijq'
DATAFILE '/opt/oracle/oradata/ORCLCDB/ORCLPDB1/users01.dbf' FORMAT '/tmp/data_D-ORCLCDB_I-2795391422_TS-USERS_FNO-12_39uk8ijq'
DATAFILE '/opt/oracle/product/19c/dbhome_1/dbs/obe_tbs1.dbf' FORMAT '/tmp/data_D-ORCLCDB_I-2795391422_TS-OBE_TBS1_FNO-14_3auk8ijr'
DATAFILE '/opt/oracle/product/19c/dbhome_1/dbs/obe_tbs2.dbf' FORMAT '/tmp/data_D-ORCLCDB_I-2795391422_TS-OBE_TBS2_FNO-15_3buk8ijr'
DATAFILE '/opt/oracle/oradata/ORCLCDB/pdbseed/undotbs01.dbf' FORMAT '/tmp/data_D-ORCLCDB_I-2795391422_TS-UNDOTBS1_FNO-8_3cuk8ijr'
DATAFILE '/opt/oracle/oradata/ORCLCDB/ORCLPDB1/undotbs01.dbf' FORMAT '/tmp/data_D-ORCLCDB_I-2795391422_TS-UNDOTBS1_FNO-11_3duk8ijr'
DATAFILE '/opt/oracle/oradata/ORCLCDB/users01.dbf' FORMAT '/tmp/data_D-ORCLCDB_I-2795391422_TS-USERS_FNO-7_3euk8ijr'
DATAFILE '/u01/app/oracle/oradata/DB11G/dbfs01.dbf' FORMAT '/tmp/data_D-ORCLCDB_I-2795391422_TS-DBFS_TS_FNO-13_3fuk8ijr'
DATAFILE '/opt/oracle/oradata/ORCLCDB/system01.dbf' FORMAT '/tmp/data_D-ORCLCDB_I-2795391422_TS-SYSTEM_FNO-1_3guk8ijr'
DATAFILE '/opt/oracle/oradata/ORCLCDB/sysaux01.dbf' FORMAT '/tmp/data_D-ORCLCDB_I-2795391422_TS-SYSAUX_FNO-3_3huk8ijr'
DATAFILE '/opt/oracle/oradata/ORCLCDB/ORCLPDB1/sysaux01.dbf' FORMAT '/tmp/data_D-ORCLCDB_I-2795391422_TS-SYSAUX_FNO-10_3iuk8ijr'
; }$ cat /tmp/crdb_linuxdb.sql
-- The following commands will create a new control file and use it
-- to open the database.
-- Data used by Recovery Manager will be lost.
-- The contents of online logs will be lost and all backups will
-- be invalidated. Use this only if online logs are damaged.-- After mounting the created controlfile, the following SQL
-- statement will place the database in the appropriate
-- protection mode:
-- ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE PERFORMANCESTARTUP NOMOUNT PFILE='/tmp/init_00uk8ijq_1_0.ora'
CREATE CONTROLFILE REUSE SET DATABASE "LINUXDB" RESETLOGS ARCHIVELOGMAXLOGFILES 16MAXLOGMEMBERS 3MAXDATAFILES 1024MAXINSTANCES 8MAXLOGHISTORY 292
LOGFILEGROUP 1 ('/tmp/arch_D-LINUXDB_id-2795391422_S-25_T-1_A-2797767741_03uk8ijq','/tmp/arch_D-LINUXDB_id-2795391422_S-25_T-1_A-2797767741_04uk8ijq') SIZE 200M BLOCKSIZE 512,GROUP 2 ('/tmp/arch_D-LINUXDB_id-2795391422_S-26_T-1_A-2797767741_05uk8ijq','/tmp/arch_D-LINUXDB_id-2795391422_S-26_T-1_A-2797767741_06uk8ijq') SIZE 200M BLOCKSIZE 512,GROUP 3 ('/tmp/arch_D-LINUXDB_id-2795391422_S-24_T-1_A-2797767741_07uk8ijq','/tmp/arch_D-LINUXDB_id-2795391422_S-24_T-1_A-2797767741_08uk8ijq') SIZE 200M BLOCKSIZE 512
DATAFILE'/tmp/data_D-ORCLCDB_I-2795391422_TS-SYSTEM_FNO-1_3guk8ijr','/tmp/data_D-ORCLCDB_I-2795391422_TS-SYSAUX_FNO-3_3huk8ijr','/tmp/data_D-ORCLCDB_I-2795391422_TS-UNDOTBS1_FNO-4_35uk8ijq','/tmp/data_D-ORCLCDB_I-2795391422_TS-SYSTEM_FNO-5_38uk8ijq','/tmp/data_D-ORCLCDB_I-2795391422_TS-SYSAUX_FNO-6_36uk8ijq','/tmp/data_D-ORCLCDB_I-2795391422_TS-USERS_FNO-7_3euk8ijr','/tmp/data_D-ORCLCDB_I-2795391422_TS-UNDOTBS1_FNO-8_3cuk8ijr','/tmp/data_D-ORCLCDB_I-2795391422_TS-SYSTEM_FNO-9_37uk8ijq','/tmp/data_D-ORCLCDB_I-2795391422_TS-SYSAUX_FNO-10_3iuk8ijr','/tmp/data_D-ORCLCDB_I-2795391422_TS-UNDOTBS1_FNO-11_3duk8ijr','/tmp/data_D-ORCLCDB_I-2795391422_TS-USERS_FNO-12_39uk8ijq','/tmp/data_D-ORCLCDB_I-2795391422_TS-DBFS_TS_FNO-13_3fuk8ijr','/tmp/data_D-ORCLCDB_I-2795391422_TS-OBE_TBS1_FNO-14_3auk8ijr','/tmp/data_D-ORCLCDB_I-2795391422_TS-OBE_TBS2_FNO-15_3buk8ijr'
CHARACTER SET AL32UTF8
;-- Set Database Guard and/or Supplemental Logging
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS;
-- Database can now be opened zeroing the online logs.
ALTER DATABASE OPEN RESETLOGS UPGRADE;-- Open all the PDBs.
ALTER PLUGGABLE DATABASE ALL OPEN;-- Commands to add tempfiles to temporary tablespaces.
-- Online tempfiles have complete space information.
-- Other tempfiles may require adjustment.
ALTER TABLESPACE TEMP ADD TEMPFILE '/tmp/data_D-LINUXDB_I-2795391422_TS-TEMP_FNO-1_09uk8ijq'SIZE 139460608 AUTOEXTEND ON NEXT 655360 MAXSIZE 32767M;
ALTER SESSION SET CONTAINER = "PDB$SEED";
ALTER TABLESPACE TEMP ADD TEMPFILE '/tmp/data_D-LINUXDB_I-2795391422_TS-TEMP_FNO-2_0auk8ijq'SIZE 37748736 AUTOEXTEND ON NEXT 655360 MAXSIZE 32767M;
ALTER SESSION SET CONTAINER = "ORCLPDB1";
ALTER TABLESPACE TEMP ADD TEMPFILE '/tmp/data_D-LINUXDB_I-2795391422_TS-TEMP_FNO-3_0buk8ijq' REUSE;
ALTER SESSION SET CONTAINER = "CDB$ROOT";
-- End of tempfile additions.
--set echo off
prompt ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
prompt * Your database has been created successfully!
prompt * There are many things to think about for the new database. Here
prompt * is a checklist to help you stay on track:
prompt * 1. You may want to redefine the location of the directory objects.
prompt * 2. You may want to change the internal database identifier (DBID)
prompt * or the global database name for this database. Use the
prompt * NEWDBID Utility (nid).
prompt ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~SHUTDOWN IMMEDIATE
STARTUP UPGRADE PFILE='/tmp/init_00uk8ijq_1_0.ora'
@@ ?/rdbms/admin/utlirp.sql
SHUTDOWN IMMEDIATE
STARTUP PFILE='/tmp/init_00uk8ijq_1_0.ora'
-- The following step will recompile all PL/SQL modules.
-- It may take serveral hours to complete.
@@ ?/rdbms/admin/utlrp.sql
set feedback 6;$ cat /tmp/init_00uk8ijq_1_0.ora
# Please change the values of the following parameters:control_files = "/tmp/cf_D-LINUXDB_id-2795391422_01uk8ijq"db_recovery_file_dest = "/tmp/fra"db_recovery_file_dest_size= 5368709120local_listener = "LINUXDBLISTENER_ORCLCDB"audit_file_dest = "/tmp/adump"db_name = "LINUXDB"# Please review the values of the following parameters:# __oracle_base = "/opt/oracle"__shared_pool_size = 503316480__large_pool_size = 16777216__java_pool_size = 0__streams_pool_size = 33554432__unified_pga_pool_size = 0__sga_target = 1207959552__db_cache_size = 570425344__shared_io_pool_size = 67108864__data_transfer_cache_size= 0__inmemory_ext_rwarea = 0__inmemory_ext_roarea = 0remote_login_passwordfile= "EXCLUSIVE"dispatchers = "(PROTOCOL=TCP) (SERVICE=ORCLCDBXDB)"__pga_aggregate_target = 402653184# The values of the following parameters are from source database:processes = 300nls_language = "AMERICAN"nls_territory = "AMERICA"filesystemio_options = "setall"sga_target = 1207959552control_file_record_keep_time= 30db_block_size = 8192compatible = "19.0.0"undo_tablespace = "UNDOTBS1"audit_sys_operations = FALSEcommit_wait = "nowait"commit_logging = "batch"audit_trail = "NONE"open_cursors = 300pga_aggregate_target = 402653184# diagnostic_dest = "/opt/oracle"enable_pluggable_database= TRUE
缺个实验。
复制数据库
根据目标数据库的OS和字节序,可有多种方法复制数据库。可以依赖数据库备份或在线复制。recovery catalog虽不是必需,但可简化过程。术语上,源数据库称为target,复制数据库称为auxiliary。
使用复制数据库
复制数据库可用于测试备份和恢复,测试数据库升级,应用升级,生成报表。导出在源端不小心删除的表并倒回源数据库。
从活动的数据库复制
不需要备份,RMAN必须连接到target和auxiliary数据库。有push和pull两种方法。
push依赖于image copy,pull方法生成backupset。
通常,push方法需要目标端更多的资源,传输的数据更多。
大致过程如下:
- 为auxiliary实例生成口令文件
- 为auxiliary实例生成初始化参数文件
- NOMOUNT模式启动auxiliary实例
- 配置target和auxiliary之间的网络连接
- 运行RMAN DUPLICATE命令
配置Auxiliary实例
Auxiliary实例参数文件通常需要的参数包括:
- DB_NAME
- CONTROL_FILES
- DB_BLOCK_SIZE
- DB_FILE_NAME_CONVERT
- LOG_FILE_NAME_CONVERT
- DB_CREATE_%_DEST
- DB_RECOVERY_FILE_DEST
建立网络连接
target数据库通常已有监听。auxiliary需要单独的监听。两个数据库都需要TNS解析。
运行RMAN DUPLICATE命令
连接命令示例:
rman target sys/Welcome1@ORCL auxiliary sys/Welcome1@dupdb catalog rman/rman@rcat;
rman target / auxiliary sys/Welcome1@dupdb
复制命令示例:
duplicate target database to dupdb from active database;
以上命令依赖于满足以下条件之一:
- 使用OMF(Oracle Managed File)
- 设置了*_FILE_NAME_CONVERT参数
- 源和目标的目录结构相同
DUPLICATE命令包含的操作为:
- 创建controlfile
- 将数据文件从运行的target数据库拷贝到auxiliary实例
- 使用target数据库的online redo恢复auxiliary数据库
- RESETLOGS 模式打开auxiliary数据库
- 为auxiliary数据库生成新的DBID
具体还有一些选项,如跳过只读表空间,跳过指定表空间等
使用Backupsets在线复制
是pull方法。命令略。
从备份恢复
也就是不依赖于在线数据库。所有的数据文件和归档必须对auxiliary实例可见。
示例,假设源数据库为ORCLCDB,目标数据库为dupdb,源和目标数据库位于同一服务器:
# 口令文件
$ cp $ORACLE_HOME/dbs/orapwORCLCDB $ORACLE_HOME/dbs/orapwdupdb
# 初始化参数文件,多租户数据库必须将enable_pluggable_database设为true
cat <<-EOF > $ORACLE_HOME/dbs/initdupdb.ora
db_name=dupdb
enable_pluggable_database=true
db_file_name_convert='orclcdb', 'dupdb', 'ORCLCDB', 'DUPDB', 'db11g', 'dupdb', 'DB11G', 'DUPDB', 'dbs', 'db11g', 'DBS', 'DUPDB'
log_file_name_convert='orclcdb', 'dupdb', 'ORCLCDB', 'DUPDB', 'db11g', 'dupdb', 'DB11G', 'DUPDB', 'dbs', 'db11g', 'DBS', 'DUPDB'
EOF
启动auxiliary实例:
export ORACLE_SID=dupdb
sqlplus / as sysdba
create spfile from pfile;
startup nomount
将以下添加到listener.ora:
sid_list_listener=
(sid_list=(sid_desc=(sid_name=ORCLCDB))(sid_desc=(sid_name=dupdb))
)
将以下添加到tnsnames.ora:
ORCLCDB =(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 1521))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = ORCLCDB)))dupdb =(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 1521))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = dupdb)))
测试两个数据库的连通性:
tnsping ORCLCDB
tnsping dupdb
通过RMAN连接到target和auxiliary数据库:
$ rman target sys/Welcome1@ORCLCDB auxiliary sys/Welcome1@dupdb catalog rcat_owner/Welcome1@rcatRecovery Manager: Release 19.0.0.0.0 - Production on Tue Dec 24 21:21:32 2019
Version 19.3.0.0.0Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved.connected to target database: ORCLCDB (DBID=2795391422)
connected to recovery catalog database
connected to auxiliary database: DUPDB (not mounted)
复制数据库,21:51开始,57结束:
$ rman target sys/Welcome1@ORCLCDB auxiliary sys/Welcome1@dupdb catalog rcat_owner/Welcome1@rcatRecovery Manager: Release 19.0.0.0.0 - Production on Tue Dec 24 21:51:20 2019
Version 19.3.0.0.0Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved.connected to target database: ORCLCDB (DBID=2795391422)
connected to recovery catalog database
connected to auxiliary database: DUPDB (not mounted)RMAN> duplicate target database to dupdb from active database;Starting Duplicate Db at 24-DEC-19
allocated channel: ORA_AUX_DISK_1
channel ORA_AUX_DISK_1: SID=21 device type=DISK
allocated channel: ORA_AUX_DISK_2
channel ORA_AUX_DISK_2: SID=181 device type=DISK
allocated channel: ORA_AUX_DISK_3
channel ORA_AUX_DISK_3: SID=22 device type=DISK
allocated channel: ORA_AUX_DISK_4
channel ORA_AUX_DISK_4: SID=182 device type=DISK
current log archivedcontents of Memory Script:
{sql clone "alter system set db_name =''ORCLCDB'' comment=''Modified by RMAN duplicate'' scope=spfile";sql clone "alter system set db_unique_name =''dupdb'' comment=''Modified by RMAN duplicate'' scope=spfile";shutdown clone immediate;startup clone force nomountrestore clone from service 'ORCLCDB' primary controlfile;alter clone database mount;
}
executing Memory Scriptsql statement: alter system set db_name = ''ORCLCDB'' comment= ''Modified by RMAN duplicate'' scope=spfilesql statement: alter system set db_unique_name = ''dupdb'' comment= ''Modified by RMAN duplicate'' scope=spfileOracle instance shut downOracle instance startedTotal System Global Area 318767000 bytesFixed Size 9133976 bytes
Variable Size 251658240 bytes
Database Buffers 50331648 bytes
Redo Buffers 7643136 bytesStarting restore at 24-DEC-19
allocated channel: ORA_AUX_DISK_1
channel ORA_AUX_DISK_1: SID=178 device type=DISK
allocated channel: ORA_AUX_DISK_2
channel ORA_AUX_DISK_2: SID=20 device type=DISK
allocated channel: ORA_AUX_DISK_3
channel ORA_AUX_DISK_3: SID=179 device type=DISK
allocated channel: ORA_AUX_DISK_4
channel ORA_AUX_DISK_4: SID=21 device type=DISKchannel ORA_AUX_DISK_1: starting datafile backup set restore
channel ORA_AUX_DISK_1: using network backup set from service ORCLCDB
channel ORA_AUX_DISK_1: restoring control file
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:01
output file name=/opt/oracle/product/19c/dbhome_1/dbs/cntrldupdb.dbf
Finished restore at 24-DEC-19database mountedcontents of Memory Script:
{sql clone 'alter database flashback off';set newname for datafile 1 to"/opt/oracle/oradata/DUPDB/system01.dbf";set newname for datafile 3 to"/opt/oracle/oradata/DUPDB/sysaux01.dbf";set newname for datafile 4 to"/opt/oracle/oradata/DUPDB/undotbs01.dbf";set newname for datafile 5 to"/opt/oracle/oradata/DUPDB/pdbseed/system01.dbf";set newname for datafile 6 to"/opt/oracle/oradata/DUPDB/pdbseed/sysaux01.dbf";set newname for datafile 7 to"/opt/oracle/oradata/DUPDB/users01.dbf";set newname for datafile 8 to"/opt/oracle/oradata/DUPDB/pdbseed/undotbs01.dbf";set newname for datafile 9 to"/opt/oracle/oradata/DUPDB/ORCLPDB1/system01.dbf";set newname for datafile 10 to"/opt/oracle/oradata/DUPDB/ORCLPDB1/sysaux01.dbf";set newname for datafile 11 to"/opt/oracle/oradata/DUPDB/ORCLPDB1/undotbs01.dbf";set newname for datafile 12 to"/opt/oracle/oradata/DUPDB/ORCLPDB1/users01.dbf";set newname for datafile 13 to"/u01/app/oracle/oradata/DUPDB/dbfs01.dbf";set newname for datafile 14 to"/opt/oracle/product/19c/dbhome_1/db11g/obe_tbs1.dbf";set newname for datafile 15 to"/opt/oracle/product/19c/dbhome_1/db11g/obe_tbs2.dbf";restorefrom nonsparse from service'ORCLCDB' clone database;sql 'alter system archive log current';
}
executing Memory Scriptsql statement: alter database flashback offexecuting command: SET NEWNAMEexecuting command: SET NEWNAMEexecuting command: SET NEWNAMEexecuting command: SET NEWNAMEexecuting command: SET NEWNAMEexecuting command: SET NEWNAMEexecuting command: SET NEWNAMEexecuting command: SET NEWNAMEexecuting command: SET NEWNAMEexecuting command: SET NEWNAMEexecuting command: SET NEWNAMEexecuting command: SET NEWNAMEexecuting command: SET NEWNAMEexecuting command: SET NEWNAMEStarting restore at 24-DEC-19
using channel ORA_AUX_DISK_1
using channel ORA_AUX_DISK_2
using channel ORA_AUX_DISK_3
using channel ORA_AUX_DISK_4channel ORA_AUX_DISK_1: starting datafile backup set restore
channel ORA_AUX_DISK_1: using network backup set from service ORCLCDB
channel ORA_AUX_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_AUX_DISK_1: restoring datafile 00001 to /opt/oracle/oradata/DUPDB/system01.dbf
channel ORA_AUX_DISK_2: starting datafile backup set restore
channel ORA_AUX_DISK_2: using network backup set from service ORCLCDB
channel ORA_AUX_DISK_2: specifying datafile(s) to restore from backup set
channel ORA_AUX_DISK_2: restoring datafile 00003 to /opt/oracle/oradata/DUPDB/sysaux01.dbf
channel ORA_AUX_DISK_3: starting datafile backup set restore
channel ORA_AUX_DISK_3: using network backup set from service ORCLCDB
channel ORA_AUX_DISK_3: specifying datafile(s) to restore from backup set
channel ORA_AUX_DISK_3: restoring datafile 00004 to /opt/oracle/oradata/DUPDB/undotbs01.dbf
channel ORA_AUX_DISK_4: starting datafile backup set restore
channel ORA_AUX_DISK_4: using network backup set from service ORCLCDB
channel ORA_AUX_DISK_4: specifying datafile(s) to restore from backup set
channel ORA_AUX_DISK_4: restoring datafile 00005 to /opt/oracle/oradata/DUPDB/pdbseed/system01.dbf
channel ORA_AUX_DISK_3: restore complete, elapsed time: 00:00:16
channel ORA_AUX_DISK_3: starting datafile backup set restore
channel ORA_AUX_DISK_3: using network backup set from service ORCLCDB
channel ORA_AUX_DISK_3: specifying datafile(s) to restore from backup set
channel ORA_AUX_DISK_3: restoring datafile 00006 to /opt/oracle/oradata/DUPDB/pdbseed/sysaux01.dbf
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:44
channel ORA_AUX_DISK_1: starting datafile backup set restore
channel ORA_AUX_DISK_1: using network backup set from service ORCLCDB
channel ORA_AUX_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_AUX_DISK_1: restoring datafile 00007 to /opt/oracle/oradata/DUPDB/users01.dbf
channel ORA_AUX_DISK_2: restore complete, elapsed time: 00:00:44
channel ORA_AUX_DISK_2: starting datafile backup set restore
channel ORA_AUX_DISK_2: using network backup set from service ORCLCDB
channel ORA_AUX_DISK_2: specifying datafile(s) to restore from backup set
channel ORA_AUX_DISK_2: restoring datafile 00008 to /opt/oracle/oradata/DUPDB/pdbseed/undotbs01.dbf
channel ORA_AUX_DISK_4: restore complete, elapsed time: 00:00:45
channel ORA_AUX_DISK_4: starting datafile backup set restore
channel ORA_AUX_DISK_4: using network backup set from service ORCLCDB
channel ORA_AUX_DISK_4: specifying datafile(s) to restore from backup set
channel ORA_AUX_DISK_4: restoring datafile 00009 to /opt/oracle/oradata/DUPDB/ORCLPDB1/system01.dbf
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:02
channel ORA_AUX_DISK_1: starting datafile backup set restore
channel ORA_AUX_DISK_1: using network backup set from service ORCLCDB
channel ORA_AUX_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_AUX_DISK_1: restoring datafile 00010 to /opt/oracle/oradata/DUPDB/ORCLPDB1/sysaux01.dbf
channel ORA_AUX_DISK_2: restore complete, elapsed time: 00:00:38
channel ORA_AUX_DISK_2: starting datafile backup set restore
channel ORA_AUX_DISK_2: using network backup set from service ORCLCDB
channel ORA_AUX_DISK_2: specifying datafile(s) to restore from backup set
channel ORA_AUX_DISK_2: restoring datafile 00011 to /opt/oracle/oradata/DUPDB/ORCLPDB1/undotbs01.dbf
channel ORA_AUX_DISK_3: restore complete, elapsed time: 00:01:06
channel ORA_AUX_DISK_3: starting datafile backup set restore
channel ORA_AUX_DISK_3: using network backup set from service ORCLCDB
channel ORA_AUX_DISK_3: specifying datafile(s) to restore from backup set
channel ORA_AUX_DISK_3: restoring datafile 00012 to /opt/oracle/oradata/DUPDB/ORCLPDB1/users01.dbf
channel ORA_AUX_DISK_4: restore complete, elapsed time: 00:00:39
channel ORA_AUX_DISK_4: starting datafile backup set restore
channel ORA_AUX_DISK_4: using network backup set from service ORCLCDB
channel ORA_AUX_DISK_4: specifying datafile(s) to restore from backup set
channel ORA_AUX_DISK_4: restoring datafile 00013 to /u01/app/oracle/oradata/DUPDB/dbfs01.dbf
channel ORA_AUX_DISK_2: restore complete, elapsed time: 00:00:10
channel ORA_AUX_DISK_2: starting datafile backup set restore
channel ORA_AUX_DISK_2: using network backup set from service ORCLCDB
channel ORA_AUX_DISK_2: specifying datafile(s) to restore from backup set
channel ORA_AUX_DISK_2: restoring datafile 00014 to /opt/oracle/product/19c/dbhome_1/db11g/obe_tbs1.dbf
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:01:10
channel ORA_AUX_DISK_1: starting datafile backup set restore
channel ORA_AUX_DISK_1: using network backup set from service ORCLCDB
channel ORA_AUX_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_AUX_DISK_1: restoring datafile 00015 to /opt/oracle/product/19c/dbhome_1/db11g/obe_tbs2.dbf
channel ORA_AUX_DISK_3: restore complete, elapsed time: 00:00:36
channel ORA_AUX_DISK_4: restore complete, elapsed time: 00:00:35
channel ORA_AUX_DISK_2: restore complete, elapsed time: 00:00:34
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:18
Finished restore at 24-DEC-19sql statement: alter system archive log current
current log archivedcontents of Memory Script:
{restore clone force from service 'ORCLCDB'archivelog from scn 6668433;switch clone datafile all;
}
executing Memory ScriptStarting restore at 24-DEC-19
using channel ORA_AUX_DISK_1
using channel ORA_AUX_DISK_2
using channel ORA_AUX_DISK_3
using channel ORA_AUX_DISK_4channel ORA_AUX_DISK_1: starting archived log restore to default destination
channel ORA_AUX_DISK_1: using network backup set from service ORCLCDB
channel ORA_AUX_DISK_1: restoring archived log
archived log thread=1 sequence=29
channel ORA_AUX_DISK_2: starting archived log restore to default destination
channel ORA_AUX_DISK_2: using network backup set from service ORCLCDB
channel ORA_AUX_DISK_2: restoring archived log
archived log thread=1 sequence=30
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:00
channel ORA_AUX_DISK_2: restore complete, elapsed time: 00:00:01
Finished restore at 24-DEC-19datafile 1 switched to datafile copy
input datafile copy RECID=30 STAMP=1027893282 file name=/opt/oracle/oradata/DUPDB/system01.dbf
datafile 3 switched to datafile copy
input datafile copy RECID=31 STAMP=1027893282 file name=/opt/oracle/oradata/DUPDB/sysaux01.dbf
datafile 4 switched to datafile copy
input datafile copy RECID=32 STAMP=1027893282 file name=/opt/oracle/oradata/DUPDB/undotbs01.dbf
datafile 5 switched to datafile copy
input datafile copy RECID=33 STAMP=1027893282 file name=/opt/oracle/oradata/DUPDB/pdbseed/system01.dbf
datafile 6 switched to datafile copy
input datafile copy RECID=34 STAMP=1027893282 file name=/opt/oracle/oradata/DUPDB/pdbseed/sysaux01.dbf
datafile 7 switched to datafile copy
input datafile copy RECID=35 STAMP=1027893282 file name=/opt/oracle/oradata/DUPDB/users01.dbf
datafile 8 switched to datafile copy
input datafile copy RECID=36 STAMP=1027893282 file name=/opt/oracle/oradata/DUPDB/pdbseed/undotbs01.dbf
datafile 9 switched to datafile copy
input datafile copy RECID=37 STAMP=1027893282 file name=/opt/oracle/oradata/DUPDB/ORCLPDB1/system01.dbf
datafile 10 switched to datafile copy
input datafile copy RECID=38 STAMP=1027893282 file name=/opt/oracle/oradata/DUPDB/ORCLPDB1/sysaux01.dbf
datafile 11 switched to datafile copy
input datafile copy RECID=39 STAMP=1027893282 file name=/opt/oracle/oradata/DUPDB/ORCLPDB1/undotbs01.dbf
datafile 12 switched to datafile copy
input datafile copy RECID=40 STAMP=1027893282 file name=/opt/oracle/oradata/DUPDB/ORCLPDB1/users01.dbf
datafile 13 switched to datafile copy
input datafile copy RECID=41 STAMP=1027893282 file name=/u01/app/oracle/oradata/DUPDB/dbfs01.dbf
datafile 14 switched to datafile copy
input datafile copy RECID=42 STAMP=1027893282 file name=/opt/oracle/product/19c/dbhome_1/db11g/obe_tbs1.dbf
datafile 15 switched to datafile copy
input datafile copy RECID=43 STAMP=1027893282 file name=/opt/oracle/product/19c/dbhome_1/db11g/obe_tbs2.dbfcontents of Memory Script:
{set until scn 6668750;recoverclone databasedelete archivelog;
}
executing Memory Scriptexecuting command: SET until clauseStarting recover at 24-DEC-19
using channel ORA_AUX_DISK_1
using channel ORA_AUX_DISK_2
using channel ORA_AUX_DISK_3
using channel ORA_AUX_DISK_4starting media recoveryarchived log for thread 1 with sequence 29 is already on disk as file /opt/oracle/product/19c/dbhome_1/dbs/arch1_29_1026687481.dbf
archived log for thread 1 with sequence 30 is already on disk as file /opt/oracle/product/19c/dbhome_1/dbs/arch1_30_1026687481.dbf
archived log file name=/opt/oracle/product/19c/dbhome_1/dbs/arch1_29_1026687481.dbf thread=1 sequence=29
archived log file name=/opt/oracle/product/19c/dbhome_1/dbs/arch1_30_1026687481.dbf thread=1 sequence=30
media recovery complete, elapsed time: 00:00:00
Finished recover at 24-DEC-19contents of Memory Script:
{delete clone force archivelog all;
}
executing Memory Scriptreleased channel: ORA_AUX_DISK_1
released channel: ORA_AUX_DISK_2
released channel: ORA_AUX_DISK_3
released channel: ORA_AUX_DISK_4
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=270 device type=DISK
allocated channel: ORA_DISK_2
channel ORA_DISK_2: SID=48 device type=DISK
allocated channel: ORA_DISK_3
channel ORA_DISK_3: SID=46 device type=DISK
allocated channel: ORA_DISK_4
channel ORA_DISK_4: SID=272 device type=DISK
deleted archived log
archived log file name=/opt/oracle/product/19c/dbhome_1/dbs/arch1_29_1026687481.dbf RECID=1 STAMP=1027893281
deleted archived log
archived log file name=/opt/oracle/product/19c/dbhome_1/dbs/arch1_30_1026687481.dbf RECID=2 STAMP=1027893281
Deleted 2 objectsOracle instance startedTotal System Global Area 318767000 bytesFixed Size 9133976 bytes
Variable Size 251658240 bytes
Database Buffers 50331648 bytes
Redo Buffers 7643136 bytescontents of Memory Script:
{sql clone "alter system set db_name =''DUPDB'' comment=''Reset to original value by RMAN'' scope=spfile";sql clone "alter system reset db_unique_name scope=spfile";
}
executing Memory Scriptsql statement: alter system set db_name = ''DUPDB'' comment= ''Reset to original value by RMAN'' scope=spfilesql statement: alter system reset db_unique_name scope=spfile
Oracle instance startedTotal System Global Area 318767000 bytesFixed Size 9133976 bytes
Variable Size 251658240 bytes
Database Buffers 50331648 bytes
Redo Buffers 7643136 bytes
sql statement: CREATE CONTROLFILE REUSE SET DATABASE "DUPDB" RESETLOGS ARCHIVELOGMAXLOGFILES 16MAXLOGMEMBERS 3MAXDATAFILES 1024MAXINSTANCES 8MAXLOGHISTORY 292LOGFILEGROUP 1 ( '/opt/oracle/oradata/DUPDB/redo01.log', '/opt/oracle/oradata/DUPDB/redo01_2.log' ) SIZE 200 M REUSE,GROUP 2 ( '/opt/oracle/oradata/DUPDB/redo02_2.log', '/opt/oracle/oradata/DUPDB/redo02.log' ) SIZE 200 M REUSE,GROUP 3 ( '/opt/oracle/oradata/DUPDB/redo03_2.log', '/opt/oracle/oradata/DUPDB/redo03.log' ) SIZE 200 M REUSEDATAFILE'/opt/oracle/oradata/DUPDB/system01.dbf','/opt/oracle/oradata/DUPDB/pdbseed/system01.dbf','/opt/oracle/oradata/DUPDB/ORCLPDB1/system01.dbf'CHARACTER SET AL32UTF8contents of Memory Script:
{set newname for tempfile 1 to"/opt/oracle/oradata/DUPDB/temp01.dbf";set newname for tempfile 2 to"/opt/oracle/oradata/DUPDB/pdbseed/temp012019-11-14_16-12-14-765-PM.dbf";set newname for tempfile 3 to"/opt/oracle/oradata/DUPDB/ORCLPDB1/temp01.dbf";switch clone tempfile all;catalog clone datafilecopy "/opt/oracle/oradata/DUPDB/sysaux01.dbf","/opt/oracle/oradata/DUPDB/undotbs01.dbf","/opt/oracle/oradata/DUPDB/pdbseed/sysaux01.dbf","/opt/oracle/oradata/DUPDB/users01.dbf","/opt/oracle/oradata/DUPDB/pdbseed/undotbs01.dbf","/opt/oracle/oradata/DUPDB/ORCLPDB1/sysaux01.dbf","/opt/oracle/oradata/DUPDB/ORCLPDB1/undotbs01.dbf","/opt/oracle/oradata/DUPDB/ORCLPDB1/users01.dbf","/u01/app/oracle/oradata/DUPDB/dbfs01.dbf","/opt/oracle/product/19c/dbhome_1/db11g/obe_tbs1.dbf","/opt/oracle/product/19c/dbhome_1/db11g/obe_tbs2.dbf";switch clone datafile all;
}
executing Memory Scriptexecuting command: SET NEWNAMEexecuting command: SET NEWNAMEexecuting command: SET NEWNAMErenamed tempfile 1 to /opt/oracle/oradata/DUPDB/temp01.dbf in control file
renamed tempfile 2 to /opt/oracle/oradata/DUPDB/pdbseed/temp012019-11-14_16-12-14-765-PM.dbf in control file
renamed tempfile 3 to /opt/oracle/oradata/DUPDB/ORCLPDB1/temp01.dbf in control filecataloged datafile copy
datafile copy file name=/opt/oracle/oradata/DUPDB/sysaux01.dbf RECID=1 STAMP=1027893309
cataloged datafile copy
datafile copy file name=/opt/oracle/oradata/DUPDB/undotbs01.dbf RECID=2 STAMP=1027893309
cataloged datafile copy
datafile copy file name=/opt/oracle/oradata/DUPDB/pdbseed/sysaux01.dbf RECID=3 STAMP=1027893309
cataloged datafile copy
datafile copy file name=/opt/oracle/oradata/DUPDB/users01.dbf RECID=4 STAMP=1027893309
cataloged datafile copy
datafile copy file name=/opt/oracle/oradata/DUPDB/pdbseed/undotbs01.dbf RECID=5 STAMP=1027893309
cataloged datafile copy
datafile copy file name=/opt/oracle/oradata/DUPDB/ORCLPDB1/sysaux01.dbf RECID=6 STAMP=1027893309
cataloged datafile copy
datafile copy file name=/opt/oracle/oradata/DUPDB/ORCLPDB1/undotbs01.dbf RECID=7 STAMP=1027893309
cataloged datafile copy
datafile copy file name=/opt/oracle/oradata/DUPDB/ORCLPDB1/users01.dbf RECID=8 STAMP=1027893309
cataloged datafile copy
datafile copy file name=/u01/app/oracle/oradata/DUPDB/dbfs01.dbf RECID=9 STAMP=1027893309
cataloged datafile copy
datafile copy file name=/opt/oracle/product/19c/dbhome_1/db11g/obe_tbs1.dbf RECID=10 STAMP=1027893309
cataloged datafile copy
datafile copy file name=/opt/oracle/product/19c/dbhome_1/db11g/obe_tbs2.dbf RECID=11 STAMP=1027893309datafile 3 switched to datafile copy
input datafile copy RECID=1 STAMP=1027893309 file name=/opt/oracle/oradata/DUPDB/sysaux01.dbf
datafile 4 switched to datafile copy
input datafile copy RECID=2 STAMP=1027893309 file name=/opt/oracle/oradata/DUPDB/undotbs01.dbf
datafile 6 switched to datafile copy
input datafile copy RECID=3 STAMP=1027893309 file name=/opt/oracle/oradata/DUPDB/pdbseed/sysaux01.dbf
datafile 7 switched to datafile copy
input datafile copy RECID=4 STAMP=1027893309 file name=/opt/oracle/oradata/DUPDB/users01.dbf
datafile 8 switched to datafile copy
input datafile copy RECID=5 STAMP=1027893309 file name=/opt/oracle/oradata/DUPDB/pdbseed/undotbs01.dbf
datafile 10 switched to datafile copy
input datafile copy RECID=6 STAMP=1027893309 file name=/opt/oracle/oradata/DUPDB/ORCLPDB1/sysaux01.dbf
datafile 11 switched to datafile copy
input datafile copy RECID=7 STAMP=1027893309 file name=/opt/oracle/oradata/DUPDB/ORCLPDB1/undotbs01.dbf
datafile 12 switched to datafile copy
input datafile copy RECID=8 STAMP=1027893309 file name=/opt/oracle/oradata/DUPDB/ORCLPDB1/users01.dbf
datafile 13 switched to datafile copy
input datafile copy RECID=9 STAMP=1027893309 file name=/u01/app/oracle/oradata/DUPDB/dbfs01.dbf
datafile 14 switched to datafile copy
input datafile copy RECID=10 STAMP=1027893309 file name=/opt/oracle/product/19c/dbhome_1/db11g/obe_tbs1.dbf
datafile 15 switched to datafile copy
input datafile copy RECID=11 STAMP=1027893309 file name=/opt/oracle/product/19c/dbhome_1/db11g/obe_tbs2.dbf
Reenabling controlfile options for auxiliary database
Executing: alter database add supplemental log data
Executing: alter database add supplemental log data(PRIMARY KEY) columnscontents of Memory Script:
{Alter clone database open resetlogs;
}
executing Memory Scriptdatabase openedcontents of Memory Script:
{sql clone "alter pluggable database all open";
}
executing Memory Scriptsql statement: alter pluggable database all open
Finished Duplicate Db at 24-DEC-19
验证:
$ sqlplus / as sysdbaSQL*Plus: Release 19.0.0.0.0 - Production on Tue Dec 24 21:58:40 2019
Version 19.3.0.0.0Copyright (c) 1982, 2019, Oracle. All rights reserved.Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0SQL> show pdbs;CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------2 PDB$SEED READ ONLY NO3 ORCLPDB1 READ WRITE NO
SQL> select name from v$database;NAME
---------
DUPDB
复制的数据库不会出现在/etc/oratab中。
最后删除复制的数据库,需要在/etc/oratab中手工添加条目才可以删除成功,否则报数据库不存在:
$ dbca -silent -deleteDatabase -sourceDB dupdb -sysPassword Welcome1
平安夜成功完成此测试。
这篇关于OCA/OCP Oracle 数据库12c考试指南读书笔记:第27章: Duplicating a Database的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!