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...