Oracleパーティション表履歴表へのパーティションの移行
生産の下でパーティション表を履歴表に移行するプロセスを記す
環境の説明:ソーステーブル:
/
ソーステーブル情報
ソーステーブルパーティション
表1
A1
A1_17,A1_18
表2
A2
A2_17,A2_18
表3
A3
A3_17,A3_18
ヒストリテーブル:(既に存在)
/
ヒストリテーブル
ヒストリ・テーブル・パーティション
表1
A1_HIS
A1_HIS_17,A1_HIS_18
表2
A2_HIS
A2_HIS_17,A2_HIS_18
表3
A3_HIS
A3_HIS_17,A3_HIS_18
1.全備3枚の表
2.A 1 2018 2017パーティション表のエクスポート
3.A 1インデックス文を取得する
select ‘select dbms_metadata.get_ddl’ || q’[(‘INDEX’,’]’|| index_name || q’[’,‘dbhang’)]’ || ’ from dual ’ from dba_indexes where table_name = ‘A1’;
select dbms_metadata.get_ddl(‘INDEX’,‘PK_A1’,‘dbhang’) from dual
select dbms_metadata.get_ddl(‘INDEX’,‘A1_IDX2’,‘dbhang’) from dual
select dbms_metadata.get_ddl(‘INDEX’,‘A1_IDX1’,‘dbhang’) from dual
4.インポート履歴テーブルimpdp dbhang/dbhang directory=hisclean dumpfile=A 1_1718.dmp remap_table=A1:A1_2017:A1_HIS,A1:A1_2018:A1_HIS table_exists_action=append
5.データ整合性の検証ソース・テーブルの行数を表示するには、次の手順に従います.
履歴テーブルの行数を表示するには、次の手順に従います.
6.ソーステーブルパーティションalter table A 1 truncate partition(A 1_2017)alter table A 1 truncate partition(A 1_2018)を削除する
7.索引ステータスの表示:
8.インデックスdrop index A 1_を削除IDX1 drop index A1_IDX2 drop index PK_A1
//プライマリ・キーの削除中に発生した問題
//ORA-02429//select owner,constraint_name,constraint_type,table_name from dba_constraints where table_name = ‘A1’ and owner=‘dbhang’;//alter table A1 drop constraint PK_A1
9.取得したDDL文を使用してインデックスを再構築(時間を記録)
再構築A 1_IDX1:
再構築A 1_IDX2:
PKの再構築A1
9.索引ステータスの検証:
10.履歴テーブルインデックスの再構築
ソーステーブルインデックスの再構築と同じ方法
11.ソーステーブル統計の再収集
12.履歴テーブル統計の再収集
環境の説明:ソーステーブル:
/
ソーステーブル情報
ソーステーブルパーティション
表1
A1
A1_17,A1_18
表2
A2
A2_17,A2_18
表3
A3
A3_17,A3_18
ヒストリテーブル:(既に存在)
/
ヒストリテーブル
ヒストリ・テーブル・パーティション
表1
A1_HIS
A1_HIS_17,A1_HIS_18
表2
A2_HIS
A2_HIS_17,A2_HIS_18
表3
A3_HIS
A3_HIS_17,A3_HIS_18
1.全備3枚の表
nohup
expdp \'/ as sysdba\'
dumpfile=nowfull.dmp
logfile=nowfull.log
directory=hisclean
tables=dbhang.A1,dbhang.FIN_ACCT_DTL,dbhang.FIN_VOU_INFO &
2.A 1 2018 2017パーティション表のエクスポート
expdp dbhang/dbhang dumpfile=A1_1718.dmp directory=hisclean logfile=A1_1718.log tables=A1:A1_2017,A1:A1_2018;
3.A 1インデックス文を取得する
select ‘select dbms_metadata.get_ddl’ || q’[(‘INDEX’,’]’|| index_name || q’[’,‘dbhang’)]’ || ’ from dual ’ from dba_indexes where table_name = ‘A1’;
select dbms_metadata.get_ddl(‘INDEX’,‘PK_A1’,‘dbhang’) from dual
CREATE UNIQUE INDEX "dbhang"."PK_A1" ON "dbhang"."A1" ("B_C", "BUS_NO")
PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "dbhang_INDEX"
select dbms_metadata.get_ddl(‘INDEX’,‘A1_IDX2’,‘dbhang’) from dual
CREATE INDEX "dbhang"."A1_IDX2" ON "dbhang"."A1" ("A_NO")
PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "dbhang_INDEX"
select dbms_metadata.get_ddl(‘INDEX’,‘A1_IDX1’,‘dbhang’) from dual
CREATE INDEX "dbhang"."A1_IDX1" ON "dbhang"."A1" ("B_C")
PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "dbhang_INDEX"
4.インポート履歴テーブルimpdp dbhang/dbhang directory=hisclean dumpfile=A 1_1718.dmp remap_table=A1:A1_2017:A1_HIS,A1:A1_2018:A1_HIS table_exists_action=append
5.データ整合性の検証ソース・テーブルの行数を表示するには、次の手順に従います.
select count(*) from A1 partition(A1_2017)
COUNT(*)
20245959
select count(*) from A1 partition(A1_2018)
COUNT(*)
23072147
履歴テーブルの行数を表示するには、次の手順に従います.
select count(*) from A1_HIS partition(A1_2017)
COUNT(*)
20245959
select count(*) from A1_HIS partition(A1_2018)
COUNT(*)
23072147
6.ソーステーブルパーティションalter table A 1 truncate partition(A 1_2017)alter table A 1 truncate partition(A 1_2018)を削除する
7.索引ステータスの表示:
SQL>
select index_name,index_type,owner,table_name,table_type,status
from dba_indexes
where table_name='A1';
-------------------------------------------------------------------------------------
INDEX_NAME INDEX_TYPE OWNER TABLE_NAME TABLE_TYPE STATUS
A1_IDX1 NORMAL dbhang A1 TABLE UNUSABLE
A1_IDX2 NORMAL dbhang A1 TABLE UNUSABLE
PK_A1 NORMAL dbhang A1 TABLE UNUSABLE
8.インデックスdrop index A 1_を削除IDX1 drop index A1_IDX2 drop index PK_A1
//プライマリ・キーの削除中に発生した問題
//ORA-02429//select owner,constraint_name,constraint_type,table_name from dba_constraints where table_name = ‘A1’ and owner=‘dbhang’;//alter table A1 drop constraint PK_A1
9.取得したDDL文を使用してインデックスを再構築(時間を記録)
再構築A 1_IDX1:
CREATE INDEX "dbhang"."A1_IDX1" ON "dbhang"."A1" ("B_C")
PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "dbhang_INDEX"
再構築A 1_IDX2:
CREATE INDEX "dbhang"."A1_IDX2" ON "dbhang"."A1" ("A_NO")
PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "dbhang_INDEX"
PKの再構築A1
CREATE UNIQUE INDEX "dbhang"."PK_A1" ON "dbhang"."A1" ("B_C", "B_NO")
PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "dbhang_INDEX"
9.索引ステータスの検証:
SQL>
select index_name,index_type,owner,table_name,table_type,status
from dba_indexes where table_name='A1';
INDEX_NAME INDEX_TYPE OWNER TABLE_NAME TABLE_TYPE STATUS
PK_A1 NORMAL dbhang A1 TABLE VALID
A1_IDX2 NORMAL dbhang A1 TABLE VALID
A1_IDX1 NORMAL dbhang A1 TABLE VALID
10.履歴テーブルインデックスの再構築
ソーステーブルインデックスの再構築と同じ方法
11.ソーステーブル統計の再収集
exec
dbms_stats.gather_table_stats
(ownname=>'dbhang',
estimate_percent=>10,
degree=>4,cascade=>TRUE,
GRANULARITY=>'ALL',
tabname=>'A1');
12.履歴テーブル統計の再収集
exec
dbms_stats.gather_table_stats
(ownname=>'dbhang',
estimate_percent=>10,
degree=>4,
cascade=>TRUE,
GRANULARITY=>'ALL',
tabname=>'A1_HIS');