国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > 綜合 > 正文

更快地遷移數(shù)據(jù)

2024-07-21 02:34:07
字體:
供稿:網(wǎng)友

  為了有效地實現(xiàn)數(shù)據(jù)集市的方法,數(shù)據(jù)專家必須能將數(shù)據(jù)快速、有效地放入數(shù)據(jù)集市中。該團隊面臨的挑戰(zhàn)就是解決如何用數(shù)據(jù)倉庫中的數(shù)據(jù)快速刷新數(shù)據(jù)集市中的數(shù)據(jù),而這些數(shù)據(jù)集市又運行在各個結構不同的平臺上。這就是Lora為什么出席會議的原因。 她會為移動數(shù)據(jù)提出哪些可供選擇的方法呢?
  
  作為一名經(jīng)驗豐富、知識淵博的數(shù)據(jù)庫治理員,Lora向與會者提供了三種可能的方法,分別是:
  
  使用可移動表空間
  使用數(shù)據(jù)泵(導入和導出)
  拖出表空間
  
  本文介紹Lora對這三種可選方法的解釋,包括它們的實施細節(jié)和優(yōu)缺點。
  
  可移動表空間
  
  Lora從可移動表空方法開始介紹。把整個表空間移動到目標系統(tǒng)的最快速方法是用FTP(文件傳輸協(xié)議)或rcp(遠程復制)來簡單地轉(zhuǎn)移表空間的基本文件。但是,僅僅復制Oracle數(shù)據(jù)文件還不夠,目標數(shù)據(jù)庫必須識別出并導入文件以及相應的表空間,最終用戶才能使用表空間數(shù)據(jù)。使用可移動表空間包括復制表空間文件和使它們中的數(shù)據(jù)在目標數(shù)據(jù)庫中可用。
  
  在考慮該方法之前必須進行一些審查。首先,對于要轉(zhuǎn)移到目標系統(tǒng)的表空間TS1,它必須是自含式的(self-contained)。也就是說,在該表空間中表的所有索引、分區(qū)及其他從屬于該表的各數(shù)據(jù)段都必須在該表空間內(nèi)部。Lora解釋說,假如一個表空間集合包含所有從屬的數(shù)據(jù)段,那么就認為這個集合是自含式的。例如,假如表空間TS1和TS2要作為一個集合進行轉(zhuǎn)移,TS1中的一個表在TS2中有一個索引,則這個表空間集合就是自含式的。但是,假如TS1中的一個表另一個索引在表空間TS3中,則該表空間集合 (TS1, TS2)就不是自含式的。
  
  要移動表空間,Lora提議使用Oracle數(shù)據(jù)庫10g中的數(shù)據(jù)泵導出(Data Pump EXPort)工具。數(shù)據(jù)泵是Oracle的新一代數(shù)據(jù)轉(zhuǎn)移工具,它替換了早期的Oracle Export (EXP)和Import (IMP)工具。這些老的工具使用正則SQL來提取和插入數(shù)據(jù),而數(shù)據(jù)泵則與它們不同,它使用能繞過SQL緩沖區(qū)的專用API,從而使操作過程速度變得極快。此外,數(shù)據(jù)泵可以提取特定的對象,如特定的存儲過程或特定表空間的表集合。 數(shù)據(jù)泵的導出和導入可以由作業(yè)控制,數(shù)據(jù)庫治理員可以隨時暫停、重啟或終止這些作業(yè)。
  
  開會前Lora運行了一項測試,看看數(shù)據(jù)泵能否解決Acme的要求。Lora進行的測試是轉(zhuǎn)移TS1和TS2表空間,步驟如下:
  
  1.檢查TS1和TS2這個表空間集合是否是自含式的。執(zhí)行下面的命令:
  
  BEGIN
  SYS.DBMS_TTS.TRANSPORT_SET_CHECK ('TS1','TS2');
  END;
  
  2.確定所有不可移動的集合。假如沒有選擇任何行,則該表空間是自含式的:
  
  SELECT * FROM TRANSPORT_SET_VIOLATIONS;
  
  no rows selected
  
  3.確保該表空間是只讀的:
  
  SELECT STATUS
  FROM DBA_TABLESPACES
  WHERE TABLESPACE_NAME IN ('TS1','TS2');
  
  STATUS
  ---------
  READ ONLY
  READ ONLY
  
  4.使用傳輸機制,如FTP或rcp,將每個表空間中的數(shù)據(jù)文件移到遠程系統(tǒng),放到/u01/oradata目錄下。
  
  5.在目標數(shù)據(jù)庫中,創(chuàng)建一個到源數(shù)據(jù)庫的數(shù)據(jù)庫鏈接(在下面的命令行中命名為srcdb)。
  
  CREATE DATABASE LINK srcdb
  USING 'srcdb';
  
  6.在目標數(shù)據(jù)庫中,使用數(shù)據(jù)泵導入工具將該表空間導入到該數(shù)據(jù)庫中。
  
  impdp lora/lora123
  TRANSPORT_DATAFILES=
  "'/u01/oradata/ts1_1.dbf',
  '/u01/oradata/ts2_1.dbf'"
  NETWORK_LINK='srcdb'
  TRANSPORT_TABLESPACES=/(TS1,TS2/)
  NOLOGFILE=Y
  
  這一步就使TS1和TS2表空間以及它們的數(shù)據(jù)可以在目標數(shù)據(jù)庫中可用。
  
  請注重,Lora并沒有從源數(shù)據(jù)庫導出元數(shù)據(jù)。她只是在上面的impdp命令中指定參數(shù)NETWORK_LINK的值為srcdb,即到源數(shù)據(jù)庫的數(shù)據(jù)庫鏈接。數(shù)據(jù)泵導入工具通過數(shù)據(jù)庫鏈接從源數(shù)據(jù)庫中獲得所需的元數(shù)據(jù),并在目標數(shù)據(jù)庫中重新創(chuàng)建它們。
  
  7. 最后,使源數(shù)據(jù)庫中的TS1和TS2表空間成為可讀寫。
  
  ALTER TABLESPACE TS1 READ WRITE;
  ALTER TABLESPACE TS2 READ WRITE;
  
  這一步使TS1和TS2表空間在源數(shù)據(jù)庫中對用戶立即可用。
  
  請注重,在前面講的所有步驟中,最費時的是第4步,在這一步中要跨各系統(tǒng)移動數(shù)據(jù)文件。

  
  跨不同平臺的挑戰(zhàn)
  
  Lora知道,數(shù)據(jù)復制過程中的復雜因素之一就是源平臺和目標平臺經(jīng)常不一致。例如,在Acme的環(huán)境中,當前數(shù)據(jù)倉庫位于運行Tru64 UNIX的HP服務器上,而建議的數(shù)據(jù)集市將部署在運行l(wèi)inux和Windows的Intel硬件上。
  
  在Oracle數(shù)據(jù)庫10g出現(xiàn)之前,在Acme使用可移動表空間不是一個切實可行的方法。你不能移動表空間,除非源數(shù)據(jù)庫和目標數(shù)據(jù)庫運行在同一個平臺上。
  
  有了Oracle數(shù)據(jù)庫10g,這一限制得到了極大的緩解。在移動表空間時,數(shù)據(jù)文件可以跨各操作系統(tǒng)任意復制。在前面的例子中,數(shù)據(jù)文件可以從Tru64 UNIX復制到Linux或Windows,而目標數(shù)據(jù)庫仍能識別它們。
  
  但是,治理團隊必須考慮另一種限制。默認情況下,只有兩個操作系統(tǒng)具有相同的字節(jié)順序(也被稱為"endian-ness")時才可能進行跨操作系統(tǒng)復制。在Acme的情況下,Tru64 UNIX、基于Intel的Linux和Windows都使用little-endian字節(jié)順序(低位在前),因此在它們之間進行文件復制是可能的。但是,有的團隊成員提出了在有關數(shù)據(jù)倉庫/數(shù)據(jù)集市的提案中使用Solaris操作系統(tǒng)的想法。Solaris使用big-endian字節(jié)順序(高位在前),這使得在數(shù)據(jù)庫之間進行簡單的文件復制成為不可能。
  
  Lora解釋說,Oracle提供了使用Oracle Recovery Manager (RMAN)進行字節(jié)順序轉(zhuǎn)換的解決方案。她描述了針對RMAN解決方案的一個測試,該測試根據(jù)前面講到的移動表空間解決方案的7個步驟,并稍作修改來適應Solaris到Intel/Linux的環(huán)境。除了在第5步之前或之后額外增加一步以外,所有操作步驟都一樣。在源(Solaris)數(shù)據(jù)庫服務器上執(zhí)行的額外這一步如代碼清單1中所示。
  
  用這些代碼,可以從Solaris格式的/u01/oradata/ts1_01.dbf文件創(chuàng)建Intel Linux格式的文件/u01/tts/ TS1_34。注重最初的文件并沒有被破壞;只是創(chuàng)建了一個可以被導入和傳輸?shù)絃inux上的目標數(shù)據(jù)庫中的新文件。
  
  然后Lora討論了對RMAN解決方案的一些修改。第一,為了提高性能,她可以指定PARALLELISM=<degree>子句來提高執(zhí)行線程的數(shù)目。第二,她可以指定在不同的目錄下以相同的文件名創(chuàng)建數(shù)據(jù)文件。這些修改如下:
  
  RMAN> CONVERT TABLESPACE TS1
  2> TO PLATFORM 'Linux IA (32-bit)'
  3> DB_FILE_NAME_CONVERT
  4> '/u01/oradata','/u01/tts'
  5> PARALLELISM=4
  6> ;
  
  這條命令用相同的文件名ts1_01.dbf但在/u01/tts目錄下根據(jù)原始文件/u01/oradata/ts1_01.dbf創(chuàng)建一個轉(zhuǎn)換后的數(shù)據(jù)文件。這種方法將所有轉(zhuǎn)換后的文件放到一個位置,這樣確定轉(zhuǎn)移哪個文件就更簡單了。
  
  Lora還可以在目標(Linux)數(shù)據(jù)庫服務器而不是在源服務器上執(zhí)行變換。在這種情況下,將在Linux服務器上執(zhí)行轉(zhuǎn)換,如下所示:
  
  RMAN> CONVERT DATAFILE
  2> '/u01/oradata/ts1_1.dbf',
  '/u01/oradata/ts2_1.dbf'
  3> TO PLATFORM='Linux IA (32-bit)'
  4> FROM PLATFORM='Solaris[tm] OE
  (64-bit)'
  5> DB_FILE_NAME_CONVERT="ts","tslinux"
  6> ;
  
  這條命令通過用tslinux代替ts(換句話說,將ts1_1.dbf轉(zhuǎn)換到Linux上的文件格式,新文件名為tslinux1_1.dbf)來創(chuàng)建文件。在數(shù)據(jù)庫內(nèi),文件將用這個文件名。
  
  Lora怎么知道哪個平臺用哪種字節(jié)順序呢?在數(shù)據(jù)字典視圖上執(zhí)行以下查詢就會給出答案:
  
  SELECT * FROM V$TRANSPORTABLE_PLATFORM ORDER BY PLATFORM_ID;
  
  數(shù)據(jù)泵導出與導入工具
  
  選擇可移動表空間的限制之一是在轉(zhuǎn)移文件時源表空間必須是只讀模式。在現(xiàn)實世界中,并不總是能滿足這一要求。例如,在OLTP數(shù)據(jù)庫中,可能對表要經(jīng)常進行讀寫操作。
  
  Lora提出的另一種方法是使用Oracle數(shù)據(jù)庫10g中的數(shù)據(jù)泵實用工具來轉(zhuǎn)移表空間。她對這種方法進行的測試包括移動TS1和TS2表空間內(nèi)容的以下步驟:
  
  1.創(chuàng)建一個目錄對象來存放轉(zhuǎn)儲的文件。
  
  CREATE DirectorY dump_dir AS '/u01/dumps';
  
  2.用數(shù)據(jù)泵導出工具導出數(shù)據(jù)。
  
  expdp lora/lora123 TABLESPACES=/(ts1,ts2/) DUMPFILE=ts1_ts2.dmp DIRECTORY=dump_dir
  
  這一步創(chuàng)建一個包含TS1和TS2表空間內(nèi)容的文件/u01/dumps/ ts1_ts2.dmp。
  
  3.將文件ts1_ts2.dmp轉(zhuǎn)移到遠程系統(tǒng)中,放在目錄/u01/dumps下(用文件傳輸?shù)姆椒ㄈ鏔TP或rcp)。

  
  4.在目標數(shù)據(jù)庫中創(chuàng)建一個目錄對象。
  
  CREATE DIRECTORY dump_dir
  AS '/u01/dumps';
  
  5.使用數(shù)據(jù)泵導入工具將該文件導入到該數(shù)據(jù)庫中。
  
  impdp lora/lora123 DIRECTORY=dump_dir DUMPFILE=ts1_ts2.dmp
  
  假如表空間內(nèi)的數(shù)據(jù)量相對較小,則Lora可以只用一條命令執(zhí)行上面的所有步驟:
  
  impdp lora/lora123 DIRECTORY=dump_dir NETWORK_LINK='srcdb' TABLESPACES=/(ts1,ts2/)
  
  這條命令使用數(shù)據(jù)泵導入工具將通過數(shù)據(jù)庫鏈接srcdb(在以前的章節(jié)中已討論過)檢索到的數(shù)據(jù)加載到表中。但是,由于網(wǎng)絡帶寬通常是受到限制的,因此這種方法可能比使用導出/傳輸/導入周期方法要慢一些。
  
  假如只需將特定的表或表集合進行轉(zhuǎn)移,那么Lora可以在expdp命令中使用TABLES=<tablelist>子句來只下載特定的表或表集合。
  
  拖出表空間
  
  作為第三種選擇,Lora建議使用Oracle數(shù)據(jù)庫10g中的新工具,它簡化了可移動表空間的移動方法,因此只涉及執(zhí)行一個打包過程。在這種方法中,用戶利用所提供的DBMS_STREAMS_TABLESPACE_ADM包從源系統(tǒng)中"拖?quot;表空間。這個包使用數(shù)據(jù)泵轉(zhuǎn)移表空間并將數(shù)據(jù)文件轉(zhuǎn)換成目標系統(tǒng)的格式。 它還自動執(zhí)行任何所需的字節(jié)順序變換。
  
  下面給出在最簡單的情況下使用這種方法的過程--涉及單個簡單表空間(更復雜的情況在下一節(jié)介紹)。 假如一個表空間只有一個數(shù)據(jù)文件,則這個表空間稱為簡單表空間。Lora演示了DBMS_STREAMS_TABLESPACE_ADM包中PULL_SIMPLE_TABLESPACE過程的使用方法:
  
  1.在存放數(shù)據(jù)文件的目錄所在的(遠程)數(shù)據(jù)倉庫數(shù)據(jù)庫中創(chuàng)建一個目錄對象。
  
  CREATE DIRECTORY dbf_dir AS '/u01/oradata/dw';
  
  2.設置遠程數(shù)據(jù)庫中的表空間TS1為只讀。
  
  ALTER TABLESPACE TS1 READ ONLY;
  
  剩下的一些步驟在本地(數(shù)據(jù)集市)數(shù)據(jù)庫中完成。
  
  3.創(chuàng)建一個連接到遠程(數(shù)據(jù)倉庫)數(shù)據(jù)庫(在Lora的例子中是dwdb)的數(shù)據(jù)庫鏈接。
  
  CREATE DATABASE LINK dwdb USING 'dwdb';
  
  4.創(chuàng)建一個數(shù)據(jù)文件將被轉(zhuǎn)移到其中的目錄對象。
  
  CREATE DIRECTORY dbf_dir AS '/u01/oradata/mart';
  
  5.從遠程數(shù)據(jù)庫中拖出表空間。
  
  BEGIN
  DBMS_STREAMS_TABLESPACE_ADM
  .PULL_SIMPLE_TABLESPACE (
  tablespace_name   => 'TS1',
  database_link    => 'dwdb',
  directory_object  => 'DBF_DIR',
  conversion_extension => 'linux'
  );
  END;
  
  該操作在后臺完成了許多步驟:設置源表空間為只讀;用數(shù)據(jù)泵導出工具進行一次表空間的元數(shù)據(jù)轉(zhuǎn)儲;用DBMS_FILE_TRANSFER包移動數(shù)據(jù)文件和轉(zhuǎn)儲的文件;把源表空間恢復到其最初的讀寫狀態(tài);使用數(shù)據(jù)泵導入工具將表空間插入到本地數(shù)據(jù)庫中。由于源數(shù)據(jù)庫運行在Linux上,而目標數(shù)據(jù)庫運行在Solaris上,因此這一操作首先復制原始數(shù)據(jù)文件(Linux的文件格式),然后將它轉(zhuǎn)換到目標平臺上(Solaris)的文件格式。復制過程保持最初被轉(zhuǎn)移的文件,而創(chuàng)建一個新文件用于轉(zhuǎn)換。新文件與最初的文件同名,但具有CONVERSION_EXTENSION參數(shù)指定的linux擴展名。在目標數(shù)據(jù)庫中創(chuàng)建的表空間為只讀表空間。
  
  該操作還在與數(shù)據(jù)文件相同的目錄下創(chuàng)建一個名為ts1_01.plg的日志文件。假如執(zhí)行該過程返回錯誤信息,則檢查該文件的內(nèi)容可能有助于找到錯誤的原因。
  
  拖出多個表空間
  
  上面的例子針對的是單個簡單表空間的情況。但假如Lora想移動一組表空間,或者一些表空間的數(shù)據(jù)文件多于一個,該怎么辦呢?在這種情況下,她可以使用同一個包中的另一個過程PULL_TABLESPACES。代碼清單2給出的例子說明Lora如何轉(zhuǎn)移兩個表空間TS7和TS8,而不管它們有多少個數(shù)據(jù)文件。
  
  該過程要求以VARCHAR2數(shù)據(jù)類型給出表空間名和目錄名。代碼清單2中第2行到第5行展示出了這些變量的聲明,第10行到第13行展示出這些變量被賦值給相應的表空間名和目錄名。 由于定義了兩個目錄,因此第一個文件在第一個目錄中創(chuàng)建,下一個文件在第二個目錄中創(chuàng)建,第三個文件再次在第一個目錄中創(chuàng)建,如此等等。這些操作通過數(shù)據(jù)泵作業(yè)來執(zhí)行,作業(yè)名在第17行指定。假如需要的話,源系統(tǒng)字節(jié)順序的數(shù)據(jù)文件會自動轉(zhuǎn)換為目標系統(tǒng)的字節(jié)順序。在目標數(shù)據(jù)庫中創(chuàng)建的新文件獲得linux擴展名,如第21行代碼所示。處理過程記錄在由目錄對象LOG_DIR指定的目錄中的ts7_ts8.log日志文件中(第14行)。
  
  這種方法的優(yōu)點顯而易見。從一個系統(tǒng)把一個表空間轉(zhuǎn)移到另一個系統(tǒng)所需的所有操作任務都封裝在一個程序單元中,并且細節(jié)對用戶完全透明。甚至把文件從源系統(tǒng)轉(zhuǎn)移到目標系統(tǒng)的工作也在這個過程中通過所提供的DBMS_FILE_TRANSFER包來完成。用戶簡單地用表空間名調(diào)用該過程,表空間就會在本地數(shù)據(jù)庫中被刷新。他們不必操心底層的細節(jié)(如操作系統(tǒng)),因為文件轉(zhuǎn)移過程自動轉(zhuǎn)換文件。
  
  這種方法有什么不好的地方嗎?會上Lora講到,它的主要缺點就是將各個功能封裝在一個單一的過程內(nèi),這可能會掩蓋某一步產(chǎn)生的錯誤,使問題的診斷變得很復雜。手工轉(zhuǎn)移一個表空間的方法要求各條命令都是透明的,因而其好處是用戶能夠看到每一步操作的結果。
  
  會議結束
  
  針對Acme的數(shù)據(jù)倉庫/數(shù)據(jù)集市體系結構,Lora提出了幾種移動數(shù)據(jù)的可選方法。

  
  第一種可選方法是使用可移動表空間,它能移動完整的表空間集合(不僅包括表,還包括索引、物化視圖和其他對象)。通常它還是這三種方法中最快的一種。但是,它的一個主要缺點是對指定的表空間必須在復制文件時設置為只讀。
  
  第二種方法是使用數(shù)據(jù)泵,它對表空間是否為只讀沒有要求。當只需要移動指定的表而不是整個表空間時,這種方法很有用。
  
  最后一種方法是拖出表空間,該方法把可移動表空間方法的所有步驟組合成一步操作。用這種方法復制數(shù)據(jù)非常簡單,但要想調(diào)整每個具體步驟以便進行性能優(yōu)化時,它為數(shù)據(jù)庫治理員提供的靈活性太少。
  
  在會議結束時,高級治理層對Lora表示感謝,而Lora也感謝高級治理層對Acme銀行遷移到Oracle數(shù)據(jù)庫10g的支持,因為這使得不同的數(shù)據(jù)移動方法都成為可行的。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 喀喇沁旗| 确山县| 闽侯县| 巴楚县| 平果县| 长垣县| 灵寿县| 深泽县| 广平县| 建宁县| 富民县| 玛纳斯县| 读书| 南宫市| 禹州市| 永丰县| 儋州市| 横山县| 通许县| 佛学| 淮滨县| 琼海市| 田阳县| 盐边县| 景东| 方山县| 闸北区| 台州市| 孝感市| 云浮市| 祁东县| 百色市| 海城市| 黑山县| 永靖县| 阳高县| 乐平市| 乳山市| 黄冈市| 嵊泗县| 东台市|