暂无图片
暂无图片
8
暂无图片
暂无图片
3
暂无图片

XTTS跨版本迁移升级方案(11g to 19c RAC for Linux)

原创 zwtian 2025-04-08
369

一、 概述

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原生的XTTSRMAN Backup)方式对DB11G数据库完成从现有环境到新环境的迁移升级工作。

本方案力求做到:计划周密、步骤可行、协调指挥、安全第一。为保证万无一失,必须制定数据迁移升级回退方案,在数据迁移升级过程中出现任何意外而不能在计划时间内完成迁移升级,可即时启动回退方案。

3.5           迁移升级时间进度表

 

项目协调会,确认实施计划及实施内容

 

准备目标数据库RAC环境

准备迁移升级方案

 

测试整个迁移升级方案。

预估迁移升级时间

编写实施报告

 

应用测试

 

正式迁移升级

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');
select count(*) from dba_users@ttslink where created > to_date('2017-03-22 10:00:00','YYYY-MM-DD HH24:MI:SS');
select count(*) from dba_data_files@ttslink where tablespace_name not in ('SYSTEM', 'SYSAUX', 'UNDOTBS1', 'UNDOTBS2', 'TEMP');
select TABLESPACE_NAME,STATUS from dba_tablespaces@ttslink where tablespace_name not in ('SYSTEM', 'SYSAUX', 'UNDOTBS1', 'UNDOTBS2', 'TEMP');
select distinct status from v$datafile@ttslink;

 

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');
select count(*) from dba_users@ttslink where created > to_date('2017-03-22 10:00:00','YYYY-MM-DD HH24:MI:SS');
select count(*) from dba_data_files@ttslink where tablespace_name not in ('SYSTEM', 'SYSAUX', 'UNDOTBS1', 'UNDOTBS2', 'TEMP');
select TABLESPACE_NAME,STATUS from dba_tablespaces@ttslink where tablespace_name not in ('SYSTEM', 'SYSAUX', 'UNDOTBS1', 'UNDOTBS2', 'TEMP');
select distinct status from v$datafile@ttslink;

 

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进程:
su - oracle

lsnrctl stop

ps -ef|grep LOCAL=NO|awk '{print $2}'|xargs kill -9
检查是否存在回滚事务:
sqlplus / as sysdba
SQL>@transaction.txt
执行系统检查点:
alter system  checkpoint;
alter system switch logfile;
alter system switch logfile;
alter system switch logfile;

新增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');
select count(*) from dba_users@ttslink where created > to_date('2017-03-22 10:00:00','YYYY-MM-DD HH24:MI:SS');
select count(*) from dba_data_files@ttslink where tablespace_name not in ('SYSTEM', 'SYSAUX', 'UNDOTBS1', 'UNDOTBS2', 'TEMP');
select TABLESPACE_NAME,STATUS from dba_tablespaces@ttslink where tablespace_name not in ('SYSTEM', 'SYSAUX', 'UNDOTBS1', 'UNDOTBS2', 'TEMP');
select distinct status from v$datafile@ttslink;

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;
select * from app.test_tab@source minus select * from app.test_tab;

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

 

五、        迁移升级后值守

迁移升级完成之后,根据需求安排工程师值守。

 

六、        总结

此迁移升级方案详细描述了迁移升级方案整体流程。在客户的积极配合中完成针对数据库的应急环境搭建部署和迁移升级工作。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

怀
怀念和想念
暂无图片
5天前
评论
暂无图片 0
XTTS跨版本迁移升级方案(11g to 19c RAC for Linux)
5天前
暂无图片 点赞
评论
Z
zlztshan
暂无图片
7天前
评论
暂无图片 0
xtts什么版本,可以分享下吗
7天前
暂无图片 点赞
评论
淡定
暂无图片
7天前
评论
暂无图片 0
XTTS跨版本迁移升级方案(11g to 19c RAC for Linux)
7天前
暂无图片 点赞
评论