最近公司Oracle升级,考虑到停机时间等综合因数,最终选择了xtts数据迁移方案。

为此我整理了一份操作手册,方便以后查阅。

关于xtts的介绍可以参见这篇文章:

《XTTS,又一个值得你重视的Oracle数据库迁移升级利器》

https://blog.csdn.net/weixin_34064653/article/details/90584543

需要注意的是,引文使用的是xtts2,而我采用的xtts4对配置文件和步骤有很大简化。

好了话不多少,把我的手册奉上。

一、    使用场景:

源库: Linux RAC ASM 11.2.0.4

目标库:Linux RAC ASM 19.6.0.0.0

XTTS版本:xttsV4

二、    操作步骤:

1、   准备阶段

1)    校验环境信息,为备份做前期准备

2、   传输阶段

1)    源库创建备份

2)    目标库恢复备份

3、   增量阶段

1)    源库做增量备份,可以多次执行,目的是让目标库和源库尽可能接近

2)    目标库同步增量

4、   停机阶段

1)    源库创建验证表,并写入一条数据

2)    源库表空间切换至read only

3)    源库做最后一次增量备份

4)    复制增量到目标库

5)    目标库同步增量

6)    导入角色、用户信息(若准备阶段已经处理,则跳过)

7)    目标库导入表空间元数据

8)    确认表空间已导入

9)    rman下检查表空间是否有物理和逻辑错误

10) 修改目标库表空间read write

11) 导入profile

12) 导入其他对象

13) 手动收集统计信息(如果导入表空间元数据时排除了统计信息)

5、   验证阶段

1)    查询目标库验证表数据是否和源库一致

2)    验证数据对象

三、    准备阶段

1、   检查数据库版本:目标必须>=源>=11.2.0.4

SELECT * FROM v$version;

2、   确认compatible版本:目标必须>=源>=11.2.0.4

SELECT * FROM v$parameter WHERE NAME = 'compatible';

3、   确认instance_name,archive模式必须开启

SELECT * FROM v$instance;

4、   确认rman备份策略必须为disk(关键字:TO DISK)

rman target/

show default device type;

5、   确认rman未开启压缩(关键字:TO BACKUPSET)

show device type;

6、   目标库db_files必须大于源库

SELECT * FROM v$parameter WHERE NAME = ' db_files ';

7、   确认源和目标的字符集一致

select * from nls_database_parameters t where t.parameter in ('NLS_CHARACTERSET', 'NLS_NCHAR_CHARACTERSET');

8、   确认时区一致

select dbtimezone from dual;

9、   要迁移的表空间都是online

select tablespace_name, status from dba_tablespaces t where tablespace_name = ' TESTDB ';

select file_name, online_status from dba_data_files where tablespace_name = ' TESTDB ';

10、            要迁移的表空间中没有sys,system用户的对象

select * from dba_segments where tablespace_name = 'TESTDB' and owner IN ('SYS', 'SYSTEM');

11、            用户对象没有存储在system,sysaux,users上

select * from dba_segments where tablespace_name in ('SYSTEM','SYSAUX','USER') and owner = 'TEST';

12、            是否存在外部表

select OWNER, TABLE_NAME from DBA_EXTERNAL_TABLES;

13、            是否存在加密列、加密表空间

select owner, table_name, count(*) from DBA_ENCRYPTED_COLUMNS group by owner, table_name;

select TABLESPACE_NAME, ENCRYPTED from dba_tablespaces where ENCRYPTED = 'YES';

14、            表空间是否自包含

execute dbms_tts.transport_set_check('TESTDB', true);

select * from transport_set_violations;

15、            清空回收站

select count(*) from dba_recyclebin;

purge dba_recyclebin;

16、            为源库开启快跟踪(可以提升增量备份的效率)

alter database enable block change tracking using file '%ORACLE_HOME%/trace/trace.log';

17、            检查无效对象

select owner, object_name, object_type, status from dba_objects where owner = 'TEST' and status <> 'VALID';

18、            检查无效索引

select index_name, table_name, tablespace_name, from dba_indexes where tablespace_name = 'TESTDB' and status <> 'VALID';

19、            创建目标库到源库的DBLINK(用于比对pfile,role,user和import表空间元数据)

create public database link TTSLINK connect to system identified by密码 using

'(DESCRIPTION =

(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = 源库地址)(PORT = 1521)))

(CONNECT_DATA = (SERVICE_NAME = 源库服务名))

)';

select 1 from dual@ TTSLINK;

20、            目标库创建directory(用于导入元数据)

create directory TTSDUMP as '工作目录/ttsdump';

21、            目标库检查是否已存在欲复制的表空间和对象(存在则需重命名或删除)

select * from dba_tablespaces where tablespace_name = 'TESTDB';

select t1.*

from

(select owner, object_name, object_type from dba_objects where owner = 'TEST') t1,

(select owner, object_name, object_type from dba_objects@TTSLINK where owner = 'TEST') t2

where t1. owner = t2.owner and t1.object_name = t2.object_name and t1.object_type = t2.object_type;

22、            对比新旧库的profile

select distinct(t.pro) from

(

select s.profile pro, l.profile pro2

from dba_profiles@ TTSLINK s, dba_profiles l

where s.profile = l.profile(+)

) t

where t.pro2 is null

order by t.pro;

23、            对比新旧库的role

select 'create role '||role ||';' from dba_roles@TTSLINK

minus

select 'create role '||role ||';' from dba_roles;

24、            对比新旧库的user

select 'create user "'||a.username ||'" identified by values '''||b.password||

''' default tablespace '|| a.default_tablespace || ' temporary tablespace '|| a.temporary_tablespace||';'

from dba_users@TTSLINK a, sys.user$@TTSLINK b, dba_users c

where a.username=b.name

and a.username = c.username(+) and c.username is null

order by a.username;

select 'grant ' || GRANTED_ROLE || ' to ' || GRANTEE from DBA_ROLE_PRIVS

where GRANTEE IN(

SELECT username FROM dba_users b

WHERE b.username NOT IN ('SYS', 'SYSTEM', 'SYSAUX', '…….')

) order by GRANTEE, GRANTED_ROLE;

四、    传输阶段

1、   源库部署rman_xttconvert_VER4.zip脚本

mkdir –p /home/db/oracle/xtts/backup

cd /home/db/oracle/xtts

unzip rman_xttconvert_VER4.zip

2、   修改xtt.properties配置文件:

以下五个参数为必要参数:

1)    tablespaces:欲复制的表空间,多个表空间之间用“,”分隔。

2)    platformid:源库platformid  (SLECT platform_id FROM v$database;)

3)    src_srcatch_location:源库创建备份的位置(使用nas目录)

4)    dest_srcatch_location:目标库接受备份的位置(同上目录)

5)    dest_datafile_location:目标库表空间文件的位置

3、   复制脚本到目标库

scp –r /home/db/oracle/xtts 目标库ip:/home/db/oracle/xtts

4、   源库目标库设置环境变量

1)    确认源库目标库的oralce_sid,避免一台服务器有多个实例的情况导错库

echo $ORACHE_SID

2)    源库目标库设置xtts工作目录、开启debug

export TMPDIR=/home/db/oracle/xtts

export XTTDEBUG=1

3)    切换工作目录

cd /home/db/oracle/xtts

5、   源库创建备份

cd /home/db/oracle/xtts

nohup $ORACLE_HOME/perl/bin/perl xttdriver.pl --backup &

6、   复制到目标库

scp –r backup res.txt 目标库ip:/home/db/oracle/xtts/

7、   目标库应用备份

nohup $ORACLE_HOME/perl/bin/perl xttdriver.pl --restore &

五、    增量阶段

此阶段工作和备份阶段基本一致,目标是让备库更接近源库:

1、   源库创建增量备份

cd /home/db/oracle/xtts

nohup $ORACLE_HOME/perl/bin/perl xttdriver.pl --backup &

2、   复制到目标库

scp –r backup res.txt 目标库ip:/home/db/oracle/xtts/

3、   目标库应用备份

nohup $ORACLE_HOME/perl/bin/perl xttdriver.pl --restore &

六、    停机阶段

1、   源库创建验证表,并写入一条数据

create table TEST.XTTS_TEST tablespace TESTDB as select 1 C1 from DUAL;

2、   源库表空间切换至read only

ALTER TABLESPACE TESTDB READ ONLY;

ALTER TABLESPACE TESTDB2 READ ONLY;

3、   源库做最后一次增量备份

cd /home/db/oracle/xtts

export TMPDIR=/home/db/oracle/xtts

export XTTDEBUG=1

nohup $ORACLE_HOME/perl/bin/perl xttdriver.pl --backup &

4、   复制到目标库

scp –r backup res.txt 目标库ip:/home/db/oracle/xtts/

5、   目标库同步增量

cd /home/db/oracle/xtts

export TMPDIR=/home/db/oracle/xtts

export XTTDEBUG=1

nohup $ORACLE_HOME/perl/bin/perl xttdriver.pl --restore &

6、   导入角色、用户信息(免得导入表空间元素据报错,若准备阶段已经处理,则跳过)

impdp system/oracle metrics=yes network_link=TTSLINK include=role,user full=y content=metadata_only > other.log

7、   目标库导入表空间元数据

1)    复制xttplan.txt,xttnewdatafiles.txt

scp xttplan.txt xttnewdatafiles.txt目标库ip:/home/db/oracle/xtts/

2)    生成DataPump 导入模板文件xttplugin.txt

nohup $ORACLE_HOME/perl/bin/perl xttdriver.pl -e &

3)    修改xttplugin.txt

修改以下内容

1、  用户名/密码

2、  dmp目录

3、  network_link

可选配置:exclude=(TABLE_STATISTICS,INDEX_STATISTICS)

通过以上选项跳过统计信息导入,后续手动收集

8、   确认表空间已导入

SELECT * FROM dba_segments WHERE tablespace IN (‘TESTDB’,’TESTDB2’);

SELECT * FROM TEST.xtts_test;

9、   rman下检查表空间是否有物理和逻辑错误

RMAN> validate tablespace TESTDB, TESTDB2 check logical;

10、            修改目标库表空间read write

ALTER TABLESPACE TESTDB READ WRITE;

ALTER TABLESPACE TESTDB2 READ WRITE;

11、            导入profile

impdp system/oracle metrics=yes network_link=TTSLINK include=profile full=y content=metadata_only > other.log

12、            导入其他对象

impdp system/oracle metrics=yes network_link=TTSLINK include=view,sequence,fuction,procedure schemas=(TEST,TEST2) content=metadata_only > other.log

13、            手动收集统计信息(如果导入表空间元数据时排除了统计信息)

select 'EXEC DBMS_STATS.GATHER_TABLE_STATS('''||owner||''','''||table_name||''',estimate_percent=>1,method_opt=>''FOR ALL COLUMNS SIZE AUTO'',degree=>12,cascade=>TRUE);' from dba_tables where owner in('TEST','TEST2') ;

七、    验证阶段

通知应用切换ip,验证应用服务是否正常

手把手XTTS_V4迁移的更多相关文章

  1. 手把手教你从Core Data迁移到Realm

    来源:一缕殇流化隐半边冰霜 (@halfrost ) 链接:http://www.jianshu.com/p/d79b2b1bfa72 前言 看了这篇文章的标题,也许有些人还不知道Realm是什么,那 ...

  2. 手把手教你从 Core Data 迁移到 Realm

    前言 看了这篇文章的标题,也许有些人还不知道Realm是什么,那么我先简单介绍一下这个新生的数据库.号称是用来替代SQLite 和 Core Data的.Realm有以下优点: 使用方便 Realm并 ...

  3. 手把手教会将 Windows 窗体桌面应用从.NET Framework迁移到 .NET SDK/.NET 6 格式

    接上篇:手把手教会 VS2022 设计 Winform 高DPI兼容程序 (net461 net6.0 双出) https://www.cnblogs.com/densen2014/p/1614293 ...

  4. 手把手图文教你从Eclipse项目迁移Android Studio

    转载请把头部出处链接和尾部二维码一起转载,本文出自逆流的鱼yuiop:http://blog.csdn.net/hejjunlin/article/details/52937391 从Android的 ...

  5. 【Redis技术探索】「数据迁移实战」手把手教你如何实现在线+离线模式进行迁移Redis数据实战指南(在线同步数据)

    从实战出发使用RedisShake进行Redis数据在线+离线模式迁移指南 RedisShake基本介绍 RedisShake是基于redis-port基础上进行改进的是一款开源的Redis迁移工具, ...

  6. 【Redis 技术探索】「数据迁移实战」手把手教你如何实现在线 + 离线模式进行迁移Redis数据实战指南(离线同步数据)

    离线迁移 与在线迁移相比,离线迁移适宜于源实例与目标实例的网络无法连通的场景,或者源端实例部署在其他云厂商Redis服务中,无法实现在线迁移. 存在的问题 由于生产环境的各种原因,我们需要对现有服务器 ...

  7. 手把手教你用动软.NET代码生成器实例教程

    动软实战攻略 手把手教你用动软 文档编号:20110421 版权所有 © 2004-2011 动软 在线帮助:http://help.maticsoft.com 目录   一.        产品介绍 ...

  8. ABP 教程文档 1-1 手把手引进门之 ASP.NET Core & Entity Framework Core(官方教程翻译版 版本3.2.5)

    本文是ABP官方文档翻译版,翻译基于 3.2.5 版本 官方文档分四部分 一. 教程文档 二.ABP 框架 三.zero 模块 四.其他(中文翻译资源) 本篇是第一部分的第一篇. 第一部分分三篇 1- ...

  9. ABP 教程文档 1-1 手把手引进门之 AngularJs, ASP.NET MVC, Web API 和 EntityFramework(官方教程翻译版 版本3.2.5)含学习资料

    本文是ABP官方文档翻译版,翻译基于 3.2.5 版本 转载请注明出处:http://www.cnblogs.com/yabu007/  谢谢 官方文档分四部分 一. 教程文档 二.ABP 框架 三. ...

  10. 迁移数据库数据到SQL Server 2017

      概述 本篇我们将利用DMA一步一步实现SQL Server 的迁移.帮助大家理解现在的SQL Server与新版本的融合问题,同时需要我们做哪些操作来实现新版本的升级或者迁移. SQL Serve ...

随机推荐

  1. java struts2框架漏洞合集

    目录 struts2 s2-016 payload 数据包 返回结果 struts2 s2-016 参考:https://github.com/vulhub/vulhub/blob/master/st ...

  2. FMC DA子卡设计原理图:FMCJ465-2路 16bit 12.6GSPS FMC DA子卡

    FMCJ465-2路 16bit 12.6GSPS FMC DA子卡 一.板卡概述:      FMCJ465是一款转换速率最高为12.6GSPS 的 DAC 回放板,DAC位数16bit; 板卡基于 ...

  3. iOS 常用第三方库及原理

    AFNetWorking SDWebImage MJRefresh Masonry YYModel IQKeyboardManger

  4. 关于pytest生成测试报告

    之前用pytest集成allure,记录的很清楚确实很好,但是我不知道怎么把生成的所有结果通过邮箱发送 可以使用pytest-html生成的html是这样的 也很清楚 但是!!!!!!!!!!!!!! ...

  5. QML与python互相通信

    解决python与QML的通信问题: QML中直接调用python函数 python发送信号,QML响应信号并进行相应处理 py文件 # This Python file uses the follo ...

  6. React子组件继承父组件的props

    https://zh-hans.reactjs.org/warnings/unknown-prop.html

  7. mac使用expect登录跳板机后的机器

    两个文档 #!/usr/bin/expect -f #连接文件名字记录 set ip [lindex $argv 0] catch {spawn ssh 1.1.1.1}## ip地址换成自己的 ex ...

  8. [前端js] 爬取亿图脑图大纲

    这段程序使看到了好的东西,又没有零钱的产物 还是老师让画思维导图我不想画还想白嫖的想法 用时20分钟 就拿这个来作为例子 https://mm.edrawsoft.cn/template/286842 ...

  9. python读取word文档,插入mysql数据库实例

    表格内容如下: 1.实现批量导入word文档,取文档标题中的数字作为编号 2.除取上面打钩的内容需要匹配出来入库入库,其他内容全部直接入库mysql # wuyanfeng# -*- coding:u ...

  10. vue的增删改查(简单版)

    <template>   <div class="about">     <div>       <input type="te ...