使用遷移表空間遷移數據--Transportable Tablespaces

        今天又一同事讓我幫忙說現在服務器的主板換了,說想把oracle的數據遷移到別人服務器上,讓我幫忙,使用imp/exp或者是impdp/expdp這種效率有點低,所以研究下傳輸表空間做數據的遷移,先將研究過程記錄如下:

        一、實現原理:

                1、使用export或者是Pump export數據泵將需要操作的表空間中的對象的元數據導出(Metadata);

                2、將表空間對應的數據文件和剛剛導出的文件複製到目標服務器上;

                3、再將表空間的對象元數據imp/impdp導入到目標數據庫上;

               注:我自己覺得,沒查找資料,元數據應該是類似對象的一些定義,那麼我們做數據遷移,不關要做數據對象的遷移,還有數據,那麼數據是存放到數據文件中的,定義是存放在system下的,所以,我們導出元數據是導出數據對象,導出數據是複製數據文件,因爲元數據只還有對象的定義,所以應該很小,所以導出很快,這樣tts的速度上可以提升不少;

 

       二、使用條件:

               1、跨系統的要求;

                從oracle10g版本以後,傳輸表空間可以跨系統,可以同過v$transportable_platform視圖查詢,例如:

 

其中endian_format是自己順序,及處理和存儲的順序,要想傳輸表空間,要兩個系統的endian_format相同,否則要轉化endian_format;

         2、在傳輸表空間前,要被傳輸的表空間必須處於read only的狀態,如果是生產庫可以使用RMAN,這裏不研究;alter tabespace *** read only;

         3、源庫和目標庫的本地字符集和國家字符集必須相同;

         4、被傳輸的表空間如果還有XMLTypes,在導出元數據的時候必須使用exp,不能使用expdp,且constraints和triggers參數必須設置成Y;

               可以使用

                              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;查詢哪些表空間中還有XMLTypes

         5、不能傳輸system和sys擁有的默認表空間;

         6、表空間爲自包含表空間;

  

         三、實戰操作:     

              1、確定平臺是否支持,及endian format,我們可以使用

                    select d.name,i.version,d.platform_name,endian_format from
                               v$transportable_platform tp,v$database d,v$instance i
                    where tp.platform_name=d.platform_name and d.name=upper(i.instance_name);

                   --怎麼轉化字節順序

               2、選擇自包含表空間集

                    如何判斷表空間是否是自包含的呢,我們可以使用DBMS_TTS包來驗證,使用DBMS_TTS必須擁有execute_catalog_role或者是DBA的權限;

                   表空間的自包含有兩種檢驗方式:

                   1、非嚴格方式:檢查待傳輸表空間中對象,是否引用了其他未被傳輸的表空間中的對象;

                   2、嚴格方式:在非嚴格的基礎上,還要檢查是否被其他未傳輸的表空間的對象引用,

                   使用DBMS_TTS的默認情況下是非嚴格方式, 執行完之後可以使用transport_set_violations視圖查看是否有引用的對象,例如:

                  

                   SQL> exec dbms_tts.transport_set_check('oacms_space',true);

                              PL/SQL 過程已成功完成。

                   SQL> select * from transport_set_violations; 

                              未選定行

               3、生成可傳輸表空間

                    1、將表空間至於read only狀態下:alter tablespace oacms_space read only;

                    2、導出表空間元數據,可以使用exp/expdp 根據本人習慣使用exp

                         這裏不詳細些了  因爲本人的測試服務器連接不上了,注意,一定要用sys/system身份;

                    3、將表空間的數據文件傳輸到目標數據庫中,將導出的dmp文件也傳輸到目標文件中,使用imp把元數據導入到目標數據庫,成了,完成;

               

                      寫到最後細節不願意寫了,哪天在做的時候截圖出來,見諒!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章