Using dbms_file_transfer
All steps in this procedure are run as the oracle user that is a member of the OSDBA group. OS authentication is used to connect to both the source and destination databases.
-
Initial Setup
1.1 创建 xtts 目录,解压 rman_xttconvert_v3.zip 软件包
mkdir -p /home/oracle/xtts/backup
mkdir -p /home/oracle/xtts/backup_incr
mkdir -p /home/oracle/xtts/scripts
cd /home/oracle/xtts
unzip rman_xttconvert_v3.zip1.2 配置 xtt.properties 参数
cat > xtt.properties << 'EOF'
tablespaces=TBS_COCO,ITPUX01,ITPUX02,ITPUX03
platformid=13
srcdir=SOURCEDIR
dstdir=DESTDIR
srclink=ttslink
# dfcopydir=/home/oracle/xtts/backup
backupformat=/home/oracle/xtts/backup_incr
stageondest=/home/oracle/xtts/backup
storageondest=+DATA/coco/pdb
backupondest=/home/oracle/xtts/backup_incr
asm_home=/u01/app/19.0.0/grid
asm_sid=+ASM
parallel=3
rollparallel=2
getfileparallel=4
EOF1.3 (可选)目标端配置临时实例用于增量备份恢复,目标端 11.2.0.4 及以上跳过此步骤
export ORACLE_SID=xtts
cat << EOF > $ORACLE_HOME/dbs/init$ORACLE_SID.ora
db_name=xtts
compatible=19.0.0
EOF
sqlplus / as sysdba
SQL> startup nomount1.4 目标端创建连接源端的 dblink
create public database link ttslink connect to system identified by oracle
using '(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.184.145 )(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = coco) ) )';1.5 创建数据库目录
-- 源端创建SOURCEDIR
create directory SOURCEDIR as '+DATA/coco';
grant all on directory SOURCEDIR to public;
-- 目标端创建DESTDIR
create directory DESTDIR as '+DATA/coco/pdb';
grant all on directory DESTDIR to public;1.6 源端和目标端设置临时目录
[oracle@source]$ export TMPDIR=/home/oracle/xtts/scripts
[oracle@dest]$ export TMPDIR=/home/oracle/xtts/scripts -
Prepare Phase for dbms_file_transfer Method
2.1 源端执行以下命令,创建 getfile.sql 和 xttnewdatafiles.txt 文件
$ORACLE_HOME/perl/bin/perl xttdriver.pl -S
2.2 拷贝 getfile.sql 和 xttnewdatafiles.txt 文件文件至目标端
scp $TMPDIR/getfile.sql oracle@dest:$TMPDIR
scp $TMPDIR/xttnewdatafiles.txt oracle@dest:$TMPDIR2.3 目标端进行数据文件拷贝
$ORACLE_HOME/perl/bin/perl xttdriver.pl -G
-
Roll Forward Phase
3.1 源端生成增量备份文件至
backupformat$ORACLE_HOME/perl/bin/perl xttdriver.pl -i
3.2 拷贝增量备份文件、xttplan、tsbkupmap 至目标端
stageondestscp `cat $TMPDIR/incrbackups.txt` oracle@dest:/home/oracle/xtts/backup
scp $TMPDIR/xttplan.txt oracle@des:$TMPDIR
scp $TMPDIR/tsbkupmap.txt oracle@dest:$TMPDIR3.3 目标端做增量前滚
$ORACLE_HOME/perl/bin/perl xttdriver.pl -r
3.4 源端确定下一个增量备份的 FROM_SCN
$ORACLE_HOME/perl/bin/perl xttdriver.pl -s
3.5 Repeat the Roll Forward Phase (Phase 3)
-
Transport Phase
4.1 源端将表空间置为只读模式
select 'ALTER TABLESPACE '||name||' READ ONLY;' exec_sql
from v$tablespace where NAME not in ('SYSTEM','SYSAUX','UNDOTBS1','TEMP','USERS');
select tablespace_name,status from dba_tablespaces;4.2 重复步骤 3.1 - 3.3,做最后一次增量前滚
[oracle@source]$ $ORACLE_HOME/perl/bin/perl xttdriver.pl -i
[oracle@source]$ scp `cat $TMPDIR/incrbackups.txt` oracle@dest:/home/oracle/xtts/backup
[oracle@source]$ scp $TMPDIR/xttplan.txt oracle@dest:$TMPDIR
[oracle@source]$ scp $TMPDIR/tsbkupmap.txt oracle@dest:$TMPDIR
[oracle@dest]$ $ORACLE_HOME/perl/bin/perl xttdriver.pl -r -
Import Object Metadata into Destination Database
5.1 目标端创建业务用户
CREATE USER "ITPUX01" IDENTIFIED BY VALUES 'S:98BB089CD1A16CBD4803C404C3279A570D607F667DD6E5EB7A19735B7FA6;358208C73FF2939C';
CREATE USER "COCO" IDENTIFIED BY VALUES 'S:37AB55E527FC21D62DEA2949499DD9D9F7EC2A5C97C9140A23ADEBB365BD;96B138098030A3C8';
CREATE USER "ITPUX02" IDENTIFIED BY VALUES 'S:21BC086145990A7CC133F01E0D80B7548EA49DB694F44E972CEC33685168;499779BC208401AE';
CREATE USER "ITPUX03" IDENTIFIED BY VALUES 'S:4C2C70077865FBFE627E08288E24FC9307DAF72DAC9C36EA9D31AE332263;CE4FDA4704D50F9C';
GRANT "DBA" TO "ITPUX01";
GRANT "DBA" TO "COCO";
GRANT "DBA" TO "ITPUX02";
GRANT "DBA" TO "ITPUX03";5.2 目标端生成 Data Pump TTS 命令
$ORACLE_HOME/perl/bin/perl xttdriver.pl -e
cat $TMPDIR/xttplugin.txt5.3 迁移表空间元数据
impdp system/oracle@pdb directory=DATA_PUMP_DIR logfile=tts_imp.log \
network_link=ttslink transport_full_check=no \
exclude=statistics \
transport_tablespaces=TBS_COCO,ITPUX01,ITPUX02,ITPUX03 \
transport_datafiles='+DATA/coco/pdb/tbs_coco01.dbf','+DATA/coco/pdb/itpux01.dbf','+DATA/coco/pdb/itpux02.dbf','+DATA/coco/pdb/itpux03.dbf'5.4 迁移存储过程、触发器、函数、包、视图、序列
impdp system/oracle@pdb directory=DATA_PUMP_DIR \
network_link=ttslink schemas=COCO,ITPUX01,ITPUX02,ITPUX03 content=metadata_only exclude=index,table parallel=85.5 导入同义词、dblink 和其他对象
-- 导入公共同义词
set long 9999
select dbms_metadata.get_ddl('SYNONYM',SYNONYM_NAME,OWNER)
FROM dba_synonyms where owner='PUBLIC' and table_owner in ('COCO','ITPUX01','ITPUX02','ITPUX03');
-- 导入dblink
set long 9999
select dbms_metadata.get_ddl('DB_LINK',DB_LINK,OWNER) FROM DBA_DB_LINKS; -
Post-migration
6.1 检查数据库一致性
select owner, object_type, count(*)
from dba_objects
where object_name not like 'BIN%'
and owner in ('COCO','ITPUX01','ITPUX02','ITPUX03')
group by owner, object_type
order by 1,2 desc;6.2 业务用户修改权限和默认表空间
ALTER USER "ITPUX01" DEFAULT TABLESPACE "ITPUX01" TEMPORARY TABLESPACE "TEMP";
ALTER USER "ITPUX02" DEFAULT TABLESPACE "ITPUX02" TEMPORARY TABLESPACE "TEMP";
ALTER USER "ITPUX03" EFAULT TABLESPACE "ITPUX03";
ALTER USER "COCO" DEFAULT TABLESPACE "TBS_COCO" TEMPORARY TABLESPACE "TEMP";
GRANT UNLIMITED TABLESPACE TO "ITPUX01";
GRANT UNLIMITED TABLESPACE TO "COCO";
GRANT UNLIMITED TABLESPACE TO "ITPUX02";
GRANT CREATE JOB TO "COCO";
GRANT UPDATE ON "COCO"."TESTTABLE" TO "ITPUX01";
GRANT SELECT ON "SYS"."DBA_USERS" TO "COCO";6.3 表空间置为读写模式
select 'ALTER TABLESPACE '||name||' READ WRITE;' exec_sql from v$tablespace
where NAME not in ('SYSTEM','SYSAUX','UNDOTBS1','TEMP','USERS');6.4 校验数据文件完整性
RMAN> validate tablespace COCO,ITPUX01,ITPUX02,ITPUX03 check logical;
6.5 收集统计信息
exec dbms_stats.gather_database_stats(degree => 8);
exec dbms_stats.gather_dictionary_stats(degree => 8);
exec dbms_stats.gather_fixed_objects_stats();





