遷移式升級的測試(三)
還是繼續昨天的任務,今天會把剩下的工作都做完,給個交代。
昨天完成了Data Guard切換,然後Failover備庫,匯出了後設資料資訊作為TTS的準備,亮點就在於匯入的部分。無需挪動資料檔案,這是補充資料字典資訊即可。
這個工作的一個重點內容就是如何保證資料字典資訊的完整性。
在目標環境11g中需要建立相應的使用者,這一點還是很有技巧的。如果採用impdp的形式直接匯入使用者,這樣不妥,因為我們有設定profile,有臨時表空間,預設表空間的資訊。
比如下面的使用者建立語句:
CREATE USER "TEST" IDENTIFIED BY VALUES '5F712A8369686639'
DEFAULT TABLESPACE "TEST_DATA"
TEMPORARY TABLESPACE "TEMP"
PROFILE "PF_TEST" ;
如果直接匯入肯定會失敗,因為預設表空間不存在,profile還沒有建立。
建議的方式就是手工來完成,這樣做的好處就是一次稽核透過,正式環境直接執行即可。
如果手工建立,這就牽扯到另外一個問題,那就是對比兩個庫中的使用者資訊,源庫中有100多個使用者,目標庫11g的環境有預設的資料庫使用者,需要排除。
可以使用如下的指令碼來過濾。
10g環境執行得到一個列表
spool 10g_user.lst
set feedback off
set pages 0
select username from dba_users;
spool off
11g環境執行得到一個列表
spool 11g_user.lst
set feedback off
set pages 0
select username from dba_users;
spool off
然後對比即可。
sort 10g_user.lst |awk '{print $1}'> 10g_users.lst
sort 11g_user.lst |awk '{print $1}'> 11g_users.lst
sdiff 10g_users.lst 11g_users.lst |less
不過還是實踐中的對比和感悟,發現其實還有一個小竅門,那就是直接抽段,使用如下的語句即可快速得到一個列表。
select owner from dba_segments group by owner;
100多個使用者的資料庫環境,上面的語句會查得不到20個使用者,逐一排除都綽綽有餘。
這樣使用者列表的任務就搞定了。可以使用如下的語句得到使用者的DDL語句,然後在這個基礎上改動臨時表空間,預設表空間資訊。
select dbms_metadata.get_ddl('USER',u.username) ||';'from dba_users u WHERE USERNAME in ('OEM_MON','APP_TE_SDE','GHOSTOL','TE_GAMEUSER','JYCX','OG_SWORD','TEST','OG_GAMEUSER','PERFSTAT');
得到的語句類似下面的形式,我們簡稱為create_user.sql
CREATE USER "TE_GAMEUSER" IDENTIFIED BY VALUES 'E62AFD5FC9ED1DD2'
TEMPORARY TABLESPACE "TEMP"
PROFILE "PF_TE_GAMEUSER"
這個時候還有幾個小問題,profile的資訊怎麼解決,也是生成DDL,其實也可以換個方法,那就是impdp
先在11g的庫中建立一個目錄。
CREATE DIRECTORY EXT_DIR AS '/export/home/oracle/HF';
然後匯入profile資訊即可。
$ impdp \'sys/oracle as sysdba\' dumpfile=full_exclude_tab.dmp logfile=full_ddl.log directory=EXT_DIR include=PROFILE CONTENT=METADATA_ONLY
然後執行create_user.sql語句即可。
這樣倒入資料字典的使用者資訊就準備好了。
我們停止10g的主庫,把資料檔案都釋放出來。
建立一個parfile,類似下面的形式:
tablespaces=USERS,GHOSTOL_DATA,GHOSTOL_INDEX,TEST_DATA,TEST_INDEX,PERFSTAT,STAT_POINT,TEST_MV_DATA,TEST_MV_INDEX,TEST_AUDIT_DATA,JYCX_DATA,OEM_DATA,TEST_INDEX2,TEST_INDEX3,SWDONLINE_DATA,SWDONLINE_INDX,STORELOG_DATA,STORELOG_INDX,OEM_MON_TEST,USERCENTER_DATA
datafiles=/U01/app/oracle/oradata/TEST/stat_point_01.dbf
,/U01/app/oracle/oradata/TEST/TEST_mv_data_01.dbf
,/U01/app/oracle/oradata/TEST/users01.dbf
,/U01/app/oracle/oradata/TEST/ghostol_data01.dbf
,/U01/app/oracle/oradata/TEST/ghostol_index01.dbf
。。。
然後使用如下的方式匯入即可。
imp \'sys/oracle as sysdba\' file=exp_tts_TEST.dmp transport_tablespace= y log=imp_tts_TEST.log parfile=datafiles.par
當然也不是一帆風順,有一個小問題需要注意。那就是預設表空間USERS已存在,我們需要刪除已有的USERS表空間,重置預設表空間,比如我們建立一個表空間中轉一下。
> create tablespace def_ts datafile '/U03/app/oracle/oradata/TEST/default_ts.dbf' size 10M;
> alter database default tablespace def_ts;
> drop tablespace users including contents and datafiles cascade constraint;
因為涉及的資料檔案很多,如果有遺漏,不匹配,需要格外注意。
IMP-00017: following statement failed with ORACLE error 29347:
"BEGIN sys.dbms_plugts.beginImpTablespace('TS_AUDIT',10,'SYS',1,0,8192,1,2"
"28967869732,1,2147483645,8,128,8,0,1,0,8,1434590011,1,33,68705469137,NULL,0"
",0,NULL,NULL); END;"
IMP-00003: ORACLE error 29347 encountered
ORA-29347: Tablespace name validation failed - failed to match tablespace 'TS_AUDIT'
ORA-06512: at "SYS.DBMS_SYS_ERROR", line 86
ORA-06512: at "SYS.DBMS_PLUGTS", line 1876
ORA-06512: at line 1
IMP-00000: Import terminated unsuccessfully
這個問題就是資料檔案資訊存在,但是匯入的tablespaces引數卻不完整,就會出現這類問題。
匯入的過程很快,可以從日誌進度看出。用不了幾分鐘。
完成之後,一個大工程總算完成了,還有補充的任務就是匯入其它的DDL資訊,這個可以impdp的形式全庫匯入即可。也就3分鐘就完事了。
impdp \'sys/oracle as sysdba\' dumpfile=full_exclude_tab.dmp logfile=full_ddl_impdp.log directory=EXT_DIR full=Y CONTENT=METADATA_ONLY
Job "SYS"."SYS_IMPORT_FULL_01" completed with 270 error(s) at Wed Sep 28 16:33:35 2016 elapsed 0 00:03:09
看起來整個過程還是非常平滑的,後續的就是問題跟蹤和統計資訊收集了,這些都可以按照計劃來補充,可以線上完成。
然後驚訝的是11g的庫遷移完之後,停掉11g的庫,重新開啟10g的庫,竟然還可以開啟,這是不是一種更加平滑的資料庫升級,降級。
實踐總結總是會讓人有不一樣的感觸和所得,不要相信自己的記憶力,為了方便自己,受益更多的人,還是好記星不如爛筆頭。
昨天完成了Data Guard切換,然後Failover備庫,匯出了後設資料資訊作為TTS的準備,亮點就在於匯入的部分。無需挪動資料檔案,這是補充資料字典資訊即可。
這個工作的一個重點內容就是如何保證資料字典資訊的完整性。
在目標環境11g中需要建立相應的使用者,這一點還是很有技巧的。如果採用impdp的形式直接匯入使用者,這樣不妥,因為我們有設定profile,有臨時表空間,預設表空間的資訊。
比如下面的使用者建立語句:
CREATE USER "TEST" IDENTIFIED BY VALUES '5F712A8369686639'
DEFAULT TABLESPACE "TEST_DATA"
TEMPORARY TABLESPACE "TEMP"
PROFILE "PF_TEST" ;
如果直接匯入肯定會失敗,因為預設表空間不存在,profile還沒有建立。
建議的方式就是手工來完成,這樣做的好處就是一次稽核透過,正式環境直接執行即可。
如果手工建立,這就牽扯到另外一個問題,那就是對比兩個庫中的使用者資訊,源庫中有100多個使用者,目標庫11g的環境有預設的資料庫使用者,需要排除。
可以使用如下的指令碼來過濾。
10g環境執行得到一個列表
spool 10g_user.lst
set feedback off
set pages 0
select username from dba_users;
spool off
11g環境執行得到一個列表
spool 11g_user.lst
set feedback off
set pages 0
select username from dba_users;
spool off
然後對比即可。
sort 10g_user.lst |awk '{print $1}'> 10g_users.lst
sort 11g_user.lst |awk '{print $1}'> 11g_users.lst
sdiff 10g_users.lst 11g_users.lst |less
不過還是實踐中的對比和感悟,發現其實還有一個小竅門,那就是直接抽段,使用如下的語句即可快速得到一個列表。
select owner from dba_segments group by owner;
100多個使用者的資料庫環境,上面的語句會查得不到20個使用者,逐一排除都綽綽有餘。
這樣使用者列表的任務就搞定了。可以使用如下的語句得到使用者的DDL語句,然後在這個基礎上改動臨時表空間,預設表空間資訊。
select dbms_metadata.get_ddl('USER',u.username) ||';'from dba_users u WHERE USERNAME in ('OEM_MON','APP_TE_SDE','GHOSTOL','TE_GAMEUSER','JYCX','OG_SWORD','TEST','OG_GAMEUSER','PERFSTAT');
得到的語句類似下面的形式,我們簡稱為create_user.sql
CREATE USER "TE_GAMEUSER" IDENTIFIED BY VALUES 'E62AFD5FC9ED1DD2'
TEMPORARY TABLESPACE "TEMP"
PROFILE "PF_TE_GAMEUSER"
這個時候還有幾個小問題,profile的資訊怎麼解決,也是生成DDL,其實也可以換個方法,那就是impdp
先在11g的庫中建立一個目錄。
CREATE DIRECTORY EXT_DIR AS '/export/home/oracle/HF';
然後匯入profile資訊即可。
$ impdp \'sys/oracle as sysdba\' dumpfile=full_exclude_tab.dmp logfile=full_ddl.log directory=EXT_DIR include=PROFILE CONTENT=METADATA_ONLY
然後執行create_user.sql語句即可。
這樣倒入資料字典的使用者資訊就準備好了。
我們停止10g的主庫,把資料檔案都釋放出來。
建立一個parfile,類似下面的形式:
tablespaces=USERS,GHOSTOL_DATA,GHOSTOL_INDEX,TEST_DATA,TEST_INDEX,PERFSTAT,STAT_POINT,TEST_MV_DATA,TEST_MV_INDEX,TEST_AUDIT_DATA,JYCX_DATA,OEM_DATA,TEST_INDEX2,TEST_INDEX3,SWDONLINE_DATA,SWDONLINE_INDX,STORELOG_DATA,STORELOG_INDX,OEM_MON_TEST,USERCENTER_DATA
datafiles=/U01/app/oracle/oradata/TEST/stat_point_01.dbf
,/U01/app/oracle/oradata/TEST/TEST_mv_data_01.dbf
,/U01/app/oracle/oradata/TEST/users01.dbf
,/U01/app/oracle/oradata/TEST/ghostol_data01.dbf
,/U01/app/oracle/oradata/TEST/ghostol_index01.dbf
。。。
然後使用如下的方式匯入即可。
imp \'sys/oracle as sysdba\' file=exp_tts_TEST.dmp transport_tablespace= y log=imp_tts_TEST.log parfile=datafiles.par
當然也不是一帆風順,有一個小問題需要注意。那就是預設表空間USERS已存在,我們需要刪除已有的USERS表空間,重置預設表空間,比如我們建立一個表空間中轉一下。
> create tablespace def_ts datafile '/U03/app/oracle/oradata/TEST/default_ts.dbf' size 10M;
> alter database default tablespace def_ts;
> drop tablespace users including contents and datafiles cascade constraint;
因為涉及的資料檔案很多,如果有遺漏,不匹配,需要格外注意。
IMP-00017: following statement failed with ORACLE error 29347:
"BEGIN sys.dbms_plugts.beginImpTablespace('TS_AUDIT',10,'SYS',1,0,8192,1,2"
"28967869732,1,2147483645,8,128,8,0,1,0,8,1434590011,1,33,68705469137,NULL,0"
",0,NULL,NULL); END;"
IMP-00003: ORACLE error 29347 encountered
ORA-29347: Tablespace name validation failed - failed to match tablespace 'TS_AUDIT'
ORA-06512: at "SYS.DBMS_SYS_ERROR", line 86
ORA-06512: at "SYS.DBMS_PLUGTS", line 1876
ORA-06512: at line 1
IMP-00000: Import terminated unsuccessfully
這個問題就是資料檔案資訊存在,但是匯入的tablespaces引數卻不完整,就會出現這類問題。
匯入的過程很快,可以從日誌進度看出。用不了幾分鐘。
完成之後,一個大工程總算完成了,還有補充的任務就是匯入其它的DDL資訊,這個可以impdp的形式全庫匯入即可。也就3分鐘就完事了。
impdp \'sys/oracle as sysdba\' dumpfile=full_exclude_tab.dmp logfile=full_ddl_impdp.log directory=EXT_DIR full=Y CONTENT=METADATA_ONLY
Job "SYS"."SYS_IMPORT_FULL_01" completed with 270 error(s) at Wed Sep 28 16:33:35 2016 elapsed 0 00:03:09
看起來整個過程還是非常平滑的,後續的就是問題跟蹤和統計資訊收集了,這些都可以按照計劃來補充,可以線上完成。
然後驚訝的是11g的庫遷移完之後,停掉11g的庫,重新開啟10g的庫,竟然還可以開啟,這是不是一種更加平滑的資料庫升級,降級。
實踐總結總是會讓人有不一樣的感觸和所得,不要相信自己的記憶力,為了方便自己,受益更多的人,還是好記星不如爛筆頭。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23718752/viewspace-2125723/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 遷移式升級的測試
- 遷移式升級的測試(二)
- 測試環境的遷移式升級和資料整合
- 遷移式升級的一點思考
- datapump跨平臺升級遷移的對比測試和優化優化
- 一種遷移式升級的方案考慮
- SQL Server升級和遷移的三個技巧GZSQLServer
- datapump跨平臺升級遷移的對比測試和最佳化
- 同位元組序跨平臺資料庫遷移和升級的測試資料庫
- expdp 遷移測試
- 行遷移測試
- 資料庫的升級及遷移資料庫
- Grafana的版本升級和資料遷移Grafana
- gitlab安裝/遷移/升級流程Gitlab
- datapump跨平臺升級遷移的總結
- Oracle rman duplicate遷移測試Oracle
- PostMan newman測試介面遷移Postman
- Android O 遷移測試:RoomAndroidOOM
- svn版本升級遷移和異地備份
- 資料庫的建立、遷移、升級和流等方面資料庫
- 行遷移測試實驗(轉載)
- iOS CoreData (二) 版本升級和資料庫遷移iOS資料庫
- weblogic版本升級遷移需要注意事項Web
- SAP系統升級,如何做資料遷移?
- expdp/impdp跨版本升級遷移問題總結
- 如何將.Net SOE遷移升級到10.1上
- ERP升級:如何做好資料遷移(轉)
- Azure ASM到ARM遷移 (三) Reserved IP的遷移ASM
- Oracle資料庫升級或資料遷移的方法探討Oracle資料庫
- 【XTTS】Oracle XTTS V4--Oracle11.2.0.4+ 遷移升級TTSOracle
- 最全weblogic升級與遷移改造常見問題Web
- oracle upgrade 升級前測試,升級後穩定計劃Oracle
- 百萬級資料遷移方案測評小記
- 【版本升級】PerfDog新增多維度測試報告對比功能、iOS電量測試功能升級測試報告iOS
- Core Data資料遷移及單元測試
- 遷移或升級後你應該如何調整你的資料
- CentOS 停止維護,一文看懂升級遷移路徑CentOS
- 淺談測試生涯如何轉型升級