| 序号 | 环境 | 步骤说明 | 检查结果 | 详细操作 | GBS | 操作人 | 复核 | ||||
| 1 | OLD | 统一临时表空间 | ALTER
USER GBSLOGTMP temporary tablespace TEMP; ALTER USER GPOLAPETL temporary tablespace TEMP; ALTER USER EGISNBULOGTMP temporary tablespace TEMP; |
select
distinct du.temporary_tablespace from
dba_users du; 都返回temp。 新库新增临时表空间。 create temporary tablespace I3_ORCL_TMP tempfile '+DATA_GBS_DG' size 100m autoextend on; |
no | ||||||
| 2 | 关联库 | 关联数据库TNSNAMES.ORA 更新 | VIP 会切换到新库 ,关联库无需更新IP | ||||||||
| 3 | NEW | 创建X86目标库(新库) | 0、新库按照最新的19C软件安装手册; 1、SCAN监听配置1526/1527/1528 [grid@cnsz083680 ~]$ srvctl modify scan_listener -p tcp:1526/tcp:1527/tcp:1528 [grid@cnsz083680 ~]$ 2、配置一个1530的静态监听给部署使用(每台机器上都创建一个静态监听); GBS1 = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST =10.33.30.209)(PORT = 1530)) ) ) SID_LIST_GBS1 = (SID_LIST = (SID_DESC = (ORACLE_HOME = /paic/app/oracle/rdbms/19c/19.14.0) (SID_NAME = gbs1) ) ) ADR_BASE_GBS1=/paic/stg/oracle/rdbms SUBSCRIBE_FOR_NODE_DOWN_EVENT_GBS1=OFF 备注 USERS表空间使用新名字 users_19c, 避免与要迁移的数据库一致. 如果不小心建了, 可以通过以下命令重命名: alter tablespace users rename to users_19c; 3. 新旧库字符集要求一致并复核 select * from v$nls_parameters a where a.PARAMETER in ('NLS_CHARACTERSET', 'NLS_NCHAR_CHARACTERSET') ; 4. 新旧库block size要求一致并复核 select name ,a.VALUE from v$parameter a where a.Name = 'db_block_size'; 5. 新旧库安装的组件要求一致并复核(确认旧库未使用的组件可以在新库不安装) select COMP_NAME from dba_registry order by 1; select * from dba_feature_usage_statistics where LAST_USAGE_DATE is not null; 6. system,sysaux,temp,undo表空间大小,要求不小于旧库并复核 select df.tablespace_name ,round( sum( df.bytes )/1024/1024)||'M' tbs_size, count(1) file_count from dba_data_files df where df.TABLESPACE_NAME IN( 'SYSTEM','SYSAUX','UNDOTBS1','TEMP','旧库特有TMP和UNDO') group by df.tablespace_name 1. 在提申请时,需特别说明APPMGR、DBMGR、DMLBAK这3个用户不需要创建。同时要特别提醒,新建目标库只分配VIP即可,不分配不配置域名 2、 新旧库字符集要求一致并复核 3. 新旧库block size要求一致并复核 4. 新旧库安装的组件要求一致并复核(确认旧库未使用的组件可以在新库不安装) 5. system,sysaux,temp,undo、USERS_19C表空间大小,要求不小于旧库并复核; 6、调整DB_FILES、db_cache、shared_pool参数; 7、临时关闭job_queue_processes参数; 8、检查新库patch是否符合规范; 9、检查redo文件位置,大小; 10、复制旧库的tnsnames.ora文件; 11、复制旧库的crontab; 12、重新配置好aud$、unified audit相关 @刘用; 13、复制/etc/paic/下的相关脚本,配置 14、检查monitor库、isw库相关; 15、检查ZABBIX监控相关是否正常; 16、修改统计信息的策略,部署19C新的统计信息程序; @新淦、陈晨 17、手动创建lugz0.world的service; 18、提前通知存储备份组做好 rman19c_lugz0/rman19c_lugz0@catalog 新用户的配置; 20、提前处理USERS表空间,RENAME为USERS_19C; 21、19C版本上RHP组件是否已删除; |
yes | |||||||
| 4 | OLD/NEW | 在源库和目标库主机挂载中转临时NAS卷 | 存储空间评估:
DBMS_file_transfer传文件: 源主机 : 一次增备需要的空间 目标主机: 2次增备需要的空间 |
yes | |||||||
| 5 | NEW | 重命名USERS表空间 | alter
tablespace users rename to users_19c; select name from v$tablespace; 如果迁移USERS表空间, 需要在新库创建一个 users_19c的表空间. create tablespace users_19c ; |
yes | |||||||
| 6 | NEW | 建目标端DIR | create
or replace directory DESTDIR as
'+DATA_GBS_DG/GBS/DATAFILE'; select owner,DIRECTORY_NAME,DIRECTORY_PATH from dba_directories where DIRECTORY_NAME='DESTDIR'; |
yes | |||||||
| 7 | NEW | 新库的表空间扩容 | system
19个--2个 sysaux 26个--6个 undo 42个--4*15 temp 45个 |
alter
tablespace system add datafile '+DATA_GBS_DG' size 1g autoextend on maxsize
unlimited; alter tablespace sysaux add datafile '+DATA_GBS_DG' size 1g autoextend on maxsize unlimited; alter tablespace undotbs1 add datafile '+DATA_GBS_DG' size 100m autoextend on maxsize unlimited; alter tablespace undotbs2 add datafile '+DATA_GBS_DG' size 100m autoextend on maxsize unlimited; alter tablespace undotbs3 add datafile '+DATA_GBS_DG' size 100m autoextend on maxsize unlimited; alter tablespace undotbs4 add datafile '+DATA_GBS_DG' size 100m autoextend on maxsize unlimited; alter tablespace temp add tempfile '+DATA_GBS_DG' size 100m autoextend on maxsize unlimited; create tablespace I3_ORCL datafile '+DATA_GBS_DG' size 10m autoextend on maxsize unlimited; create temporary tablespace I3_ORCL_TMP tempfile '+DATA_GBS_DG' size 100m autoextend on maxsize unlimited; |
yes | ||||||
| 8 | OLD | 旧库初始化升级用户
MIGUPS 旧库创建表空间:DBADATA |
cd
/paic/tmp/nasshare/licw/t0gbs/source/script/MIGUPS_init --- 需要根据情况调整脚本 @00_migups.sql -- 默认dbadata表空间 @01_src_create_config_info.sql @02_init_tbs_info.sql @03_init_user_info.sql |
yes | |||||||
| 9 | NEW | 新库初始化环境 | 不能初始化是因为glogin配置 | 先修改sys密码: alter user sys identified by paic1234 account unlock; 然后再tnsname.ora里添加本实例的tnsname。 新库初始化环境 export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK cd /paic/tmp/nasshare3/licw/gbs/target/db_init/1 按照readme的步骤执行 ./db_init.sh egis |
yes | ||||||
| 10 | NEW | 新库安排DROP掉如始化过程中产生的用户; | DROP
user APPMGR cascade; DROP user DBQINTF cascade; DROP user DBMGR cascade; DROP user DMLBAK cascade; DROP user DBMONOPR cascade; DROP user RSMSMONOPR cascade; DROP user AGOPR cascade; DROP user DEPLOYOP cascade; DROP user OVSEE cascade; DROP user DBQRY cascade; DROP user DBCONN cascade; DROP user DBMON cascade; DROP user DBQUA cascade; |
yes | |||||||
| 11 | NEW | 重建VIEW | 19c的BUG 需要重建修复 | 1
新库执行: 重建DBA_JOBS VIEW CREATE OR REPLACE VIEW "SYS"."DBA_JOBS" ("JOB", "LOG_USER", "PRIV_USER", "SCHEMA_USER", "LAST_DATE", "LAST_SEC", "THIS_DATE", "THIS_SEC", "NEXT_DATE", "NEXT_SEC", "TOTAL_TIME", "BROKEN", "INTERVAL", "FAILURES", "WHAT" , "NLS_ENV", "MISC_ENV", "INSTANCE") AS select m.dbms_job_number JOB, j.creator LOG_USER, u.name PRIV_USER, u.name SCHEMA_USER, j.last_start_date LAST_DATE, substr(to_char(j.last_start_date,'HH24:MI:SS'),1,8) LAST_SEC, DECODE(BITAND(j.job_status,2), 2, j.last_start_date, NULL) THIS_DATE, DECODE(BITAND(j.job_status,2), 2, substr(to_char(j.last_start_date,'HH24:MI:SS'),1,8), NULL) THIS_SEC, j.next_run_date NEXT_DATE, substr(to_char(j.next_run_date,'HH24:MI:SS'),1,8) NEXT_SEC, (CASE WHEN j.last_end_date>j.last_start_date THEN ( CAST( j.last_end_date AS DATE ) - CAST( j.last_start_date AS DATE ) ) * 86400 ELSE 0 END) TOTAL_TIME, -- Scheduler does not track total time DECODE(BITAND(j.job_status,1),0,'Y','N') BROKEN, DECODE(BITAND(j.flags,1024+4096+134217728), 0, j.schedule_expr, NULL) INTERVAL, j.failure_count FAILURES, j.program_action WHAT, j.nls_env NLS_ENV, j.env MISC_ENV, NVL(j.instance_id, 0) INSTANCE from sys.scheduler$_dbmsjob_map m left outer join sys.obj$ o on (o.name = m.job_name) left outer join sys.user$ u on (u.name = m.job_owner) left outer join sys.scheduler$_job j on (j.obj# = o.obj#) where o.owner# = u.user# ; |
yes | ||||||
| NEW | 重建vm_concat | 不涉及 | CREATE
OR REPLACE TYPE APPMGR."WM_CONCAT_IMPL" AS
OBJECT -- AUTHID CURRENT_USER AS OBJECT ( CURR_STR clob, STATIC FUNCTION ODCIAGGREGATEINITIALIZE(SCTX IN OUT WM_CONCAT_IMPL) RETURN NUMBER, MEMBER FUNCTION ODCIAGGREGATEITERATE(SELF IN OUT WM_CONCAT_IMPL, P1 IN VARCHAR2) RETURN NUMBER, MEMBER FUNCTION ODCIAGGREGATETERMINATE(SELF IN WM_CONCAT_IMPL, RETURNVALUE OUT clob, FLAGS IN NUMBER) RETURN NUMBER, MEMBER FUNCTION ODCIAGGREGATEMERGE(SELF IN OUT WM_CONCAT_IMPL, SCTX2 IN WM_CONCAT_IMPL) RETURN NUMBER ); / CREATE OR REPLACE TYPE BODY APPMGR."WM_CONCAT_IMPL" IS STATIC FUNCTION ODCIAGGREGATEINITIALIZE(SCTX IN OUT WM_CONCAT_IMPL) RETURN NUMBER IS BEGIN SCTX := WM_CONCAT_IMPL(NULL); RETURN ODCICONST.SUCCESS; END; MEMBER FUNCTION ODCIAGGREGATEITERATE(SELF IN OUT WM_CONCAT_IMPL, P1 IN VARCHAR2) RETURN NUMBER IS BEGIN IF (CURR_STR IS NOT NULL) THEN CURR_STR := CURR_STR || ',' || P1; ELSE CURR_STR := P1; END IF; RETURN ODCICONST.SUCCESS; END; MEMBER FUNCTION ODCIAGGREGATETERMINATE(SELF IN WM_CONCAT_IMPL, RETURNVALUE OUT clob, FLAGS IN NUMBER) RETURN NUMBER IS BEGIN RETURNVALUE := CURR_STR; RETURN ODCICONST.SUCCESS; END; MEMBER FUNCTION ODCIAGGREGATEMERGE(SELF IN OUT WM_CONCAT_IMPL, SCTX2 IN WM_CONCAT_IMPL) RETURN NUMBER IS BEGIN IF (SCTX2.CURR_STR IS NOT NULL) THEN SELF.CURR_STR := SELF.CURR_STR || ',' || SCTX2.CURR_STR; END IF; RETURN ODCICONST.SUCCESS; END; END; / CREATE OR REPLACE FUNCTION APPMGR.WM_CONCAT(P1 VARCHAR2) RETURN clob AGGREGATE USING WM_CONCAT_IMPL; / create public SYNONYM WM_CONCAT for APPMGR.WM_CONCAT; grant EXECUTE on APPMGR.WM_CONCAT_IMPL to PUBLIC; grant EXECUTE on APPMGR.WM_CONCAT to PUBLIC; |
||||||||
| 12 | NEW | db_files设置高于8000 | show parameter db_files | yes | |||||||
| 13 | NEW | 新库主库,同城,远程新建asm目录 (目录名要一致,不能用db_unique_name) | ls
+DATA_GBS_DG/GBS/backupondest ls +DATA_GBS_DG/GBS/DATAFILE |
ls
+DATA_<db_name>_DG/<db_name>/DATAFILE/backupondest ls +DATA_<db_name>_DG/<db_name>/DATAFILE |
yes | ||||||
| 14 | NEW | 全库备份X86 | backup as compressed backupset database format '/paic/tmp/nasshare3/licw/rman/GBS_%U' include current controlfile plus archivelog; | yes | |||||||
| 15 | NEW | Service创建 | srvctl add service -d gbs -s srvp_gbs_egis_hsp -r gbs1,gbs2,gbs3,gbs4 -P basic -e SELECT -m basic -z 200 -w 10 -l
primary srvctl start service -d gbs -s srvp_gbs_egis_hsp show parameter name show parameter db_domain |
yes | |||||||
| 16 | OLD/NEW | 检查旧库和新库是否有app卷以及子目录goldengate是否有,如果没有需提request尽快创建 | |||||||||
| 17 | NEW | 为新库(目标)安装配置好GG软件 | |||||||||
| 18 | OLD | 原生产库启动XTTS专用监听 | 配置一个1521的静态监听;提前测试防火墙; SID_LIST_xttsgbs= (SID_LIST = (SID_DESC = (ORACLE_HOME =/paic/gbs/rdbms/oracle/product/12.1.0) (SID_NAME = gbs) ) ) xttsgbs= (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.33.31.44)(PORT = 1521)) ) ) lsnrctl start xttsgbs lsnrctl status xttsgbs |
yes | |||||||
| 19 | NEW | 在X86新库创建到Solaris主备库的dblink(4个) | GBS create public database link DBLINK_MIGUP connect to MIGUPS identified by MKCI_eCI39_C using '(description =(address = (protocol = tcp)(host = 10.33.31.44)(port = 1526))(connect_data = (service_name = gbs)))'; ---GLDG(GBS_TMP) create public database link DBLINK_MIGUP_GL connect to MIGUPS identified by MKCI_eCI39_C using '(description =(address = (protocol = tcp)(host = 30.88.5.1)(port = 1526))(connect_data = (service_name = gbs)))'; ---GMDG(同城) create public database link DBLINK_MIGUP_GM connect to MIGUPS identified by MKCI_eCI39_C using '(description =(address = (protocol = tcp)(host = 30.88.2.77)(port = 1526))(connect_data = (service_name = gbs)))'; ---WGQDG(远程) create public database link DBLINK_MIGUP_WGQ connect to MIGUPS identified by MKCI_eCI39_C using '(description =(address = (protocol = tcp)(host = 10.44.44.71)(port = 1526))(connect_data = (service_name = gbs)))'; 检查: select instance_name,host_name from v$instance@DBLINK_MIGUP; select instance_name,host_name from v$instance@DBLINK_MIGUP_GL; select instance_name,host_name from v$instance@DBLINK_MIGUP_GM; select instance_name,host_name from v$instance@DBLINK_MIGUP_WGQ; |
yes | |||||||
| 20 | OLD | 源端提前预扩表空间. | |||||||||
| 21 | OLD | 在源库创建Directory对象 指向各自的数据文件放置目录 |
20个目录 | select 'create or replace directory
SRCDIR'||rownum||' as '''||filename||''';' from (select distinct substr(replace(file_name, ' ', ''), 0,instr(replace(file_name, ' ', ''), '/', -1, 1)-1 ) filename from dba_data_files); 运行输出结果 select owner,DIRECTORY_NAME,DIRECTORY_PATH from dba_directories where DIRECTORY_NAME like 'SRCDIR%'; |
yes | ||||||
| 22 | OLD | 检查和记录失效对象,发给开发、运营确认处理 | col
owner for a20 col object_name for a50 col object_type for a20 set pagesize 10000 set linesize 200 select owner,object_name,object_type from dba_objects where status='INVALID'; select owner,object_type,count(*) from dba_objects where status='INVALID' group by owner,object_type; |
48 | 确认失效对象没用清理掉。 | ||||||
| 23 | OLD | 检查外部表 | 删除外部表 | 外部表检查 set serveroutput on declare external boolean; begin external := sys.dbms_tdb.check_external; end; / |
The
following external tables exist in the database: FOGLIGHT.GGSERR_LOG, FOGLIGHT.QSI_ALERT_TAIL_1430600976683, FOGLIGHT.QSI_ALERT_TAIL_1433642334003, FOGLIGHT.QSI_ALERT_TAIL_1445334952031, FOGLIGHT.Q_ALERT_LOG_GBS, FOGLIGHT.QSI_ALERT_TAIL_1449073723913, FOGLIGHT.OSFS The following directories exist in the database: SYS.GL_DIR, SYS.BDUMP_DIR, SYS.GJN0DUMP, SYS.DUMP, SYS.GQD0DUMP, SYS.GHF0DUMP, SYS.QUEST_SOO_ADUMP_DIR, SYS.QUEST_SOO_BDUMP_DIR, SYS.QUEST_SOO_CDUMP_DIR, SYS.QUEST_SOO_UDUMP_DIR, SYS.GWQ0DUMP |
||||||
| 24 | OLD | 检查SYSTEM、SYSAUX对象情况) | SYS检查 select owner, segment_name,segment_type,tablespace_name from dba_segments a where a.tablespace_name in ('TEMP', 'SYSAUX', 'SYSTEM') and a.owner in (select username from migups.s_user_list); |
yes | |||||||
| 25 | OLD | 检查重名的数据文件 提前做MV与RENAME (每日监控) |
1.
登录同城, 远程DG库. 运行以下SQL, 得到file.txt SPOOL文件 set linesize 1000 set pagesize 0 spool file.txt select 'ls -l '||replace(replace(file_name,' ',''), '.dbf', '_'||file_id||'.dbf'), 'mv '||replace(file_name,' ','\ ')||' '||replace(replace(file_name,' ',''), '.dbf', '_'||file_id||'.dbf'), 'ALTER DATABASE RENAME FILE ''' || file_name ||''' TO ''' || replace(replace(file_name,' ',''), '.dbf', '_'||file_id||'.dbf') ||''';' FROM dba_data_files where file_name like '% %' union select 'ls -l '||replace(replace(file_name,' ',''), '.dbf', '_'||file_id||'.dbf'), 'mv '||replace(file_name,' ','\ ')||' '||replace(replace(file_name,' ',''), '.dbf', '_'||file_id||'.dbf'), 'ALTER DATABASE RENAME FILE ''' || file_name ||''' TO ''' || replace(replace(file_name,' ',''), '.dbf', '_'||file_id||'.dbf') ||''';' FROM dba_data_files WHERE upper(substr(replace(file_name, ' ', ''), instr(replace(file_name, ' ', ''), '/', -1, 1) + 1)) IN (select upper(substr(replace(file_name, ' ', ''), instr(replace(file_name, ' ', ''), '/', -1, 1) + 1)) filename from dba_data_files group by upper(substr(replace(file_name, ' ', ''),instr(replace(file_name, ' ', ''), '/', -1, 1) + 1)) having count(1) > 1) ; spool off; 2. CAT SPOOL文件得到脚本; cat file.txt |grep "ls -l /paic" >ls.sh cat file.txt |grep "mv /paic">mv.sh cat file.txt |grep "ALTER DATABASE RENAME FILE '/paic">alter.sql chmod +x ls.sh chmod +x mv.sh 3. 运行ls.sh ./ls.sh 确保返回最后都是: No such file or directory 4. 停止MRG recover managed standby database cancel; 5. 关闭数据库 shutdown immediate; 运行mv.sh ./mv.sh 6. 启动数据库到mount, 并更改数据文件名 startup mount; alter system set standby_file_management=manual; @alter alter system set standby_file_management=auto; alter database open read only; recover managed standby database using current logfile disconnect from session; |
yes | |||||||
| 26 | OLD | 检查迁移的数据库是否含有spatial index | select
* from dba_indexes a where upper(a.index_type)='DOMAIN' or a.ityp_name='SPATIAL_INDEX' and a.owner in (select username from migups.s_user_list); |
yes | |||||||
| 27 | OLD | 检查待迁移表中是否有索引组织表。 | select owner,table_name from dba_tables ab where upper(ab.iot_type) like '%IOT%' and ab.owner in (select username from migups.s_user_list); | yse | |||||||
| 28 | OLD | 检查是否有业务对象在不迁移的表空间上 | select owner,segment_name,segment_type from dba_segments a where a.tablespace_name not in (select tbsname from migups.s_tbs_list ) and a.owner in ( select username from migups.s_user_list); |
yes | |||||||
| 29 | OLD | 检查迁移对象是否是闭包的 | 1:检查迁移用户引用非迁移用户的对象,如果引用的是系统表酌情处理;如果引用的是非系统表则要整改。 col owner for a15 col referenced_owner for a15 col REFERENCED_NAME for a30 col REFERENCED_TYPE for a20 set pagesize 1000 set linesize 200 select owner,referenced_owner,count(*) from dba_dependencies dd where dd.owner in (select username from migups.s_user_list) and dd.referenced_owner not in (select username from migups.s_user_list) and dd.referenced_owner not in ('SYS','SYSTEM','WMSYS','XDB','APPQOSSYS','LBACSYS','AURORA$JIS$UTILITY$','TOAD','DBQUA') and dd.referenced_owner<>'PUBLIC' and dd.referenced_type<>'SYNONYM' group by owner,referenced_owner; ---用户EGISINTF不存在,无需处理 2:检查非迁移用户引用迁移用户的对象,如果存在则与开发运营讨论处理方法。 col owner for a15 col referenced_owner for a15 col REFERENCED_NAME for a30 col REFERENCED_TYPE for a20 set pagesize 1000 set linesize 200 select owner,referenced_owner,count(*) from dba_dependencies dd where dd.type <> 'SYNONYM' and dd.owner not in (select username from migups.s_user_list) and dd.referenced_owner in (select username from migups.s_user_list) and dd.referenced_owner<>'PUBLIC' group by owner,referenced_owner order by 3 desc; |
yes | |||||||
| 30 | OLD | 表空间自包含检查 | SET
SERVEROUTPUT ON declare spaces_names varchar2(4000); begin for ts in (select tbsname from migups.s_tbs_list) loop spaces_names :=spaces_names||','||ts.tbsname; end loop; dbms_output.put_line(substr(spaces_names,2)); spaces_names :=substr(spaces_names,2); sys.dbms_tts.transport_set_check(spaces_names, true); end; / select * from sys.transport_set_violations; |
||||||||
| 31 | OLD | DBA_LINK检查(确保连到旧库都要使用域名) | |||||||||
| 32 | OLD | 检查迁移schema的trigger是否是闭包的 | 1:检查触发器的owner<>table_owner且owner不在迁移列表而table_owner在迁移用户列表的情况,这种触发器需要手工迁移 select * from dba_triggers where owner <> table_owner and owner not in (select username from migups.s_user_list) and table_owner in (select username from migups.s_user_list); 2:检查触发器的owner<>table_owner且owner在迁移用户列表而table_owner不在迁移用户列表的情况,这种触发器视情况决定是否迁移 select OWNER,TRIGGER_NAME,TABLE_OWNER,TABLE_NAME,TRIGGER_TYPE from dba_triggers where owner <> table_owner and owner in (select username from migups.s_user_list) and table_owner not in (select username from migups.s_user_list) and table_owner not like 'COW%' and base_object_type<>'DATABASE'; 3:检查触发器的triggering_event owner'LOGON '且owner在迁移用户列表或table_owner在迁移用户列表的情况,这种触发器expdp不能导出需要手工迁移; select OWNER,TRIGGER_NAME,TABLE_OWNER,TABLE_NAME,TRIGGER_TYPE from dba_triggers where triggering_event = 'LOGON ' and (owner in (select username from migups.s_user_list) or table_owner in (select username from migups.s_user_list)) and table_owner not like 'COW%'; |
||||||||
| 33 | OLD | 检查旧库中是否有业务scheduler存在,这些scheduler也要进行迁移,如果存在有,本步要把迁移scheduler的脚本准备好 | select owner,job_name from dba_scheduler_jobs where owner not in ('SYS','DBMGR'); | yes | |||||||
| 34 | OLD | 检查生产升级时停库时刻是否有时间长的job正要跑 询问运营升级前是否有大批量变更 |
col
elapsed_min for 9999.9 col sid for 99999999999 col serial# for a20 col this_date for a30 col username for a20 select * from (select round((sysdate - a.this_date) * 24 * 60, 2) elapsed_min, a.sid, b.serial#,a.job, a.this_date, b.username From dba_jobs_running a, v$session b where a.sid = b.sid and a.this_date is not null order by 1 desc ) where rownum<5; |
||||||||
| 35 | NEW | 提request给服务交付组,提前预约请他收到邮件通知其立即将DNS切换到新VIP上,并清理缓存 | |||||||||
| 36 | OLD/NEW | 提request给服务交付组,提前预约迁移升级过程后 对旧库冷备和新库rman full备份, 如果旧库是小机,还要预约冻结vcs资源。 | |||||||||
| 37 | OLD | 旧库打FIX导出慢的PATCH | |||||||||
| 38 | OLD | 确保TIGGER都是有属主的 | |||||||||
| 39 | OLD/NEW | 提前导入XTTS固化计划SPM | |||||||||
| 40 | NEW | 提前导入演练过程中固化的SPM | |||||||||
| 41 | NEW | 检查应用到新库的防火墙是否开通 | |||||||||
| 42 | OLD | 检查观澜DG、光明DG、外高桥DG的BCT是否已经开启 | alter database enable block change tracking using file '/paic/EGIS/EGIS/backup/EGIS_block_change_track.log' ; | 验证BCT是否开启: select * from v$block_change_tracking; |
|||||||
| 43 | OLD/NEW | 调整RMAN的默认并行度、调整ARCHIVELOG 清理策略 | 需要检查 DEVICE TYPE 是 DISK ,
备份集不能使用压缩模式(compressed) , 合理的并行度减少RMAN备份时间 CONFIGURE DEVICE TYPE DISK BACKUP TYPE TO BACKUPSET PARALLELISM 16; |
||||||||
| 44 | OLD | 【每天】冻结生产变更,检查是否有新增DB对象 【新增对象处理】-GG检查是否支持GG同步,同步方案确认,回滚方案确认 【新增对象处理】-GG补添加trandata 【新增对象处理】-GG同步参数文件修改(应该是写成动态脚本) 【新增对象处理】-是否支持XTTS(xTTS迁移前的检查再做一次) |
|||||||||
| 45 | OLD | 【每天】检查表空间容量、扩容添加文件按照预案处理 (传输数据文件开始后禁止新建表空间添加数据文件) |
|||||||||
| 46 | OLD | 检查DG环境数据库文件是否异常 | 以下SQL应返回0行: set linesize 1000 col name for a20 col DNAME for a40 col fname for a30 col CHECKPOINT_CHANGE# for 999999999999999 col STATUS for a30 SELECT TS#, NAME, DF.DNAME DNAME, DF.FNAME, FILE#, CHECKPOINT_CHANGE#,dF.STATUS FROM (SELECT /*+ LEADING(t.x$kccts) USE_HASH(d.df) FULL(t.x$kccts) FULL(d.df) USE_HASH(d.fe) USE_HASH(d.fn) USE_HASH(d.fh) LEADING(d.fe d.fn d.fh) */ ROW_NUMBER() OVER(PARTITION BY D.TS# ORDER BY FILE#) RN, MIN(CASE WHEN (ENABLED = 'READ WRITE' OR 'Y' = 'Y') AND STATUS = 'ONLINE' THEN D.TS# ELSE -D.TS# END) OVER(PARTITION BY D.TS#) TS#, T.NAME, REGEXP_REPLACE(D.NAME, '(.*)/(.*)', '\1') DNAME, REGEXP_REPLACE(D.NAME, '(.*)/(.*)', '\2') FNAME, FILE#, MIN(CHECKPOINT_CHANGE#) OVER(PARTITION BY D.TS#) CHECKPOINT_CHANGE#,d.STATUS FROM GV$DATAFILE D, V$TABLESPACE T WHERE D.TS# = T.TS# AND D.INST_ID = USERENV('INSTANCE') ) DF WHERE ts#<0 ORDER BY TS#, RN; |
yes | |||||||
| 47 | OLD/NEW | 【每天】检查新旧生产、同城、远程DG同步正常 | 验证PROCES是否正常.
: select process,status,sequence# from v$managed_standby; 验证间隔: select INST_ID,PROCESS,STATUS,THREAD#,SEQUENCE# ,DELAY_MINS from gv\$managed_standby where process like 'MRP%'; |
||||||||
| 48 | OLD/NEW | 【每天】XTTS增备前检查旧生产、同城、远程DG同步正常,lag及时处理 | 验证PROCES是否正常.
: select process,status,sequence# from v$managed_standby; 验证间隔: select INST_ID,PROCESS,STATUS,THREAD#,SEQUENCE# ,DELAY_MINS from gv\$managed_standby where process like 'MRP%'; |
||||||||
| 49 | OLD/NEW | 【每天】3套环境XTTS增备正常、记录增备时长、异常及时升级 | |||||||||
| 50 | OLD/NEW | 复核OGG迁移、回退相关的链路、脚本都正常运行 | |||||||||
| 51 | OLD | 更改旧库隐含参数, 避免增量备份过慢 | alter system set "_disable_primary_bitmap_switch"=true scope=both; | ||||||||
| 52 | OLD | 安排变更对生产进行一次全库坏块检查 @rman_validate.sh 3) select * from V$DATABASE_BLOCK_CORRUPTION ; 4) If V$DATABASE_BLOCK_CORRUPTION contains rows please run this query to find the objects that contains the corrupted blocks: SELECT e.owner, e.segment_type, e.segment_name, e.partition_name, c.file#, greatest(e.block_id, c.block#) corr_start_block#, least(e.block_id + e.blocks - 1, c.block# + c.blocks - 1) corr_end_block#, least(e.block_id + e.blocks - 1, c.block# + c.blocks - 1) - greatest(e.block_id, c.block#) + 1 blocks_corrupted, null description FROM dba_extents e, v$database_block_corruption c WHERE e.file_id = c.file# AND e.block_id <= c.block# + c.blocks - 1 AND e.block_id + e.blocks - 1 >= c.block# UNION SELECT s.owner, s.segment_type, s.segment_name, s.partition_name, c.file#, header_block corr_start_block#, header_block corr_end_block#, 1 blocks_corrupted, 'Segment Header' description FROM dba_segments s, v$database_block_corruption c WHERE s.header_file = c.file# AND s.header_block between c.block# and c.block# + c.blocks - 1 UNION SELECT null owner, null segment_type, null segment_name, null partition_name, c.file#, greatest(f.block_id, c.block#) corr_start_block#, least(f.block_id + f.blocks - 1, c.block# + c.blocks - 1) corr_end_block#, least(f.block_id + f.blocks - 1, c.block# + c.blocks - 1) - greatest(f.block_id, c.block#) + 1 blocks_corrupted, 'Free Block' description FROM dba_free_space f, v$database_block_corruption c WHERE f.file_id = c.file# AND f.block_id <= c.block# + c.blocks - 1 AND f.block_id + f.blocks - 1 >= c.block# order by file#, corr_start_block#; SELECT tablespace_name, segment_type, owner, segment_name FROM dba_extents WHERE file_id = &fileid and &blockid between block_id AND block_id + blocks - 1; |
|||||||||
| 53 | OLD | 检查各表空间的使用率,及时添加数据文件 | SET
LINESIZE 200 SET PAGESIZE 100 COLUMN TOTAL_BYTES FORMAT 999,999,999,999 COLUMN USED FORMAT 999,999,999,999 COLUMN FREE FORMAT 999,999,999,999 SELECT A.TABLESPACE_NAME,ROUND(FILE_USAGE/1024/1024) TOTAL_M,ROUND(NVL(FILE_USAGE-FREESPACE,0)/1024/1024) USED_M, ROUND(NVL(FREESPACE,0)/1024/1024) FREE_M,ROUND(NVL((FILE_USAGE-FREESPACE),0)/A.FILE_USAGE*100,2) USED_RATE, ROUND(E.EXTENDABLE_SPACE/1024/1024) EXTENDABLE_M,ROUND(EXTENDABLE_SPACE/FILE_USAGE*100,2) EXTANDABLE_RATE, ROUND((FREESPACE+EXTENDABLE_SPACE)/FILE_USAGE*100,2) ALL_FREE_RATE FROM (SELECT TABLESPACE_NAME,SUM(BYTES) FREESPACE FROM DBA_FREE_SPACE GROUP BY TABLESPACE_NAME ) F, ( SELECT TABLESPACE_NAME,SUM(BYTES) FILE_USAGE FROM SYS.DBA_DATA_FILES GROUP BY TABLESPACE_NAME ) A, (SELECT TABLESPACE_NAME ,CASE WHEN (SUM(MAXBYTES)-SUM(BYTES))<0 THEN 0 ELSE (SUM(MAXBYTES)-SUM(BYTES)) END EXTENDABLE_SPACE FROM DBA_DATA_FILES WHERE AUTOEXTENSIBLE='YES' GROUP BY TABLESPACE_NAME) E WHERE E.TABLESPACE_NAME(+)=F.TABLESPACE_NAME AND F.TABLESPACE_NAME(+)=A.TABLESPACE_NAME UNION ALL SELECT NULL ,SUM(FILE_USAGE)/1024/1024 TOTAL_M,SUM(NVL(FILE_USAGE-FREESPACE,0))/1024/1024 USED_M,SUM(NVL(FREESPACE,0))/1024/1024 FREE_M,ROUND(SUM(NVL((FILE_USAGE-FREESPACE),0))/SUM(A.FILE_USAGE)*100,2) USED_PCT,NULL,NULL ,NULL ALL_FREE_RATE FROM (SELECT TABLESPACE_NAME,SUM(BYTES) FREESPACE FROM DBA_FREE_SPACE GROUP BY TABLESPACE_NAME ) F, ( SELECT TABLESPACE_NAME,SUM(BYTES) FILE_USAGE FROM SYS.DBA_DATA_FILES GROUP BY TABLESPACE_NAME ) A WHERE F.TABLESPACE_NAME(+)=A.TABLESPACE_NAME ORDER BY ALL_FREE_RATE; |
||||||||
| 54 | OLD/NEW | 准备XTTS脚本 | 观澜, 光明: 解压到
/paic/tmp/nasshare3/licw/gbs 外高桥解压到 /paic/tmp/nasshare3/licw/gbs |
||||||||
| 55 | OLD | 执行准备脚本,
生成DBMS_file_transfer传文件脚本 /bin/rm -rf /paic/tmp/nasshare3/licw/gbs/source/xtts/tmpdir/FAILED |
cd
/paic/tmp/nasshare3/licw/gbs ./s.sh ./sgm.sh ./swgq.sh 选择 xtts_prepare 3 cd /paic/tmp/nasshare3/licw/gbs/source/xtts/xtts vi prepare_transfer.sh TMPDIR=/paic/tmp/nasshare3/licw/gbs/source/tmpdir XTTDEBUG=1 export TMPDIR XTTDEBUG cd ./xtts $ORACLE_HOME/perl/bin/perl xttdriver.pl -S nohup sh prepare_transfer.sh >prepare_transfer.log 2>&1 & 在TMPDIR目录下产生两个后续要用到的文件: xttnewdatafiles.txt,getfile.sql cp /paic/tmp/nasshare3/licw/gbs/source/xtts/tmpdir/getfile.sql /paic/tmp/nasshare3/licw/gbs/target/tmpdir/getfile.sql cp /paic/tmp/nasshare3/licw/gbs/source/xtts/tmpdir/xttnewdatafiles.txt /paic/tmp/nasshare3/licw/gbs/target/tmpdir/xttnewdatafiles.txt |
||||||||
| 56 | NEW | DBMS_file_transfer传文件 /bin/rm -rf /paic/tmp/nasshare3/licw/gbs/target/tmpdir/FAILED |
cd
/paic/tmp/nasshare3/licw/gbs ./t.sh ./tgm.sh ./twgq.sh 选择 xtts_getfiles 1 mkdir -p /paic/tmp/nasshare3/licw/gbs/target/tmpdir cd /paic/tmp/nasshare3/licw/gbs/target/xtts vi do_getfile.sh TMPDIR=/paic/tmp/nasshare3/licw/gbs/target/tmpdir XTTDEBUG=1 export TMPDIR XTTDEBUG cd ./xtts $ORACLE_HOME/perl/bin/perl xttdriver.pl -G nohup sh do_getfile.sh >do_getfile.log 2>&1 & |
||||||||
| 57 | NEW | 检查传输进度情况 | cd
/paic/tmp/nasshare3/licw/gbs ./t.sh ./tgm.sh ./twgq.sh 选择 check_xtts_getfiles 2 |
||||||||
| 58 | OLD | 检查是否开启BCT 检查RMAN的并行度 |
SQL>
select * from v$block_change_tracking; 使用如下开始BCT (目录自行创建好): SQL> alter database enable block change tracking using file ; RMAN> show all; (源端、目标端都要调整) RMAN> CONFIGURE DEVICE TYPE DISK BACKUP TYPE TO BACKUPSET PARALLELISM 16; |
||||||||
| 59 | OLD | 在源库执行增备 | cd
/paic/tmp/nasshare3/licw/gbs ./s.sh ./sgm.sh ./swgq.sh 选择 xtts_incr_backup 5 检查进度: check_xtts_incr_backup 6 确认增备完成后 选择 xtts_incr_update_from_scn 以更新下次增备的起点 |
||||||||
| 60 | NEW | /bin/rm
-rf /paic/tmp/nasshare3/licw/gbs/target/tmpdir/FAILED X86目标库做应用增备恢复 /bin/rm -rf /paic/tmp/nasshare3/licw/gbs/source/xtts/incr/* /bin/rm -rf /paic/tmp/nasshare3/licw/gbs/source/xtts/incr/* |
X86目标库做应用增备恢复 cp /paic/tmp/nasshare3/licw/gbs/source/xtts/tmpdir/tsbkupmap.txt /paic/tmp/nasshare3/licw/gbs/target/tmpdir/tsbkupmap.txt cp tsbkupmap.txt /paic/tmp/nasshare3/licw/gbs/target/tmpdir cp /paic/tmp/nasshare3/licw/gbs/source/xtts/incr/* /paic/tmp/nasshare3/licw/gbs/source/xtts/incr cd /paic/tmp/nasshare3/licw/gbs ./t.sh ./tgm.sh ./twgq.sh 选择: apply_incr_backup 3 检查: check_apply_incr_backup 4 cd /paic/tmp/nasshare3/licw/gbs/target/xtts vi apply_incr.sh TMPDIR=/paic/tmp/nasshare3/licw/gbs/target/tmpdir XTTDEBUG=1 export TMPDIR XTTDEBUG cd ./xtts $ORACLE_HOME/perl/bin/perl xttdriver.pl -r nohup sh apply_incr.sh >apply_incr.log 2>&1 & |
apply_incr_backup
目标生产库无法执行 ---无法挂载同一个nas卷 |
|||||||
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




