XTTS数据迁移

文章目录

  • 一、全量迁移
    • 1、源端和目标端都需要配置XTTS脚本(源库和目标库都需要进行下列配置)
    • 2、源端调用 xttdriver.pl -p做迁移准备
    • 3、将源端的数据文件副本和rmanconvert.cmd传到目标端
    • 4、在目标端对数据文件拷贝进行字节序的转换
  • 二、XTTS 第1~n次增量前滚
    • 1、产生增量数据
    • 2、源端做增量备份
    • 3、将源端的增量数据传到目标端
    • 4、目标端进行增量转换和数据写入同步
    • 5、源端确定下一个增量备份的FROM_SCN
  • 三、XTTS 最后一次增量前滚
    • 1、将表空间置为RO状态
    • 2、源端做增量备份
    • 3、将源端的增量数据传到目标端
    • 4、目标端进行增量转换和数据写入同步
  • 四、迁移元数据
    • 1、在目标库创建业务用户
    • 2、导入xtts的元数据
    • 3、导入存储过程、触发器、函数、包、视图、序列
    • 4、导入公共同义词和dblink等其它对象
  • 五、迁移完成后的收尾工作
    • 1、查看源端、目标端的数据一致性
    • 2、更改用户默认表空间
    • 3、目标库的表空间修改为读写模式
    • 4、校验数据文件完整性

一、全量迁移

在此步骤中,表空间的数据文件将从源端数据库传输到目标端数据库,本步骤只需要执行一次,数据文件传输过程中不影响源端数据库正常访问。

此处有2种方法:dbms_file_transfer和rman方法。对于数据文件很多的情况下来说,dbms_file_transfer是推荐的方法。

此处使用rman方式。
本次迁移表空间为DS_DATA

资源包:
百度网盘链接:https://pan.baidu.com/s/1paVn-r5d-SzLJ4pX9BL03A?pwd=o0xw
提取码:o0xw
或者自行网上寻找也可以

1、源端和目标端都需要配置XTTS脚本(源库和目标库都需要进行下列配置)

rm -rf /u01/app/xtts/
rm -rf /home/oracle/scripts

mkdir -p /u01/app/xtts/inc_bk
chown oracle:oinstall /u01/app/xtts
chown oracle:oinstall /u01/app/xtts/inc_bk
mkdir -p /u01/app/xtts/df_bk
chown oracle:oinstall /u01/app/xtts/df_bk

mkdir -p /home/oracle/scripts
cd /home/oracle/scripts
# 直接将rman_xttconvert_v3.zip上传到/home/oracle/scripts也可以
cp rman_xttconvert_v3.zip /home/oracle/scripts
# 解压XTTS包
unzip rman_xttconvert_v3.zip


-- 注意修改相应参数(如果源库和目标库版本之类的信息不一样,需要修改参数内容)
cat > /home/oracle/scripts/xtt.properties  <<"EOF"
tablespaces=DS_DATA
platformid=13
#srcdir=SOURCEDIR
#dstdir=DESTDIR
#srclink=ttslink
dfcopydir=/u01/app/xtts/df_bk
backupformat=/u01/app/xtts/inc_bk
stageondest=/u01/app/xtts/df_bk
storageondest=/u01/app/oracle/oradata/P19C
backupondest=/u01/app/xtts/inc_bk
#cnvinst_home=/oracle/app/oracle/product/11.2.0/dbhome_1
#cnvinst_sid=targetdb
EOF

在这里插入图片描述
在这里插入图片描述

2、源端调用 xttdriver.pl -p做迁移准备

首先,确保源库处于OPEN阶段,所有表空间都处于online状态:

select 'ALTER TABLESPACE '||name||' READ WRITE;' exec_sql
from v$tablespace 
where NAME not in ('SYSTEM','SYSAUX','UNDOTBS1','TEMP');


select tablespace_name,status from dba_tablespaces;

在这里插入图片描述
在源端执行 xttdriver.pl -p做迁移准备:

cd /home/oracle/scripts
export TMPDIR=/home/oracle/scripts
$ORACLE_HOME/perl/bin/perl xttdriver.pl -p

在这里插入图片描述
在这里插入图片描述

  • 查看备份的文件
ll /u01/app/xtts/df_bk/*

在这里插入图片描述

该操作执行过程包括以下内容:

1、此过程会将相关的表空间文件执行一次镜像拷贝过程,可以认为是全备,可以在rman中执行“list copy;”查看。此处会把数据文件拷贝一份到/u01/app/xtts/df_bk目录。需要注意目录/u01/app/xtts/df_bk的空间。

rman target /

list copy;

在这里插入图片描述
2、会在/home/oracle/scripts 目录下产生几个文件,xttplan.txt、rmanconvert.cmd和xttnewdatafiles.txt:

ll -lrt

在这里插入图片描述
其中 xttplan.txt 文件中的内容如下:
我这里是只打算迁移DS_DATA表空间,如果上边配置的是多个的话这里会显示多个
在这里插入图片描述
该文件中的数值代表数据库的 SCN。如果后面再次运行脚本进行增量操作时,该值会发现改变。

再来看看脚本rmanconvert.cmd的内容:

more rmanconvert.cmd

在这里插入图片描述
上述脚本是 perl 脚本产生的 rman convert 脚本,需要将该脚本传递到目标端主机。注意,上述脚本文件格式需要注意,同时并行度是默认的,可以进行调整。

3、将源端的数据文件副本和rmanconvert.cmd传到目标端

将数据文件副本和rmanconvert.cmd文件拷贝到目标端。注意目标端的剩余空间:

scp /u01/app/xtts/df_bk/* 192.168.229.151:/u01/app/xtts/df_bk/

scp /home/oracle/scripts/rmanconvert.cmd 192.168.229.151:/home/oracle/scripts/

在这里插入图片描述
在目标端查看到传输成功
在这里插入图片描述

4、在目标端对数据文件拷贝进行字节序的转换

注意目标端的空间:

cd /home/oracle/scripts
export TMPDIR=/home/oracle/scripts
$ORACLE_HOME/perl/bin/perl xttdriver.pl -c



cat /home/oracle/scripts/xttnewdatafiles.txt

ll -lrt /u01/app/oracle/oradata/P19C

在这里插入图片描述
转换后的数据文件拷贝会出现在 xtt.properties 文件中定义的参数 storageondest 下,即最终的数据文件目录。
在这里插入图片描述

二、XTTS 第1~n次增量前滚

在此阶段,在源端做增量数据,从源数据库创建增量备份(内部其实是仍然使用rman增量备份),将其传输到目标端,在目标端转换为目标系统Endian格式,然后应用于转换后的目标数据文件副本,将其前滚。此阶段可以多次重复运行。每次连续的增量备份都应该比以前的增量备份花费更少的时间,并且将使目标数据文件副本与源数据库更加一致。这样对于目标库上的数据文件拷贝,通过一次次应用增量数据就可以逐渐追上源库的生产数据。

这个阶段中的步骤可以运行多次,以使目标中的datafiles更接近源文件的时间/ SCN。在此阶段,源数据库完全可访问。

1、产生增量数据

# 产生增量数据
create table testxtts6 tablespace ds_data as select * from Shopping_Carts;

在这里插入图片描述

2、源端做增量备份

开始做增量备份:

cd /home/oracle/scripts
export TMPDIR=/home/oracle/scripts
$ORACLE_HOME/perl/bin/perl xttdriver.pl -i

在这里插入图片描述
上面的操作还会在 TMPDIR 目录下产生xttplan.txt.new、tsbkupmap.txt和incrbackups.txt文件:

more xttplan.txt.new

more tsbkupmap.txt

ll /u01/app/xtts/inc_bk/ -h

rman target /

list backupset;

在这里插入图片描述

3、将源端的增量数据传到目标端

这里传递增量数据的时候,还需要将源端/home/oracle/scripts/目录下的 xttplan.txt、 tsbkupmap.txt和incrbackups.txt文件都传输到目标端。每当你进行一次增量的备份操作,这 3个文件的内容都会发现变化 。

每一次增量操作之后,都需要将这 3个文件传到目标端数据库的 /home/oracle/scripts/目录中。

# 注意:增量内容应该拷贝到目标端的全量备份路径下
scp /u01/app/xtts/inc_bk/* 192.168.229.151:/u01/app/xtts/df_bk/

scp /home/oracle/scripts/xttplan.txt 192.168.229.151:/home/oracle/scripts/
scp /home/oracle/scripts/tsbkupmap.txt 192.168.229.151:/home/oracle/scripts/
scp /home/oracle/scripts/incrbackups.txt 192.168.229.151:/home/oracle/scripts/

4、目标端进行增量转换和数据写入同步

export XTTDEBUG=1
cd /home/oracle/scripts
export TMPDIR=/home/oracle/scripts
$ORACLE_HOME/perl/bin/perl xttdriver.pl -r

在这里插入图片描述
如果一套库上有多个实例的话,在执行该步骤之前,需要对环境变量进行确认,如检查当前ORACLE_SID是否是需要执行的SID,否则可能会恢复到其他实例上。(并非是真实的恢复,因为其他实例跟这个备份集没有任何关系,但恢复的过程会在其他实例上进行一遍,如关闭/启动数据库,包括增量恢复的日志都会在另一个数据库上显示。)如果发生了这种事情,不用紧张,调整好环境变量,再执行一次perl xttdriver.pl –r即可。误操作的实例不受影响。

5、源端确定下一个增量备份的FROM_SCN

cd /home/oracle/scripts
export TMPDIR=/home/oracle/scripts
$ORACLE_HOME/perl/bin/perl xttdriver.pl -s

该步骤会计算下一个FROM_SCN,将其记录在xttplan.txt文件中,然后在创建下一个增量备份时使用该SCN。

该步骤会将-i时生成的xttplan.txt.new改名为xttplan.txt,并将原来的xttplan.txt备份。

建议在目标端每次做完recover动作后,源端就执行一次该命令,以免遗忘。
在这里插入图片描述

三、XTTS 最后一次增量前滚

1、将表空间置为RO状态

假设我们进行了多次增量操作之后,在停机时间的时候,再将源端数据库中需要传输的表空间设置为只读模式 :

# 产生增量数据
create table testxtts66 tablespace ds_data as select * from Shopping_Carts;

select 'ALTER TABLESPACE '||name||' READ ONLY;' exec_sql
from v$tablespace 
where NAME not in ('SYSTEM','SYSAUX','UNDOTBS1','TEMP');


select tablespace_name,status from dba_tablespaces;

在这里插入图片描述

2、源端做增量备份

首先对上一次的增量备份目录做迁移:

mv /u01/app/xtts/inc_bk /u01/app/xtts/inc_bk1
mkdir -p /u01/app/xtts/inc_bk

在这里插入图片描述
开始做增量备份:

cd /home/oracle/scripts
export TMPDIR=/home/oracle/scripts
$ORACLE_HOME/perl/bin/perl xttdriver.pl -i

在这里插入图片描述

3、将源端的增量数据传到目标端

这里传递增量数据的时候,还需要将源端/home/oracle/scripts/目录下的 xttplan.txt、 tsbkupmap.txt和incrbackups.txt文件都传输到目标端。每当你进行一次增量的备份操作,这 3个文件的内容都会发现变化 。

每一次增量操作之后,都需要将这 3个文件传到目标端数据库的 /home/oracle/scripts/目录中。

# 注意:增量内容应该拷贝到目标端的全量备份路径下
scp /u01/app/xtts/inc_bk/* 192.168.229.151:/u01/app/xtts/df_bk/

scp /home/oracle/scripts/xttplan.txt 192.168.229.151:/home/oracle/scripts/
scp /home/oracle/scripts/tsbkupmap.txt 192.168.229.151:/home/oracle/scripts/
scp /home/oracle/scripts/incrbackups.txt 192.168.229.151:/home/oracle/scripts/

在这里插入图片描述

4、目标端进行增量转换和数据写入同步

cd /home/oracle/scripts
export TMPDIR=/home/oracle/scripts
$ORACLE_HOME/perl/bin/perl xttdriver.pl -r

在这里插入图片描述

四、迁移元数据

注意在导出时,TRANSPORT_TABLESPACES参数需要的表空间要写全,别遗漏。
在目标端进行IMPDP时,transport_datafiles需要将所有的数据文件添加进去。
如果数据文件很多,人为添加容易出错,可以使用perl xttdriver.pl –e获取全部数据文件列表。

1、在目标库创建业务用户

相关脚本在前边的准备阶段已经准备好了:

create user xxt identified by sys;
create user lhr identified by sys;
grant dba to xxt,lhr;

可以使用导出和导入分开来执行,也可以直接通过network_link来做远程导入,而不需要做导出操作:

2、导入xtts的元数据

生成导入脚本:

# 在目标端可以执行如下命令生成impdp,命令在xttplugin.txt文件
cd /home/oracle/scripts
export TMPDIR=/home/oracle/scripts
$ORACLE_HOME/perl/bin/perl xttdriver.pl -e


more /home/oracle/scripts/xttplugin.txt
# 显示内容如下:
impdp directory=<DATA_PUMP_DIR> logfile=<tts_imp.log> \
network_link=<ttslink> transport_full_check=no \
transport_tablespaces=DS_DATA \
transport_datafiles='/u01/app/oracle/oradata/P19C/DS_DATA_5.dbf'

在这里插入图片描述
在目标端开始导入:

# 目标端创建dblink
create public database link ttslink connect to system identified by sys using '(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.229.151 )(PORT = 1521))  ) )';


# 利用dblink直接迁移元数据,这里只会迁移表、索引、约束等,因为其它对象存储在系统表空间中
impdp system/lhr directory=DATA_PUMP_DIR logfile=tts_imp_lhr.log \
network_link=ttslink transport_full_check=no \
EXCLUDE=STATISTICS  \
transport_tablespaces=DS_DATA \
transport_datafiles='/u01/app/oracle/oradata/P19C/DS_DATA_5.dbf'

3、导入存储过程、触发器、函数、包、视图、序列

-- 导入存储过程、触发器、函数、包、视图、序列
impdp system/lhr directory=DATA_PUMP_DIR \
network_link=ttslink schemas=LHR,XXT content=metadata_only exclude=index,table,constraint parallel=8

4、导入公共同义词和dblink等其它对象

-- 导入公共同义词
set long 9999
select dbms_metadata.get_ddl('SYNONYM',SYNONYM_NAME,OWNER) 
FROM dba_synonyms 
where owner='PUBLIC' and table_owner in  ('LHR','XXT');


-- 导入dblink
set long 9999
select dbms_metadata.get_ddl('DB_LINK',DB_LINK,OWNER) 
FROM DBA_DB_LINKS;

五、迁移完成后的收尾工作

1、查看源端、目标端的数据一致性

select count(*) from lhr.testxtts6;
select count(*) from lhr.testxtts66;

select owner, object_type, count(*)
 from dba_objects
where object_name not like 'BIN%'
 and owner in ('LHR','XXT')
group by owner, object_type
order by 1,2 desc;

select owner, object_type, count(*)
 from dba_objects
where status <> 'VALID'
 and owner in ('LHR','XXT')
group by owner, object_type
order by 1, 2 desc;

在这里插入图片描述
在这里插入图片描述
迁移后的对象个数和之前一致。

2、更改用户默认表空间

alter user xxt default tablespace USERS;

3、目标库的表空间修改为读写模式

select 'ALTER TABLESPACE '||name||' READ WRITE;' exec_sql
from v$tablespace 
where NAME not in ('SYSTEM','SYSAUX','UNDOTBS1','TEMP');


select tablespace_name,status from dba_tablespaces;

在这里插入图片描述

4、校验数据文件完整性

运行RMAN,通过运行VALIDATE TABLESPACE检查物理和逻辑块损坏情况,如下所示:

validate tablespace DS_DATA check logical;

完成迁移
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/543552.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MES实施优势有哪些?MES制造执行系统的主要内容

各个行业之间也开始进入到了激烈的竞争当中&#xff0c;很多企业为了能够有效提升企业竞争力&#xff0c;都会通过提升自身实力的方式来提升竞争力。一些制造业也会在经营过程当中使用到MES系统&#xff0c;那么&#xff0c;mes系统的优势有哪些呢&#xff1f; 1、优化企业现场…

leetcode不同路径

. - 力扣&#xff08;LeetCode&#xff09; 62. 不同路径 中等 相关标签 相关企业 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下…

欧姆龙61F系列液位开关使用教程(补水和排水)

欧姆龙61F系列液位开关使用教程(补水和排水) 本文以61F-LS-CP11-NRA型号的液位开关为例进行说明: 具体的选型文档可参考以下链接中的内容: OMRON欧姆龙-无浮标开关(紧凑插入型)61F-LS液位开关-选型样本说明 补水功能(供水) 如下图所示, 电机电源为3相AC220V; 控制电…

单例模式以及常见的两种实现模式

单例模式是校招中最常考的设计模式之一. 设计模式其实就是类似于“规章制度”&#xff0c;按照这个套路来进行操作。 单例模式能保证某个类在程序中只存在唯一 一份实例。而不会创建出多个实例&#xff0c;如果创建出了多个实例&#xff0c;就会编译报错。而不会创建出多个实…

MySQL优化慢SQL的6种方式

⛰️个人主页: 蒾酒 &#x1f525;系列专栏&#xff1a;《mysql经验总结》 &#x1f30a;山高路远&#xff0c;行路漫漫&#xff0c;终有归途 目录 写在前面 优化思路 优化方法 1.避免查询不必要的列 2.分页优化 3.索引优化 4.JOIN优化 5.排序优化 6.UNION 优化…

今天掏心窝子!聊聊35岁了程序员何去何从?

今天的内容不聊技术&#xff0c;聊聊轻松的话题&#xff0c;脑子高速转了好几周&#xff0c;停下来思考一下人生…… 不对&#xff0c;关于35岁的问题好像也不轻松&#xff0c;些许有点沉重&#xff0c;反正不是技术&#xff0c;不用高速转动脑细胞了&#xff0c;哈哈。 兄弟…

牛客 NC36 在两个长度相等的排序数组中找到上中位数【中等 模拟 Java,Go,PHP】

题目 题目链接&#xff1a; https://www.nowcoder.com/practice/6fbe70f3a51d44fa9395cfc49694404f 思路 直接模拟2个数组有顺序放到一个数组中&#xff0c;然后返回中间的数参考答案java import java.util.Scanner;// 注意类名必须为 Main, 不要有任何 package xxx 信息 pu…

图文教程 | 2024Typora最新版免费激活使用教程(新旧版可用)

一、打开官网下载最新版Typora Typora 官网下载 安装&#xff1a; Typora中文官网&#xff1a;https://typoraio.cn/ Typora官网&#xff1a;https://typora.io/releases/all 官网长这个样子 下面这个不是官网&#xff01;&#xff01;&#xff01;&#xff01;注意&#x…

【ArcGIS 脚本工具】在ArcPro中实现mdb转gdb

ArcGIS Pro作为主力使用很久了&#xff0c;但是ArcMap也从来没有卸载过。 要问为什么&#xff0c;就是还需要ArcMap来读写mdb数据库&#xff0c;Pro是不支持读写mdb数据库的。 我之前尝试过不借助ArcMap把mdb转成gdb&#xff0c;奈何技术太菜搞不定。 直到我看到了公众号【G…

基于springboot实现洗衣店订单管理系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现洗衣店订单管理系统演示 摘要 随着信息互联网信息的飞速发展&#xff0c;无纸化作业变成了一种趋势&#xff0c;针对这个问题开发一个专门适应洗衣店业务新的交流形式的网站。本文介绍了洗衣店订单管理系统的开发全过程。通过分析企业对于洗衣店订单管理系统…

JD抓包 | 安卓app抓包

去年11月份左右搞过一次安卓抓包, 搞了很久试了很多方法, 才弄好. 时隔半年, 安卓抓包依然是令我头疼的问题 这次简单记录一下过程(细节太多我也说不清) JD的有效信息接口通常是以下这样的, 其他的接口并没有返回太多"有用"的信息 https://api.m.jd.com/client.act…

快速入门深度学习9.1(用时20min)——GRU

速通《动手学深度学习》9.1 写在最前面九、现代循环神经网络9.1 门控循环单元&#xff08;GRU&#xff09;9.1.1. 门控隐状态9.1.1.1. 重置门和更新门9.1.1.2. 候选隐状态9.1.1.3. 隐状态 9.1.3 API简洁实现小结 &#x1f308;你好呀&#xff01;我是 是Yu欸 &#x1f30c; 20…

从零全面认识 多线程

目录 1.基本概念 2.创建线程方式 2.1直接建立线程 2.2实现Runnable接口 3.3实现Callable接口 3.4 了解Future接口 Future模式主要角色及其作用 3.5实例化FutureTask类 3.实现线程安全 3.1定义 3.2不安全原因 3.3解决方案 3.4volatile与synchronized区别 3.5Lock与…

【Java集合进阶】数据结构(二又树,二又查找树,平衡二又树)

&#x1f36c; 博主介绍&#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 hacker-routing &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【应急响应】 【Java】 【VulnHub靶场复现】【面试分析】 &#x1f389;点赞➕评论➕收藏 …

c++的友元函数,详细笔记,细说三种友元用法

解释友元 友元用通俗易懂的话来说&#xff0c;就是&#xff1a;当有人来到你家里&#xff0c;他就只能呆在客厅里面&#xff0c;你是不可能让他来到你的卧室之中的。但是如果这个人是你的朋友&#xff0c;那么你是默许他可以进入你的卧室的。 此时呢&#xff1f;我告诉你&…

WXML模板语法-条件与列表渲染

wx:if 在小程序中&#xff0c;使用wx:if"{{condition}}"来判断是否需要渲染该代码 也可以用wx:elif和wx:else来添加else判断 <!--pages/ifIndex/ifindex.wxml--> <view wx:if"{{type 1}}">男</view> <view wx:elif"{{type …

卷积神经网络结构组成与解释

卷积神经网络结构组成与解释 卷积神经网络是以卷积层为主的深度网路结构&#xff0c;网络结构包括有卷积层、激活层、BN层、池化层、FC层、损失层等。卷积操作是对图像和滤波矩阵做内积&#xff08;元素相乘再求和&#xff09;的操作。 1. 卷积层 常见的卷积操作如下&#x…

基于Java的应急资源管理系统 (源码+文档+包运行)

一.系统概述 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本应急资源管理系统就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完毕庞大的数…

Geeker-Admin:基于Vue3.4、TypeScript、Vite5、Pinia和Element-Plus的开源后台管理框架

Geeker-Admin&#xff1a;基于Vue3.4、TypeScript、Vite5、Pinia和Element-Plus的开源后台管理框架 一、引言 随着技术的不断发展&#xff0c;前端开发领域也在不断演变。为了满足现代应用程序的需求&#xff0c;开发人员需要使用最新、最强大的工具和技术。Geeker-Admin正是…

Linux 文件页反向映射

0. 引言 操作系统中与匿名页相对的是文件页&#xff0c;文件页的反向映射对比匿名页的反向映射更为简单。如果还不清楚匿名页反向映射逻辑的&#xff0c;请移步 匿名页反向映射 1. 文件页反向映射数据结构 struct file&#xff1a; 用户进程每open()一次文件&#xff0c;则会生…