如果源端是11.2.0.4及以上,目标是12以上多租户,那么xtts v4就满足。
如果目标不是多租户那么 xtts v3 就满足。
如果源端低于11.2.0.4,目标又是多租户,那么就需要手工方式。这里就写下手工方式。
如果源端是12c的可以使用rman中backup for transport,参考https://dbamarco.wordpress.com/2019/03/
源端和目标端迁移要遵循版本升级路线。
以下为11.2.0.3 AIX 到19 Linux 的步骤。
1.前期准备(重要)
1.1 字符集检查
select * from nls_database_parameters where parameter like '%CHARACTERSET%';
复制
1.2 时区检查
select dbtimezone from dual;
复制
1.3 db_files参数检查
show parameter db_files;
复制
1.4 rman配置检查
RMAN的default device type必须为DISK,并且不能有COMPRESSED属性
CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default
复制
1.5 平台检查
select PLATFORM_NAME,PLATFORM_ID from v$database;
复制
1.6 表空间datafile 检查
要迁移的表空间必须都处于READ WRITE状态,datafile都必须处于ONLINE状态
select tablespace_name,status from dba_tablespaces where status<>'ONLINE'; select file#,ts#,status from v$datafile where status not in('ONLINE','SYSTEM');
复制
1.7 识别迁移用户
要迁移的业务用户。如果一个用户的对象跨多个表空间这种,要么整合到一起,要么多个表空间迁移
1.8 将非系统对象移除system,sysaux 表空间
1.9 处理系统对象存在于业务表空间
1.10 表空间信息采集
select name from v$tablespace where name not in ('SYSTEM','SYSAUX','UNDOTBS1','UNDOTBS2','TEMP');
复制
1.11 temp表空间信息采集
select tablespace_name from dba_temp_files;
复制
1.12 修改BCT 加快增量备份
开启块改变跟踪,TRACE文件应位于共享存储上(RAC)
select * from v$BLOCK_CHANGE_TRACKING; ALTER DATABASE ENABLE BLOCK CHANGE TRACKING USING FILE '/XXX/bct.trace'; select * from v$BLOCK_CHANGE_TRACKING; alter system set "_bct_bitmaps_per_file"=100 sid='*';
复制
1.13 调整job参数 (目标端)
防止job调度任务,修改迁移后的数据。
alter system set job_queue_processes=0 sid='*';
复制
1.14 清理users表空间 (目标端)
users表空间要从源端迁移
CREATE TABLESPACE newuser DATAFILE '+data' SIZE 1g AUTOEXTEND ON; ALTER DATABASE DEFAULT TABLESPACE newuser; DROP TABLESPACE users INCLUDING CONTENTS AND DATAFILES;
复制
1.15 创建用户,并全部用户授予dba权限(避免导入元数据时因权限问题报错,后面回收dba权限)
SELECT name, password FROM sys.user$; create user xxxx identified by values xxx; grant dba to xxxxx;
复制
1.16 IOT表检查
select index_name,table_name from dba_indexes where compression='ENABLED'; select owner,table_name from dba_tables where iot_type is not null;
复制
如果存在key compression的索引组织表,目标端需要安装patch 14835322,否则索引组织表无法导入到目标端,需要手动重建,或者通过手工方式导入。
2.RMAN备份
2.1 查询开始的scn
SELECT TO_CHAR(MIN(start_scn) ) AS SCN FROM gv$transaction UNION ALL SELECT TO_CHAR(current_scn) FROM gv$database;
复制
2.2 backup copy
select 'backup as copy datafile ' ||file_id||' format ''/u01/xtts/xtts/datafile/' || tablespace_name||'_'||file_id||''';' from dba_data_files where tablespace_name not in ('SYSTEM','SYSAUX','UNDOTBS1','UNDOTBS2') ;
复制
可以分成多个rman脚本并行执行
建议最好命名规范,不建议使用自动命名,后面比较麻烦
2.3 rman convert
sql源端执行
set heanding off set linesize 2000 select 'convert from platform ''AIX-Based Systems (64-bit)'' datafile ''/mnt/dbbackup/xtts/xtts/datafile/' || tablespace_name||'_'||file_id||''''|| ' format ''+DATA/CDBxx/xxxxxx/DATAFILE/' || tablespace_name||'_'||file_id||'.dbf;' from dba_data_files where tablespace_name not in ('SYSTEM','SYSAUX','UNDOTBS1','UNDOTBS2');
复制
脚本目标端执行
2.4 记录scn
SELECT TO_CHAR(MIN(start_scn) ) AS "Please select the minimum SCN" FROM gv$transaction UNION ALL SELECT TO_CHAR(current_scn) FROM gv$database;
复制
2.5 备份增量备份
run{ allocate channel c1 device type disk; backup incremental from scn xxxx tablespace USERS,TS_DEERP,TS_DEERP_BLOB,TS_DEERP_INX filesperset 400 format '/u01/xtts/xtts/datafile_inc/incr_1'; release channel c1; }
复制
xxxx为rman copy时的 scn
可以按表空间分成多个脚本执行,如果没开bct 数据量大巨慢
2.6 增量convert
目标端执行
set timing on spool incr_conv1.log DECLARE handle varchar2(512); comment varchar2(80); media varchar2(80); concur boolean; recid number; stamp number; pltfrmfr number; devtype VARCHAR2(512); BEGIN sys.dbms_backup_restore.restoreCancel(TRUE); devtype := sys.dbms_backup_restore.deviceAllocate; sys.dbms_backup_restore.backupBackupPiece(bpname => '/mnt/dbbackup/xtts/xtts/datafile_inc/xxxx',fname => '/mnt/dbbackup/xtts/xtts/datafile_inc/xxx_con',handle => handle,media=> media,comment=> comment, concur=> concur,recid=> recid,stamp => stamp, check_logical => FALSE,copyno=> 1, deffmt=> 0, copy_recid=> 0,copy_stamp => 0,npieces=> 1,dest=> 0,pltfrmfr=>xxx); END; /
复制
xxxx为增量备份文件名称
pltfrmfr=>源端平台ID
2.7 应用convert后的增量备份
目标数据库需要在nomount状态下
set timing on set serveroutput on; spool apply_incr1.log DECLARE outhandle varchar2(512); outtag varchar2(30); done boolean; failover boolean; devtype VARCHAR2(512); BEGIN DBMS_OUTPUT.put_line('Entering RollForward'); -- Now the rolling forward. devtype := sys.dbms_backup_restore.deviceAllocate; sys.dbms_backup_restore.applySetDatafile(check_logical => FALSE, cleanup => FALSE); DBMS_OUTPUT.put_line('After applySetDataFile'); --USR_ARC_IDX,USR_ACC_TBS,EPMGIS_TB,WIPTBS --USR_ARC_IDX(106) sys.dbms_backup_restore.applyDatafileTo(dfnumber=>5,toname=>'+DATA/CDBxx/xxxx/DATAFILE/USERS_5.dbf',fuzziness_hint=>0,max_corrupt=>0,islevel0=>0,recid=>0,stamp=>0); sys.dbms_backup_restore.applyDatafileTo(dfnumber=>253,toname=>'+DATA/CDBxxx/xxxxx/DATAFILE/USERS_253.dbf',fuzziness_hint=>0,max_corrupt=>0,islevel0=>0,recid=>0,stamp=>0); ------------------------------------------------ DBMS_OUTPUT.put_line('Done: applyDataFileTo'); DBMS_OUTPUT.put_line('Done: applyDataFileTo'); -- Restore Set Piece sys.dbms_backup_restore.restoreSetPiece(handle => '/mnt/dbbackup/xtts/xtts/datafile_inc/xxxxx_con',tag => null, fromdisk => true, recid => 0, stamp => 0); DBMS_OUTPUT.put_line('Done: RestoreSetPiece'); -- Restore Backup Piece sys.dbms_backup_restore.restoreBackupPiece(done => done, params => null, outhandle => outhandle,outtag => outtag, failover => failover); DBMS_OUTPUT.put_line('Done: RestoreBackupPiece'); sys.dbms_backup_restore.restoreCancel(TRUE); sys.dbms_backup_restore.deviceDeallocate; END; /
复制
2.8 可多次重复4,5,6,7步
3.正式迁移
3.1 源端关闭监听,kill会话,禁用job
3.2 表空间只读
3.3 检查分布式事物,检查表空间只读
3.4 重复2.4,2.5,2.6,2.7
3.5 清空回收站
purge dba_recyclebin; select count(*) from dba_recyclebin;
复制
3.6 导出元数据
dumpfile =xttdump.dmp directory=xtts_expdp statistics =NONE transport_tablespaces=USERS,xxxx transport_full_check=y
复制
dumpfile=other.dmp logfile=expdpother.log directory=xtts_expdp schemas=HSIP,xxxx content=metadata_only exclude=table,index,INDEX_STATISTICS,TABLE_STATISTICS metrics=y
复制
3.7 导入前创建还原点 (12.2 可pdb闪回)
alter database flashback on; select flashback_on from v$database; show parameter recovery; alter session set container=pdbxxx; create restore point before_imp_xtts guarantee flashback database; select name from v$restore_point;
复制
3.8 导入元数据
directory=xtts_expdp dumpfile=xttdump.dmp transport_datafiles ='+DATA/CDBRE/91299DE69F14093CE053101119AC2D30/DATAFILE/USERS_5.dbf',\ '+DATA/CDBRE/91299DE69F14093CE053101119AC2D30/DATAFILE/USERS_253.dbf'
复制
如果异常可以闪回
alter pluggable database pdbxxx close immediate; FLASHBACK PLUGGABLE DATABASE pdbanbob TO RESTORE POINT before_imp_xtts; alter pluggable database pdbanbob open resetlogs;
复制
3.9 表空间读写
3.10 导入用户数据
impdp xxx/xxx@pdbxxx dumpfile=other.dmp directory=xtts_expdp logfile=impdpother.log
复制
3.11 修改用户默认的表空间
3.12 删除闪回点
3.13 public对象单独导出导入
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
Oracle DataGuard高可用性解决方案详解
孙莹
582次阅读
2025-03-26 23:27:33
Oracle RAC 一键安装翻车?手把手教你如何排错!
Lucifer三思而后行
539次阅读
2025-04-15 17:24:06
【纯干货】Oracle 19C RU 19.27 发布,如何快速升级和安装?
Lucifer三思而后行
445次阅读
2025-04-18 14:18:38
XTTS跨版本迁移升级方案(11g to 19c RAC for Linux)
zwtian
434次阅读
2025-04-08 09:12:48
【ORACLE】记录一些ORACLE的merge into语句的BUG
DarkAthena
433次阅读
2025-04-22 00:20:37
墨天轮个人数说知识点合集
JiekeXu
433次阅读
2025-04-01 15:56:03
Oracle SQL 执行计划分析与优化指南
Digital Observer
432次阅读
2025-04-01 11:08:44
【ORACLE】你以为的真的是你以为的么?--ORA-38104: Columns referenced in the ON Clause cannot be updated
DarkAthena
410次阅读
2025-04-22 00:13:51
Oracle数据库一键巡检并生成HTML结果,免费脚本速来下载!
陈举超
398次阅读
2025-04-20 10:07:02
Oracle 19c RAC更换IP实战,运维必看!
szrsu
377次阅读
2025-04-08 23:57:08