手把手XTTS_V4迁移
最近公司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迁移的更多相关文章
- 手把手教你从Core Data迁移到Realm
来源:一缕殇流化隐半边冰霜 (@halfrost ) 链接:http://www.jianshu.com/p/d79b2b1bfa72 前言 看了这篇文章的标题,也许有些人还不知道Realm是什么,那 ...
- 手把手教你从 Core Data 迁移到 Realm
前言 看了这篇文章的标题,也许有些人还不知道Realm是什么,那么我先简单介绍一下这个新生的数据库.号称是用来替代SQLite 和 Core Data的.Realm有以下优点: 使用方便 Realm并 ...
- 手把手教会将 Windows 窗体桌面应用从.NET Framework迁移到 .NET SDK/.NET 6 格式
接上篇:手把手教会 VS2022 设计 Winform 高DPI兼容程序 (net461 net6.0 双出) https://www.cnblogs.com/densen2014/p/1614293 ...
- 手把手图文教你从Eclipse项目迁移Android Studio
转载请把头部出处链接和尾部二维码一起转载,本文出自逆流的鱼yuiop:http://blog.csdn.net/hejjunlin/article/details/52937391 从Android的 ...
- 【Redis技术探索】「数据迁移实战」手把手教你如何实现在线+离线模式进行迁移Redis数据实战指南(在线同步数据)
从实战出发使用RedisShake进行Redis数据在线+离线模式迁移指南 RedisShake基本介绍 RedisShake是基于redis-port基础上进行改进的是一款开源的Redis迁移工具, ...
- 【Redis 技术探索】「数据迁移实战」手把手教你如何实现在线 + 离线模式进行迁移Redis数据实战指南(离线同步数据)
离线迁移 与在线迁移相比,离线迁移适宜于源实例与目标实例的网络无法连通的场景,或者源端实例部署在其他云厂商Redis服务中,无法实现在线迁移. 存在的问题 由于生产环境的各种原因,我们需要对现有服务器 ...
- 手把手教你用动软.NET代码生成器实例教程
动软实战攻略 手把手教你用动软 文档编号:20110421 版权所有 © 2004-2011 动软 在线帮助:http://help.maticsoft.com 目录 一. 产品介绍 ...
- ABP 教程文档 1-1 手把手引进门之 ASP.NET Core & Entity Framework Core(官方教程翻译版 版本3.2.5)
本文是ABP官方文档翻译版,翻译基于 3.2.5 版本 官方文档分四部分 一. 教程文档 二.ABP 框架 三.zero 模块 四.其他(中文翻译资源) 本篇是第一部分的第一篇. 第一部分分三篇 1- ...
- ABP 教程文档 1-1 手把手引进门之 AngularJs, ASP.NET MVC, Web API 和 EntityFramework(官方教程翻译版 版本3.2.5)含学习资料
本文是ABP官方文档翻译版,翻译基于 3.2.5 版本 转载请注明出处:http://www.cnblogs.com/yabu007/ 谢谢 官方文档分四部分 一. 教程文档 二.ABP 框架 三. ...
- 迁移数据库数据到SQL Server 2017
概述 本篇我们将利用DMA一步一步实现SQL Server 的迁移.帮助大家理解现在的SQL Server与新版本的融合问题,同时需要我们做哪些操作来实现新版本的升级或者迁移. SQL Serve ...
随机推荐
- wps二次开发
JSAPI概述及原理 : [金山文档]JSAPI概述及原理 https://kdocs.cn/l/skWT29577eEE JSAPI集成开发文档 [金山文档]JSAPI集成开发文档 https:// ...
- 【树莓派】在vscode中连接树莓派并编写代码
在树莓派里编写代码的话会比较麻烦因此可以在vscode中通过ssh连接树莓派并且编辑代码 参考: vscode通过ssh连接树莓派实现远程开发 VSCODE 远程开发树莓派 使用vscode打造pyt ...
- NFS服务器搭建与autofs自动挂载
一.NFS文件详解 1. /data/ 表示需要共享的目录. 2. IP 表示允许哪个客户端访问. 3. IP 后括号 ...
- 配置隐藏index.php
.htaccess文件写入类容放到跟目录下就OK <IfModule mod_rewrite.c> Options +FollowSymlinks -Multiviews RewriteE ...
- python日志logging配置
python日志logging配置 为了方便ELK收集日志,将日志打印成json格式 开发过程中,使用json格式不方便排查问题 本文章使用python的logging模块,一步步增加配置,来说明每个 ...
- vue3中读取本地excel文件内容
背景 做后台项目时避免不了excel文件上传,有的还要求对文件内容做校验,或者把文件内容转成数据上传保存. 操作 1.引入xlsx插件,最好安装指定版本,否则会报错 npm i xlsx@0.16.0 ...
- iOS开发之UIImage在压缩时失真问题,压缩图片的大小
今天遇到UIImage在压缩时失真问题,压缩图片的大小图片模糊 错误的方案 /** * 压缩图片 * image:将要压缩的图片 size:压缩后的尺寸 */ -(UIImage*) OriginIm ...
- chrome 检查更新时出错:无法启动更新检查(错误代码为 4: 0xA0430817 -- system level)
Windows系统谷歌浏览器 Chrome 检查更新时出错:无法启动更新检查(错误代码为 4: 0x80070005 -- system level)该怎么办? 这很有可能是 Chrome 更新服务被 ...
- linux忘记密码-进入单用户模式修改密码
1.重启系统 重启可以使用命令 reboot.init 6.shutdown -r now 或点击VMware-虚拟机-电源-重新启动客户机 2.进入GRUB界面 重启后,在启动界面按上下方向键选择第 ...
- react 本地 DevServer启动之后找不到静态资源404
起因:更改路由嵌套方式,基础路径不是 '/' 本地启动项目之后 请求静态资源404,前边加了路由路径, 原因:打包之后相对路径改变了,解决:在output里的publicPath :'/'