ogg環境線上重定義普通表到分割槽表實戰及生產操作注意事項-orastar
實驗目的
-
在ogg環境採用線上重定義的方式將普通錶轉化成分割槽表。
-
檢視線上重定義後各主鍵索引、普通索引及分割槽索引狀態。
-
檢視原表附加日誌狀態。
環境說明
-
Oracle 10.2.0.5、goldengate 11.1.1.1.2,aix5.3,ogg已開DDL
-
普通表1有主鍵索引A、普通索引B,分割槽表2有主鍵索引C、分割槽索引D
測試結果
採用線上重定義方式在OGG環境進行,普通錶轉化分割槽表操作,測試結果如下:
-
4個索引均正常,普通索引狀態valid,分割槽索引usable。
-
原表附加日誌disabled(根據線上重定義原因,很容易理解。如有疑問請參考《Oracle? Database Administrator’s Guide》Redefining Tables Online章節)。
測試過程
一資料準備
–建立普通表1
CREATE TABLE HT.SALESTABLE
(S_PRODUCTID NUMBER PRIMARY KEY,
S_SALEDATE DATE,
S_CUSTID NUMBER,
S_TOTALPRICE NUMBER);
–建立非主鍵普通索引
create index ht.idx_SALESTABLE on HT.SALESTABLE(S_CUSTID);
–產生業務資料
insert into HT.SALESTABLE values(1,TO_DATE('01-APR-2003', 'DD-MON-YYYY'),1,1);
insert into HT.SALESTABLE values(2,TO_DATE('01-JUL-2003', 'DD-MON-YYYY'),1,1);
insert into HT.SALESTABLE values(3,TO_DATE('01-OCT-2003', 'DD-MON-YYYY'),1,1);
insert into HT.SALESTABLE values(4,TO_DATE('01-JAN-2004', 'DD-MON-YYYY'),1,1);
commit;
–檢查資料生產情況
select count(1) from HT.SALESTABLE;
–生產分割槽表2
CREATE TABLE HT.PAR_SALESTABLE
2 (s_productid NUMBER primary key,
s_saledate DATE,
s_custid NUMBER,
s_totalprice NUMBER)
TABLESPACE users
PARTITION BY RANGE(s_saledate)
(PARTITION sal03q1 VALUES LESS THAN (TO_DATE('01-APR-2003', 'DD-MON-YYYY')),
PARTITION sal03q2 VALUES LESS THAN (TO_DATE('01-JUL-2003', 'DD-MON-YYYY')),
PARTITION sal03q3 VALUES LESS THAN (TO_DATE('01-OCT-2003', 'DD-MON-YYYY')),
PARTITION sal03q4 VALUES LESS THAN (TO_DATE('30-JAN-2004', 'DD-MON-YYYY')));
–生成分割槽索引
create index ht.idx_PAR_SALESTABLE on HT.PAR_SALESTABLE(S_CUSTID) local;
二線上重定義
–驗證是否可以重定義
exec dbms_redefinition.can_redef_table('HT','SALESTABLE');
–開始線上重定義
exec dbms_redefinition.start_redef_table('HT', 'SALESTABLE', 'PAR_SALESTABLE');
–結果線上重定義
exec dbms_redefinition.finish_redef_table('HT','SALESTABLE','PAR_SALESTABLE');
–異常終止
exec dbms_redefinition.abort_redef_table('HT','SALESTABLE','PAR_SALESTABLE');
三操作記錄
SQL> CREATE TABLE HT.SALESTABLE
(S_PRODUCTID NUMBER PRIMARY KEY,
S_SALEDATE DATE,
S_CUSTID NUMBER,
S_TOTALPRICE NUMBER);
Table created.
SQL> create index ht.idx_SALESTABLE on HT.SALESTABLE(S_CUSTID);
Index created.
SQL> insert into HT.SALESTABLE values(1,TO_DATE('01-APR-2003', 'DD-MON-YYYY'),1,1);
insert into HT.SALESTABLE values(2,TO_DATE('01-JUL-2003', 'DD-MON-YYYY'),1,1);
insert into HT.SALESTABLE values(3,TO_DATE('01-OCT-2003', 'DD-MON-YYYY'),1,1);
insert into HT.SALESTABLE values(4,TO_DATE('01-JAN-2004', 'DD-MON-YYYY'),1,1);
commit;
1 row created.
SQL>
1 row created.
SQL>
1 row created.
SQL>
1 row created.
SQL>
Commit complete.
SQL> select count(1) from HT.SALESTABLE;
COUNT(1)
----------
4
SQL> CREATE TABLE HT.PAR_SALESTABLE
2 (s_productid NUMBER primary key,
s_saledate DATE,
s_custid NUMBER,
s_totalprice NUMBER)
TABLESPACE users
PARTITION BY RANGE(s_saledate)
(PARTITION sal03q1 VALUES LESS THAN (TO_DATE('01-APR-2003', 'DD-MON-YYYY')),
PARTITION sal03q2 VALUES LESS THAN (TO_DATE('01-JUL-2003', 'DD-MON-YYYY')),
PARTITION sal03q3 VALUES LESS THAN (TO_DATE('01-OCT-2003', 'DD-MON-YYYY')),
PARTITION sal03q4 VALUES LESS THAN (TO_DATE('30-JAN-2004', 'DD-MON-YYYY')));
Table created.
SQL> create index ht.idx_PAR_SALESTABLE on HT.PAR_SALESTABLE(S_CUSTID) local;
Index created.
SQL> exec dbms_redefinition.can_redef_table('HT','SALESTABLE');
PL/SQL procedure successfully completed.
SQL> exec dbms_redefinition.start_redef_table('HT', 'SALESTABLE', 'PAR_SALESTABLE');
PL/SQL procedure successfully completed.
SQL> exec dbms_redefinition.finish_redef_table('HT','SALESTABLE','PAR_SALESTABLE');
PL/SQL procedure successfully completed.
四結果驗證
SQL> col owner for a30
SQL> set line 999
SQL> col TABLE_NAME for a50
col index_name for a30
col index_type for a20
select t.OWNER, t.TABLE_NAME, t.PARTITIONED, t.degree from dba_tables t where t.TABLE_NAME in ('SALESTABLE','PAR_SALESTABLE');
select d.owner, d.index_name, d.table_name,d.index_type,d.status, d.degree from dba_indexes d where d.table_name in ('SALESTABLE','PAR_SALESTABLE');
select p.index_owner, p.index_name,p.status from dba_ind_partitions p where p.index_name in ('IDX_PAR_SALESTABLE');SQL> SQL> SQL>
OWNER TABLE_NAME PARTITION DEGREE
------------------------------ -------------------------------------------------- --------- ------------------------------------------------------------
HT PAR_SALESTABLE NO 1
HT SALESTABLE YES 1
//注:透過線上重定義表SALESTABLE(之前非分割槽表)已變更為分割槽表
SQL>
OWNER INDEX_NAME TABLE_NAME INDEX_TYPE STATUS DEGREE
------------------------------ ------------------------------ -------------------------------------------------- -------------------- ------------------------ ------------------------------------
HT SYS_C00379199 PAR_SALESTABLE NORMAL VALID 1
HT IDX_SALESTABLE PAR_SALESTABLE NORMAL VALID 1
HT SYS_C00379202 SALESTABLE NORMAL VALID 1
HT IDX_PAR_SALESTABLE SALESTABLE NORMAL N/A 1
//注:非分割槽索引SYS_C00379199、IDX_SALESTABLE、SYS_C00379202均為VALID可用狀態.
SQL>
INDEX_OWNER INDEX_NAME STATUS
------------------------------------------------------------------------------------------ ------------------------------ ------------------------
HT IDX_PAR_SALESTABLE USABLE
HT IDX_PAR_SALESTABLE USABLE
HT IDX_PAR_SALESTABLE USABLE
HT IDX_PAR_SALESTABLE USABLE
//注:分割槽索引IDX_PAR_SALESTABLE均為可用狀態。
GGSCI (dcods1) 2> dblogin userid xxx password xxx
Successfully logged into database.
GGSCI (dcods1) 3> info trandata ht.SALESTABLE
Logging of supplemental redo log data is disabled for table HT.SALESTABLE.
GGSCI (dcods1) 4> info trandata ht.PAR_SALESTABLE
Logging of supplemental redo log data is enabled for table HT.PAR_SALESTABLE
//注:表SALESTABLE無附加日誌。
友情提示
如果大家生產環境操作請注意以下幾點:
-
資料量操作5000W儘量不要使用重定義的方式進行拆分。
-
儘量申請停業務操作
-
一定做好各表和索引狀態、並行度檢查
-
一定重新生產附加日誌
-
一定做好增、刪、改、查及測試資料清理驗證工作
注大家工作一切順利,God bless ‘dba’er!
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31442014/viewspace-2137452/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 使用線上重定義方法改造普通表為分割槽表實戰
- ORACLE 線上重新定義表分割槽表重定義為普通表。Oracle
- 普通錶轉換分割槽表-線上重定義
- 使用DBMS_REDEFINITION線上重定義表普通表為分割槽表
- 指令碼:線上重定義,從普通表到分割槽表,redefinition_table.sh指令碼
- 使用ORACLE線上重定義將普通表改為分割槽表Oracle
- 線上重定義 ?普通錶轉換成分割槽表
- 【TABLE】oracle表線上重定義注意事項Oracle
- ORACLE 普通錶轉換成分割槽表(線上重定義)Oracle
- 【Oracle】利用線上重定義的方式改變普通表為分割槽表Oracle
- ORACLE 普通錶轉換成分割槽表(線上重定義)(zt)Oracle
- 線上重定義的操作步驟__普通錶轉換為分割槽表的實驗案例
- ORACLE分割槽表梳理系列(二)- 分割槽表日常維護及注意事項Oracle
- 分割槽表和dbms_redefinition包線上重定義表
- 利用線上重定義功能將普通錶轉換為分割槽表問題
- SQL Server 表分割槽注意事項HXSQLServer
- 線上重定義分割槽表和NOLOGGING APPEND分割槽表對比APP
- 海量資料處理_表分割槽(線上重定義)
- 線上表格重定義研究,比如將普通錶轉換為分割槽表等
- ORACLE分割槽表梳理系列(一)- 分割槽表概述、分類、使用方法及注意事項Oracle
- oracle 線上重新定義,普通表改變分割槽表,分割槽表可以更改型別、分割槽欄位等Oracle型別
- oracle分割槽表線上重定義欄位not null問題OracleNull
- 非分割槽錶轉換成分割槽表以及注意事項
- goldengate 生產環境下實施注意事項Go
- Oracle線上將普通錶轉分割槽表Oracle
- 分割槽表-實戰
- [Hive]hive分割槽設定注意事項Hive
- OGG Oracle 分割槽壓縮表 到 MySQL分表的實現OracleMySql
- dbms_redefinition利用線上重定義把普通錶轉化為分割槽表的一些測試
- oracle 普通表-分割槽表改造流程Oracle
- add disk to asm on aix操作步驟及注意事項-orastarASMAIAST
- 利用ORACLE DBMS_REDEFINITION包進行普通表到分割槽表的線上轉換Oracle
- oracle 表線上重定義Oracle
- oracle表線上重定義Oracle
- 【Oracle】線上重定義表Oracle
- 批次轉換分割槽表為普通表
- 批量轉換分割槽表為普通表
- ORACLE普通錶轉換成分割槽表的操作Oracle