乙個利用傳輸表空間和分割槽交換技術進行資料遷移的案例

2021-06-22 12:08:49 字數 3121 閱讀 1483

1. 案例背景

product:生產交易

資料庫

,存放當月交易資料。其中,關鍵交易表按天分割槽。

dw:交易歷史資料庫(資料倉儲),存放歷史交易資料,其中,關鍵交易表是按月分割槽。

功能需求:在每個月末,將product的交易表資料全部移植到dw中。

2. 實施過程

--product中關鍵交易表sales的定義如下:

create

table

sales (invoice_no number, sale_year int, sale_month int, sale_day int)

partition by range (

sale_day

)(partition p1 values less than (2) tablespace ts_p1,

partition p2 values less than (3) tablespace ts_p2,

partition p3 values less than (4) tablespace ts_p3,

... ...

partition p31 values less than (32) tablespace ts_p31);

即每天的交易資料都單獨放在乙個partition和表空間中。

--dw中關鍵交易表sales的定義如下:

create table sales_history (invoice_no number, sale_year int, sale_month int, sale_day int)

partition by range (

sale_year,sale_month,sale_day

)(partition jan2010 values less than (2010,2,1) tablespace ts_jan2010,

partition feb2010 values less than (2010,3,1) tablespace ts_feb2010,

partition mar2010 values less than (2010,4,1) tablespace ts_mar2010,

... ...

partition sep2010 values less than (2010,10,1) tablespace ts_sep2010);

即每月的交易資料都單獨放在乙個partition和表空間中。

--在dw中用於

分割槽交換

的臨時表tmp定義如下:

create table tmp(invoice_no number, sale_year int, sale_month int, sale_day int)

--在每個月的月末,進行如下操作:

1)檢查表空間的自包含性

在product資料庫中,以sys使用者執行:

execute dbms_tts.transport_set_check('ts_p1','ts_p2',...,'ts_p31',true);

完成上述操作之後,再查詢以下檢視:

select * from transport_set_violations;

如果沒有返回值,則表示表空間是自包含的。

2)將表空間設為唯讀

alter tablespace ts_p1 read only;

......

alter tablespace ts_p31 read only;

3)用exp生成

傳輸表空間

的dmp檔案:

transport_tablespace = y

tablespaces = (ts_p1,......,ts_p31)

trigger=y

constrains=n

grants=n

file=tts.dmp

4)傳輸dmp檔案和資料檔案

把上一步生成的tts.dmp及表空間對應的所有資料檔案都傳輸到dw伺服器上。

5)將product的表空間

恢復

為讀寫模式

alter tablespace ts_p1 read write;

......

alter tablespace ts_p31 read write;

6)用imp匯入dmp檔案

transport_tablespace = y

datafiles=('/db/p1.dbf',......)

tts_owner = (...)

fromuser = (...)

touser=(...)

file=tts.dmp

7)將dw中sales分割槽表合併為乙個分割槽 p1

alter table sales merge partitions p31,p30 into partition p30;

......

alter table sales merge partitions p2,p1 into partition p1;

8)將sales表交換至臨時表tmp中

alter table sales exchange partition p1 with table tmp;

9)在dw中為sales_history新增乙個新的當月的partition

alter table sales_history add partition oct2010 values less than (2010,11,1) tablespace ts_oct2010);

10) 將臨時表tmp交換至sales_history新新增的partition中

alter table sales_history exchange partition oct2010 with table tmp;

11)後續工作

刪除臨時表,刪除過期的表空間等。

3. 方案評估

在整個資料遷移的過程中,最耗時間的操作時檔案傳輸過程,取決於網路寬頻。而在資料庫層面,所有的操作幾乎都是資料字典的操作,非常的高效。

關於表空間的乙個問題

最近在進行資料庫伺服器維護的時候發生某個表空間 名為ppstt 佔用率過高,如何解決這一問題,上網查了很多這方面的資料,因為本人對資料庫管理還是個生手,所以只好求教於同事.同事發過來一文件,照著操作,問題解決了.資料庫伺服器為 sun microsystems inc sunos 5.9 資料庫為 ...

RHEL系統新增乙個新的交換Swap分割槽

1.如果希望新增乙個交換分割槽 這裡假設希望把 dev hdb5新增為交換分割槽 著個硬碟不能被正在使用 也就是分割槽不能被載入,交換空間沒有被啟用 分割槽表在使用時不能被修改,因為核心可能無法正確識別分割槽表的變化。這樣資料可能會寫入到錯誤的分割槽,而導致資料被覆蓋而丟失,因為核心維護的分割槽表跟...

乙個使用者可以管理多個表空間

看下面的指令碼 create user uname identified by default tablespace ts tab 001 temporary tablespace temp profile default quota unlimited on ts tab 001 quota un...