一、 概述
xxx(以下简称:客户)近期要对DB11G数据库系统(Oracle 11gR2 for
linux6.5)完成从单机环境到19.14 RAC环境的迁移升级工作,由于此次迁移升级涉及到的数据量大概在13.3TB左右,涉及的数据量非常大;所以,在正式迁移升级之前,客户需要进行一次预测,以熟悉迁移升级流程,解决迁移升级中可能出现的问题,并评估时间消耗。
为了保障迁移升级过程中数据的安全、一致性,为了保障迁移升级过程平稳、顺利的进行,需要将迁移升级方案进行详实、周密的描述和计划。
二、 总体建议
建议此次迁移升级后,对数据库进行以下方面的改进:
1、建议迁移升级后在有条件的情况下配置数据库备份恢复及验证机,以定期对数据库备份有效性进行验证。在紧急情况时(如生产主机损坏或阵列损坏时),可以考虑将数据库恢复到验证机上,接管业务运行。
2、建议迁移升级后开启数据库日志归档模式,并部署数据库进行RMAN备份,这样可以保证在数据库发生损坏时,进行有效的数据恢复,以便减少数据丢失的风险。
3、建议迁移升级后在有条件的情况下配置数据库为ADG模式,便于当数据库出现故障时,减少因宕机等因素出现的故障,提高业务的连续性和数据库的安全性。
三、 迁移升级方案简介
3.1
Oracle数据库迁移常用方法
Oracle数据库迁移升级是企业数据库运维时的常见场景,常用的迁移方法及优缺点如下:
方法 |
优点 |
缺点 |
RMAN |
操作简单,原生支持Oracle |
不适用不同字节序之间的平台迁移,不适用跨版本迁移 |
数据泵 |
操作简单,原生支持Oracle |
数据量大时需要很长的停机时间,并且有失败的风险 |
OGG |
对源端目标端平台、版本无要求,停机时间最短 |
操作复杂,维护成本高,数据一致性没法很好保证 |
XTTS |
源端和目标端可以跨平台,停机时间短 |
被迁移的表空间不能包含offline的数据文件 |
其它第三方工具 |
操作简单 |
不是原生支持,迁移后的数据一致性不能保证 |
3.2
DB11G信息(源端单机)
IP信息 |
|
|
数据库版本 |
ORACLE
11.2.0.4 |
|
补丁信息 |
NO
Patch |
|
db_name |
db11g |
|
db_unique_name |
db11g |
|
主机名 |
|
|
主机操作系统 |
redhat
6.5 |
|
数据目录 |
13.3
TB |
/home/data、/home/data1、/home/data2、/home/data3 |
归档目录 |
|
|
迁移目录 |
|
采用NFS |
主机 |
物理机 |
|
3.3
DB11G信息(目标端2节点RAC)
IP信息 |
|
|
数据库版本 |
ORACLE
19.14 |
|
补丁信息 |
19.14 |
|
db_name |
db11g |
|
db_unique_name |
db11g |
|
主机名 |
|
|
主机操作系统 |
|
|
数据目录规划 |
16TB |
ASM |
归档目录规划 |
1TB |
ASM |
迁移目录规划 |
14TB |
采用NFS |
主机 |
|
|
3.4
迁移升级方法
DB11G数据库需要从单机迁移升级至RAC环境,迁移升级前后数据库版本要从11.2.0.4升级到19.14,操作系统版本从redhat6.5升级到redhat7.9,迁移升级过程中涉及到跨数据库版本、跨操作系统版本等操作,且需要迁移的数据量为13.3TB左右,数据量较大,版本跨度较大,可采用的迁移方法有限,我们目前根据相关的迁移实施经验,建议客户使用以下迁移升级方案,现将迁移升级方案介绍如下:
采用ORACLE原生的XTTS(RMAN
Backup)方式对DB11G数据库完成从现有环境到新环境的迁移升级工作。
本方案力求做到:计划周密、步骤可行、协调指挥、安全第一。为保证万无一失,必须制定数据迁移升级回退方案,在数据迁移升级过程中出现任何意外而不能在计划时间内完成迁移升级,可即时启动回退方案。
3.5
迁移升级时间进度表
|
l 项目协调会,确认实施计划及实施内容 |
|
l 准备目标数据库RAC环境 l 准备迁移升级方案 |
|
l 测试整个迁移升级方案。 l 预估迁移升级时间 l 编写实施报告 |
|
l 应用测试 |
|
l 正式迁移升级 |
3.6
XTTS迁移升级流程
XTTS迁移流程如下:
1. 生产环境检查;
2. XTTS配置准备,根据现有情况编辑XTTS配置项;
3. 源端通过XTTS抽取表空间数据文件,进行全量导出;
4. 目标端同XTTS转换表空间数据文件,恢复到目标数据库(19c RAC);
5. 源端产生表空间增量备份;
6. 目标端转换增量备份,并执行前滚恢复;
7. 源端表空间设置read only,并创建最后增量备份;
8. 目标端执行最后增量前滚;
9. 源端通过XTTS导出metadata;
10.目标端导入metadata;
11.目标端进行迁移后的对象比对;
四、
XTTS迁移升级方案
Oracle的XTTS迁移包含三种迁移方式,既 DBMS_FILE_TRANSFER、RMAN Backup、手工 XTTS 迁移;我们此次采用RMAN Backup的方式对数据库进行迁移升级,由于采用的是XTTS方式,所以对于业务的停机窗口要求不是很长,在正式割接之前,计划对数据库从源端到目标端进行一次全量转换、两次增量转换和元数据导入的操作,在整个迁移升级过程中,全量转换和第一次增量是不需要停业务的,只有最后一次增量时,才要求将表空间设置为只读,停止业务;为确保整个迁移升级过程稳定有序,需要在迁移升级前进行一系列的迁移升级准备工作,并在最后一次增量开始前停止应用程序断开所有数据库连接,并停止数据库监听,防止意外连接进入,以保障迁移升级工作能顺利进行。
4.1
准备阶段
4.1.1.
源数据库检查及准备
1)
检查是否开启归档模式
show
parameter recovery; archive
log list; |
2)
检查是否开启块跟踪
select
status, filename from v$block_change_tracking; |
3)
检查RMAN配置
rman
target/ show
all; RMAN on the source system must not have DEVICE TYPE DISK
configured with COMPRESSED. RMAN on the source system must not have BACKUP TYPE TO COPY. The
source must have BACKUP TYPE TO BACKUPSET. CONFIGURE
DEVICE TYPE DISK PARALLELISM 8 BACKUP TYPE TO BACKUPSET; |
4)
字符集检查
col
VALUE$ format a20 select
name,value$ from props$ where name like '%CHARACTERSET'; --源端和目标端数据库字符集和国家字符集必须保持一致 |
5)
时区检查
#date
-R select
dbtimezone from dual; --源端和目标端时区必须保持一致 |
6)
db_files参数检查
show
parameter db_files; --目标端的DB_FILES参数必须大于等于源端 |
7)
字节序检查
set
line 200 col
platform_name for a60 col
PLATFORM_NAME for a60 select
name, platform_id,platform_name from v$database; select
* from v$transportable_platform; |
8)
compatible参数检查
show
parameter compatible 目标端的compatible参数必须大于等于源端 |
9)
检查组件安装情况
select comp_name from dba_registry; |
10) IOT表检查
Select
index_name,table_name,tablespace_name from dba_indexes where
compression='ENABLED' And tablespace_name not in('SYSTEM', 'SYSAUX'); select owner,tanle_name from dba_tables
where iot_type is not null; |
11) 检查cluster 对象
select owner, cluster_name,
tablespace_name from dba_clusters where tablespace_name not in('SYSTEM',
'SYSAUX'); |
12) 检查datafile状态
select name,status from v$datafile; |
13) 检查表空间个数
select count(*) from v$tablespace where
name not in ('SYSTEM', 'SYSAUX', 'USERS', 'UNDOTBS1', 'UNDOTBS2', 'TEMP'); |
14) 检查数据文件个数
select count(*) from dba_data_files where
tablespace_name not in ('SYSTEM', 'SYSAUX', 'USERS', 'UNDOTBS1', 'UNDOTBS2',
'TEMP'); |
15) 表空间自包含检查
set serveroutput on; declare tslist varchar2(32767); first boolean:=true; begin for c in (select tablespace_name from
dba_tablespaces where contents='PERMANENT' and tablespace_name
!= 'SYSTEM' and tablespace_name != 'SYSAUX') loop if first = true then first:=false; else tslist:=tslist||','; end if; tslist:=tslist||c.tablespace_name; end loop; dbms_output.put_line('Checking:
'||tslist); dbms_tts.transport_set_check(to_clob(tslist),false,false); for c in (select violations from
transport_set_violations) loop dbms_output.put_line(c.violations); end loop; end; / select * from transport_set_violations; |
16) 是否存在加密列和加密表空间
select tablespace_name,ENCRYPTED from
dba_tablespaces where ENCRYPTED='YES'; select * from dba_encrypted_columns; |
17) 表空间是否包含 XML 类型数据
select distinct p.tablespace_name from dba_tablespaces p, dba_xml_tables x,
dba_users u, all_all_tables t where t.table_name=x.table_name and
t.tablespace_name=p.tablespace_name and x.owner=u.username; select distinct p.tablespace_name from dba_tablespaces p,dba_xml_tab_cols
x,dba_users u,all_all_tables t where t.table_name=x.table_name and
t.tablespace_name=p.tablespace_name and x.owner=u.username; |
18) 用户对象依赖表空间检查
select owner, segment_name, segment_type from dba_segments where tablespace_name in ('SYSTEM',
'SYSAUX') and owner not in (select name from
system.logstdby$skip_support where action=0); |
19) 用户数据类型统计
select owner,object_type,count(1) from
dba_objects group by owner,object_type order by owner,object_type; |
20) 检查要迁移的用户的权限和角色信息
收集用户权限及角色信息: --查看所有用户 select username, user_id, account_status,
created
from dba_users where account_status='OPEN' order by 2 asc; --创建用户语句 select
to_char(dbms_metadata.get_ddl('USER', USERNAME)) CREATE_USER_DDL
from dba_users where ACCOUNT_STATUS = 'OPEN'
and USERNAME not in ('SYS', 'SYSTEM'); --创建权限语句 select
to_char(dbms_metadata.get_granted_ddl('ROLE_GRANT', GRANTEE)) GRANT_ROLE_DDL
from dba_role_privs where GRANTEE in (select USERNAME from dba_users where ACCOUNT_STATUS =
'OPEN' and USERNAME not in
('SYS', 'SYSTEM')); --用户默认表空间 select 'alter user
' || username || ' default tablespace ' ||
default_tablespace || ';'
from dba_users where ACCOUNT_STATUS = 'OPEN'
and USERNAME not in ('SYS', 'SYSTEM'); --查看角色的授权 SELECT CASE
WHEN D.ADMIN_OPTION = 'YES' THEN
'GRANT ' || d.privilege || ' TO ' || d.GRANTEE ||
' WITH GRANT OPTION ;'
ELSE
'GRANT ' || d.privilege || ' TO ' || d.GRANTEE || ';'
END priv,
'DBA_SYS_PRIVS'
FROM dba_sys_privs d WHERE D.GRANTEE in ('EAST'); SELECT CASE
WHEN D.ADMIN_OPTION = 'YES' THEN
'GRANT ' || d.GRANTED_ROLE || ' TO ' || d.GRANTEE ||
' WITH GRANT OPTION;'
ELSE
'GRANT ' || d.GRANTED_ROLE || ' TO ' || d.GRANTEE || ';'
END priv,
'DBA_ROLE_PRIVS'
FROM DBA_ROLE_PRIVS d
WHERE D.GRANTEE in ('EAST'); SELECT CASE
WHEN d.grantable = 'YES' THEN
'GRANT ' || d.privilege || ' ON ' || d.owner || '.' ||
d.table_name || ' TO ' || d.GRANTEE ||
' WITH GRANT OPTION ;'
ELSE
'GRANT ' || d.privilege || ' ON ' || d.owner || '.' ||
d.table_name || ' TO ' || d.GRANTEE || ';'
END priv,
'DBA_TAB_PRIVS'
FROM DBA_TAB_PRIVS d WHERE D.GRANTEE in ('EAST'); ---查看用户的权限 SELECT CASE
WHEN D.ADMIN_OPTION = 'YES' THEN
'GRANT ' || d.privilege || ' TO ' || d.GRANTEE ||
' WITH GRANT OPTION ;'
ELSE
'GRANT ' || d.privilege || ' TO ' || d.GRANTEE || ';'
END priv,
'DBA_SYS_PRIVS'
FROM dba_sys_privs d WHERE D.GRANTEE in ('EAST', 'USER_B',
'USER_C', 'USER_D') order by grantee; SELECT CASE
WHEN D.ADMIN_OPTION = 'YES' THEN
'GRANT ' || d.GRANTED_ROLE || ' TO ' || d.GRANTEE ||
' WITH GRANT OPTION;'
ELSE
'GRANT ' || d.GRANTED_ROLE || ' TO ' || d.GRANTEE || ';'
END priv,
'DBA_ROLE_PRIVS'
FROM DBA_ROLE_PRIVS d WHERE D.GRANTEE in ('EAST', 'USER_B',
'USER_C', 'USER_D') order by grantee; SELECT CASE
WHEN d.grantable = 'YES' THEN
'GRANT ' || d.privilege || ' ON ' || d.owner || '.' ||
d.table_name || ' TO ' || d.GRANTEE ||
' WITH GRANT OPTION ;'
ELSE
'GRANT ' || d.privilege || ' ON ' || d.owner || '.' ||
d.table_name || ' TO ' || d.GRANTEE || ';'
END priv,
'DBA_TAB_PRIVS'
FROM DBA_TAB_PRIVS d WHERE D.GRANTEE in ('EAST', 'USER_B',
'USER_C', 'USER_D') order by grantee; |
21) 临时表检查
select
dbms_metadata.get_ddl('TABLE',TABLE_NAME,owner) from dba_tables where TEMPORARY='Y'; |
22) Profile检查
set long 1000000 set linesize 1000 set head off set echo off set feedback off set pagesize 0 set termout off set trimspool on set trimout on spool create_profile.sql with profile as(select distinct profile
from dba_profiles) select
dbms_metadata.get_ddl('PROFILE',PROFILE) from profile; spool off |
23) Public DBLINK检查
select owner,object_name from dba_objects
where object_type='DATABASE LINK'; select * from dba_db_links; |
24) 配置NFS
此次迁移涉及到的数据量很大,为减少网络传输过程,可将源端或目标端配置为NFS服务器,一般在目标端设置为NFS服务端,源端为NFS客户端。
挂载点根据实际情况去创建
mount -t nfs -o
rw,bg,hard,nointr,rsize=32768,wsize=32768,tcp,vers=3,timeo=600,actimeo=0 xxx.xxx.xxx.xxx:/backup/db11g
/backup/db11g |
25) 配置rman_xttconvert_v3.zip
本次迁移采用XTTS V3版本,稳定性较V2版本有所提高,调整内容较V2版本有所减少。
unzip -d /home/db/oracle/xtts
rman-xttconvert_3.0.zip mv
xtt.properties
xtt.properties.bak vi xtt.properties tablespaces=TBS1,TBS2,…… platformid=13 dfcopydir=/backup backupformat=/backup stageondest=/backup storageondest=+DATA01/DB11G/DATAFILE backupondest=+DGRECOVERY asm_home=/home/db/grid/app/grid/19.0.0 asm_sid=+ASM1 parallel=8 rollparallel=8 |
26) 源端收集 tns、listener、sqlnet 配置
配置1522监听
LISTENER2 =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = xxx.xxx.xxx.xxx)(PORT = 1522))
) ) SID_LIST_LISTENER2 =
(SID_LIST = (SID_DESC = (GLOBAL_DBNAME = db11g
) (ORACLE_HOME = /home/data2/oracle/product/11.2.0/db_1) (SID_NAME = db11g) )
) |
4.1.2.
目标数据库检查及准备
1)
目标环境安装部署
目标端安装部署19c RAC环境,并安装19.14补丁集
数据库基本信息
数据库名 |
db11g |
字符集 |
ZHS16GBK |
国家字符集 |
AL16UTF16 |
磁盘组 |
+data01 |
时区 |
+08:00 |
块大小 |
8K |
数据库创建后,设置与源端一致大小的系统表空间及UNDO、REDO、TEMP表空间,并设置数据库初始化参数(注意:如果源端的临时表空间是非默认,在目标端也需要提前创建)
sh mytbs sh mytmp select * from
v$logfile; alter
tablespace SYSTEM add datafile '+DATA01' size 30G; alter
tablespace SYSAUX add datafile '+DATA01' size 30G; alter tablespace
UNDOTBS1 add datafile '+DATA01' size 30G; alter
tablespace UNDOTBS2 add datafile '+DATA01' size 30G; ALTER
TABLESPACE TEMP ADD TEMPFILE '+DATA01' size 30G; |
2)
检查RMAN配置
rman
target/ show
all; RMAN on the source system must not have DEVICE TYPE DISK
configured with COMPRESSED. RMAN on the source system must not have BACKUP TYPE TO COPY. The
source must have BACKUP TYPE TO BACKUPSET. CONFIGURE
DEVICE TYPE DISK PARALLELISM 8 BACKUP TYPE TO BACKUPSET; |
3)
开启归档
sqlplus
/ as sysdba show
parameter recovery; alter
system set db_recovery_file_dest_size=1000g sid='*'; alter
system set db_recovery_file_dest='+DGRECOVERY' sid='*'; shutdown
immediate startup
mount alter
database archivelog; alter
database open; archive
log list; |
4)
关闭统计信息自动收集
exec
DBMS_AUTO_TASK_ADMIN.DISABLE(client_name => 'auto optimizer stats
collection',operation => NULL,window_name => NULL); select
client_name,status from dba_autotask_client where client_name='auto optimizer
stats collection'; exec DBMS_AUTO_TASK_ADMIN.ENABLE(client_name
=> 'auto optimizer stats collection',operation => NULL,window_name =>
NULL); |
5)
关闭节点2
srvctl stop
database –db db11g –instance db11g2 –o immediate |
6)
配置TNS和DBLINK
配置DBLINK用于元数据导入
vi
/home/db/oracle/app/oracle/product/19.0.0/dbhome_1/network/admin/tnsnames.ora ttslink= (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = xxx.xxx.xxx.xxx)(PORT
= 1522)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = db11g) ) ) tnsping ttslink create public
database link ttslink connect to system identified by oracle using 'ttslink'; |
7)
创建directory
mkdir /backup/db11g chown -R
oracle:dba /backup/db11g sqlplus
"/as sysdba" create
directory expdir as '/backup/db11g'; grant
read,write on directory expdir to SYSTEM; |
8)
配置NFS
vi /etc/exports /backup/db11g
*(rw,sync,no_wdelay,insecure,no_root_squash) chmod -R 777
/backup/db11g systemctl
restart nfs-server.service showmount -e exportfs -v |
9)
创建profile
根据源端查询的结果去修改,调整
10) 增加测试表
增加测试表作为数据迁移后数据一致性的参照
create table test01 as select rownum as id,
to_char(sysdate + rownum/24/3600, 'yyyy-mm-dd hh24:mi:ss') as
inc_datetime,
trunc(dbms_random.value(0, 100)) as random_id,
dbms_random.string('x', 20) random_string from dual connect by
level <= 10000; commit; |
4.2
XTTS全备及转换
4.2.1
检查表空间、用户、文件个数
select count(*) from dba_tablespaces@ttslink where
tablespace_name not in('SYSTEM','TEMP','SYSAUX','UNDOTBS1','UNDOTBS2'); |
4.2.2
源端生成准备文件
export TMPDIR=/home/db/oracle/xtts export ORACLE_SID=db11g export XTTDEBUG=1 cd //home/db/oracle/xtts nohup $ORACLE_HOME/perl/bin/perl xttdriver.pl –p & |
4.2.3
拷贝源端xtts目录到目标端
scp -r /home/db/oracle/xtts
xxx.xxx.xxx.xxx:/home/db/oracle |
4.2.4
目标端修改NFS目录权限
chown -R oracle:oinstall /backup/db11g |
4.2.5
目标转换数据文件
export TMPDIR=/home/db/oracle/xtts export XTTDEBUG=1 cd /home/db/oracle/xtts nohup $ORACLE_HOME/perl/bin/perl xttdriver.pl –c & |
4.3
第一次增量
4.3.1
测试表更新数据
insert into test01 select
rownum as id, to_char(sysdate +
rownum/24/3600, 'yyyy-mm-dd hh24:mi:ss') as inc_datetime, trunc(dbms_random.value(0,
100)) as random_id, dbms_random.string('x',
20) random_string from dual connect by level <=
10000; commit; |
4.3.2
检查表空间、用户、文件个数
select count(*) from
dba_tablespaces@ttslink where tablespace_name not
in('SYSTEM','TEMP','SYSAUX','UNDOTBS1','UNDOTBS2'); |
4.3.3
源端生成第一次增量
cp -r /home/db/oracle/xtts
/home/db/oracle/xtts1 export TMPDIR=/home/db/oracle/xtts1 export ORACLE_SID=db11g export XTTDEBUG=1 cd /home/db/oracle/xtts1 nohup $ORACLE_HOME/perl/bin/perl
xttdriver.pl -i & |
4.3.4
拷贝xtts1到目标端
scp -r /home/db/oracle/xtts1
xxx.xxx.xxx.xxx: /home/db/oracle/ |
4.3.5
目标端修改NFS目录权限
chown -R oracle:oinstall
/backup/db11g |
4.3.6
目标端应用增量
export
TMPDIR=/home/db/oracle/xtts1 export XTTDEBUG=1 cd /home/db/oracle/xtts1 nohup $ORACLE_HOME/perl/bin/perl xttdriver.pl –r & |
4.3.7
确定下一次增量SCN
cd /home/db/oracle/xtt1/ $ORACLE_HOME/perl/bin/perl
xttdriver.pl -s |
4.4
XTTS数据割接
4.5.1
停止源端监听、检查活动事务
停止监听,并kill local进程: lsnrctl stop ps -ef|grep LOCAL=NO|awk '{print
$2}'|xargs kill -9 新增1522监听端口 启动1522端口监听: lsnrctl start LISTENER2 |
4.5.2
测试表更新数据
insert into test01 select rownum
as id, to_char(sysdate +
rownum/24/3600, 'yyyy-mm-dd hh24:mi:ss') as inc_datetime, trunc(dbms_random.value(0, 100))
as random_id, dbms_random.string('x', 20)
random_string from dual connect by level <= 10000; commit; |
4.5.3
源端停用JOB
alter system set
job_queue_processes=0; |
4.5.4
表空间设置为只读模式
set linesize
1000 set head off set echo off set feedback off set pagesize 0 set termout off set trimspool on set trimout on spool
tbsread.sql select 'alter
tablespace '||tablespace_name||' read only;' from dba_tablespaces@ttslink
where tablespace_name not in ('SYSTEM','SYSAUX','UNDOTBS1','UNDOTBS2','TEMP','TEMP1','TEMP2'); spool
off |
4.5.5
检查表空间、用户、文件个数
select count(*) from dba_tablespaces@ttslink where
tablespace_name not in('SYSTEM','TEMP','SYSAUX','UNDOTBS1','UNDOTBS2'); |
4.5.6
源端最后一次增量操作
cp -r /home/db/oracle/xtts1 /home/db/oracle/xtts2 export TMPDIR=/home/db/oracle/xtts2 export ORACLE_SID=db11g export XTTDEBUG=1 cd /home/db/oracle/xtts2 nohup $ORACLE_HOME/perl/bin/perl
xttdriver.pl -i & |
4.5.7
拷贝xtts2到目标端
scp
-r /home/db/oracle/xtts2 xxx.xxx.xxx.xxx: /home/db/oracle/ |
4.5.8
目标端修改NFS目录权限
chown -R oracle:oinstall /backup/db11g |
4.5.9
目标端应用增量
export TMPDIR=/home/db/oracle/xtts2 export XTTDEBUG=1 cd /home/db/oracle/xtts2 nohup $ORACLE_HOME/perl/bin/perl xttdriver.pl –r & |
4.5
元数据导出导入
4.5.1
目标端生成导入表空间配置文件
$ORACLE_HOME/perl/bin/perl xttdriver.pl -e $cat /oracle/xtts/xttplugin.txt |
4.5.2
用户创建和权限定义
根据在源端查询的结果,在目标端创建迁移的用户及权限定义 |
4.5.3
创建临时表
如果迁移的用户下存在临时表,根据在源端查询的结果需要手工创建 |
4.5.4
第一次元数据导入
impdp \"/as sysdba\" directory=expdir logfile=db11g_impdp.log
\ network_link=ttslink transport_full_check=no \ transport_tablespaces=TBS1,TBS2,…… exclude=statistics \ transport_datafiles='+DATA01/DB11G/DATAFILE/xxx.dbf','+DATA01/DB11G/DATAFILE/xxx.dbf' |
4.5.5
第二次元数据导入
impdp \"/as sysdba\" directory=expdir logfile=db11g_impdp2.log
network_link=ttslink schemas=' TBS1,TBS2,……’ content=metadata_only parallel=4
exclude=table,index,statistics |
4.5.6
表空间逻辑检查
进行表空间逻辑检查: rman target / log rmanvalidtbs.log<<EOF run{ allocate channel a1 type disk; allocate channel a2 type disk; allocate channel a3 type disk; allocate channel a4 type disk; allocate channel a5 type disk; allocate channel a6 type disk; allocate channel a7 type disk; allocate channel a8 type disk; allocate channel a9 type disk; allocate channel a10 type disk; allocate channel a11 type disk; allocate channel a12 type disk; allocate
channel a13 type disk; allocate channel a14 type disk; allocate channel a15 type disk; allocate channel a16 type disk; validate tablespace TBS1 check logical; validate tablespace TBS2 check logical; release channel a1; release channel a2; release channel a3; release channel a4; release channel a5; release channel a6; release channel a7; release channel a8; release channel a9; release channel a10; release channel a11; release channel a12; release channel a13; release channel a14; release channel a15; release channel a16; } EOF |
4.5.7
表空间设为读写
select
tablespace_name,status from dba_tablespaces; alter
tablespace TBS1 read write; alter
tablespace TBS2 read write; …… |
4.5.8
修改用户默认表空间
set
linesize 1000 set
head off set
echo off set
feedback off set
pagesize 0 set
termout off set
trimspool on set
trimout on spool
default_tablespace.sql select
'alter user '||username||' default tablespace '||default_tablespace||'
temporary tablespace '||TEMPORARY_TABLESPACE|| ' profile '||profile||';' from
dba_users@ttslink where DEFAULT_TABLESPACE not in('SYSTEM','SYSAUX'); spool
off |
4.6
迁移后验证
4.6.1
启动第二节点
sqlplus / as
sysdba startup |
4.6.2
检查测试表
select
* from app.test_tab minus select * from app.test_tab@source; |
4.6.3
源端与目标端对象对比
略,由应用侧检查。
4.6.4
编译无效对象
@?/rdbms/admin/utlrp |
4.6.5
收集数据库统计信息
exec
dbms_stats.gather_database_stats(estimate_percent=>30, degree=>96); exec
dbms_stats.gather_dictionary_stats(degree=>96); exec
dbms_stats.gather_fixed_objects_stats(); 开启统计信息自动收集: exec
DBMS_AUTO_TASK_ADMIN.ENABLE(client_name => 'auto optimizer stats
collection',operation => NULL,window_name => NULL); select
client_name,status from dba_autotask_client where client_name='auto optimizer
stats collection';" |
4.7
迁移回退方案
本方案在同时满足以下两个条件时启动:
在数据迁移升级实施阶段中,XTTS过程出现不可解决的技术问题,或者XTTS实际开始时间严重滞后于计划开始时间,使得不可能在计划时间内完成数据迁移升级工作。
紧急回退方案
此次迁移升级采用XTTS方式迁移升级,对原有生产环境不会造成数据的破坏和干扰,如果出现上述意外,中断迁移升级,继续将应用连接至原环境,后续分析迁移升级故障的原因后再择期进行迁移升级工作。
回退步骤:
1、停止目标端数据库集群
srvctl
top crs |
2、源端表空间设为读写
select
tablespace_name,status from dba_tablespaces; alter
tablespace TBS1 read write; alter
tablespace TBS2 read write; …… |
3、源端启动监听
lsnrctl
start LISTENER lsnrctl
stop LISTENER2 |
五、
迁移升级后值守
迁移升级完成之后,根据需求安排工程师值守。
六、
总结
此迁移升级方案详细描述了迁移升级方案整体流程。在客户的积极配合中完成针对数据库的应急环境搭建部署和迁移升级工作。
评论


