一個利用傳輸表空間和分割槽交換技術進行資料遷移的案例
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. 方案評估
在整個資料遷移的過程中,最耗時間的操作時檔案傳輸過程,取決於網路寬頻。而在資料庫層面,所有的操作幾乎都是資料字典的操作,非常的高效。
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. 方案評估
在整個資料遷移的過程中,最耗時間的操作時檔案傳輸過程,取決於網路寬頻。而在資料庫層面,所有的操作幾乎都是資料字典的操作,非常的高效。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26277071/viewspace-713905/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 分割槽表對應的表空間遷移案例
- 【實驗】利用可傳輸表空間技術實現資料的高效遷移
- 【資料遷移】使用傳輸表空間遷移資料
- 海量資料遷移之傳輸表空間(一)
- 【傳輸表空間】使用 EXPDP/IMPDP工具的傳輸表空間完成資料遷移
- 【傳輸表空間】使用 EXPDP/IMPDP工具的傳輸表空間完成資料遷移[轉]
- 基於可傳輸表空間的表空間遷移
- 用傳輸表空間跨平臺遷移資料
- 跨平臺表空間遷移(傳輸表空間)
- 資料泵 TTS(傳輸表空間技術)TTS
- 利用可傳輸表空間跨平臺遷移 -RMAN CONVERT
- 使用可傳輸表空間向rac環境遷移資料
- 【資料遷移】XTTS跨平臺傳輸表空間v4TTS
- 對Oracle分割槽表進行表空間遷移並處理ORA-14511問題Oracle
- 利用PLSQL實現表空間的遷移(一)SQL
- 【資料遷移】XTTS跨平臺傳輸表空間(1.傳統方式)TTS
- [zt]跨平臺表空間傳輸 (DB遷移)
- 利用RMAN遷移表空間碰到的問題(一)
- Oracle 12cr2 資料庫之間傳輸表,分割槽或子分割槽Oracle資料庫
- Oracle分割槽表遷移Oracle
- 分割槽表分批遷移
- partition 分割槽表移動到其他表空間
- 批量移動分割槽表到其他表空間
- 海量資料遷移之分割槽表批次insert效能改進
- 海量資料遷移之分割槽表批量insert效能改進
- oracle 12c 使用RMAN的傳輸表空間功能在PDB之間遷移資料Oracle
- 資料庫物件遷移表空間資料庫物件
- MySQL Innodb表空間解除安裝和遷移案例MySql
- oracle 異構平臺遷移之傳輸表空間一例Oracle
- 海量資料遷移之分割槽並行抽取並行
- 海量資料遷移之分割槽並行切分並行
- oracle分割槽交換(exchange)技術Oracle
- 利用PLSQL實現表空間的遷移(二)SQL
- 利用PLSQL實現表空間的遷移(四)SQL
- 利用PLSQL實現表空間的遷移(三)SQL
- 利用PLSQL實現表空間的遷移(五)SQL
- Mysql資料分片技術(一)——初識表分割槽MySql
- 線上遷移表空間資料檔案