パーティション表部分パーティションデータのエクスポート

2557 ワード

最近、ビジネスの発展に伴い、毎日バックアップするdmpがますます大きくなり、多くのディスク容量を消費しています.バックアップされたlogを見ると、1番目に並んでいるのはログのlogテーブルで、システムの各ステップの操作を記録しています.このテーブルは単純にクエリーとして使用され、特定の操作が誰がしたのかをクエリーするために使用されない限り、使用頻度も極めて低いです.データ記録はいったん形成されると変化しない.このように、テーブルの履歴部分を重複バックアップしても意味がありません.そこで、このテーブルをパーティションテーブルに変更し、2つのパーティションを設定し、1つのパーティションは最近3ヶ月のデータを格納し、もう1つのパーティションは3ヶ月前のデータを格納することを考慮します.履歴データを別の表領域に格納し、表領域を読み取り専用に設定します.
オープン:
  • は、履歴の変更されないデータを格納するためのテーブル空間olddataを新規に作成します.
  • ビジネスが停止したときに、パーティションテーブルを作成します.
  • 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;
    
  • データに誤りがないことを確認した後、C_MONITORLOG dropが落ちる.
  • 変更C_MONITORLOG_TMPテーブル名はC_MONITORLOG.
  • oldata表領域データをバックアップし、C_MONITORLOG:P 1データは1回の個別バックアップを行う.
  • 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;