パーティション表部分パーティションデータのエクスポート
2557 ワード
最近、ビジネスの発展に伴い、毎日バックアップするdmpがますます大きくなり、多くのディスク容量を消費しています.バックアップされたlogを見ると、1番目に並んでいるのはログのlogテーブルで、システムの各ステップの操作を記録しています.このテーブルは単純にクエリーとして使用され、特定の操作が誰がしたのかをクエリーするために使用されない限り、使用頻度も極めて低いです.データ記録はいったん形成されると変化しない.このように、テーブルの履歴部分を重複バックアップしても意味がありません.そこで、このテーブルをパーティションテーブルに変更し、2つのパーティションを設定し、1つのパーティションは最近3ヶ月のデータを格納し、もう1つのパーティションは3ヶ月前のデータを格納することを考慮します.履歴データを別の表領域に格納し、表領域を読み取り専用に設定します.
オープン:は、履歴の変更されないデータを格納するためのテーブル空間olddataを新規に作成します. ビジネスが停止したときに、パーティションテーブルを作成します. データに誤りがないことを確認した後、C_MONITORLOG dropが落ちる. 変更C_MONITORLOG_TMPテーブル名はC_MONITORLOG. oldata表領域データをバックアップし、C_MONITORLOG:P 1データは1回の個別バックアップを行う.
dmpエクスポートスクリプトを編集し、フィルタオプションを増やしてp 1のデータパーティションデータをフィルタします.
最後に、PMAXパーティションのデータを3ヶ月ごとにカットし、P 1パーティションにマージします.これにより、あちこちのdmpをバックアップするたびに、変わらない履歴ログを保存する必要がなくなります.
オープン:
create table C_MONITORLOG_TMP
(
logid ,
qname ,
lx ,
category ,
type ,
lasttime ,
datasize ,
param ,
name ,
created default sysdate ,
createby ,
updated default sysdate ,
updateby ,
orgid ,
note
)
partition by range (CREATED)
(
partition P1 values less than (TO_DATE('2017-07-31 00:00:00', 'YYYY-MM-DD HH24:MI:SS' ))
tablespace OLDDATA,
partition PMAX values less than (MAXVALUE)
tablespace USERS
)
as
select * from C_MONITORLOG;
expdp system/xxxxxx directory=expdpdir dumpfile=c_monitorlog_p1.dmp tables=longyyy.C_MONITORLOG:P1
, 。
, 。
dmpエクスポートスクリプトを編集し、フィルタオプションを増やしてp 1のデータパーティションデータをフィルタします.
expdp system/xxxxxx directory=expdpdir dumpfile=test.dmp exclude=table:\"in\(\'C_MONITORLOG:P1\'\)\"
exclude 。 , C_MONITORLOG 。
, exclude=table_data 。
expdp system/xxxxxx directory=expdpdir dumpfile=test.dmp tablespaces=users exclude=table_data:\"in (select partition_name from dba_tab_partitions where table_name=\'C_MONITORLOG\' and partition_name<>\'PMAX\')\"
, C_MONITORLOG PMAX 。
最後に、PMAXパーティションのデータを3ヶ月ごとにカットし、P 1パーティションにマージします.これにより、あちこちのdmpをバックアップするたびに、変わらない履歴ログを保存する必要がなくなります.
--
select * from dba_tab_partitions
where table_name='C_MONITORLOG';
--
alter table C_MONITORLOG split partition PMAX at (to_date('2017/10/01','yyyy/mm/dd'))
into (partition P2 tablespace olddata, partition PMAX);
--
-- 。
alter table C_MONITORLOG merge partitions p1,p2 into partition p2;
--
alter table C_MONITORLOG rename partition p2 to p1;
-- , 。
alter table C_MONITORLOG move partition p1 tablespace olddata;
, olddata read only, read write
alter tablespace olddata read only;
alter tablespace olddata read write;