2013年2月28日 星期四

Point-In-Time-Recovery (PITR)


PostgreSQL在1995年時開始依循SQL92規範下開發, 因此PITR(Point-In-Time-Recovery)的功能一定會有的, 以下為PITR的實作.
1. 設定環境變數
     # mkdir -p /opt/Backup
     # mkdir -p /opt/Archive
     # chown -R enterprisedb:enterprisedb /opt/Backup
     # chown -R enterprisedb:enterprisedb /opt/Archive

2. 修改 postgresql.conf, 啟動 archive mode.
    wal_level = archive
    archive_mode = on
    archive_command = 'cp -rf %p /opt/Archive/%f'

3. 重新啟動 postgresql
    # service postgresql-9.2 restart

4. 建置測試表單

    # edb-psql -U labuser labs
    edb=# create table alexlab(id number,val varchar2(1000));
    edb=#\q

5. 資料庫完整備份
    # edb-psql -U enterprisedb edb
    edb=# select pg_start_backup('label',true);
    edb=#\q
    # cd /opt/PostgresPlus/9.1AS/
    # tar cfz /opt/Backup/fullbackup.tgz data
    # edb-psql -U enterprisedb edb
    edb=# select pg_stop_backup();
    edb=# select pg_switch_xlog();
    edb=# select pg_switch_xlog();
    edb=#\q

6. 確認備份時間 (T1)
    edb=# select now();

7. 新增 100 筆資料
declare
  i       number := 1;
  MAX_CNT number := 100;
begin
  loop
    if i > MAX_CNT then
       exit;
    end if;
    insert into alexlab values(i,'****************************************************************************************************');
    i := i + 1;
    commit;
  end loop;
end;

8. 確認異動時間 (T2)
    edb=# select now();

9. 回復到 T1 時間時的資料
    9.1. 假設資料庫crash.
    9.2. 將fully backup的資料回復到database的目錄.
    9.3. 設定 recovery.conf檔, 可以指定回復時間點.
            restore_command = 'cp /opt/Archive/%f %p'
            recovery_target_time = '2012-12-14 14:33:22'
    9.4. 重新啟動 postgresql
    9.5. 確認alexlab資料表為 0  筆.

10. 完功.

沒有留言:

張貼留言

HDB 擴充套件 PXF (Pivotal Extension Framework) 應用

在Hadoop生態圈裡, 雖然擁有眾多生態系統工具, 但大多用戶仍然需要的是SQL的操作介面, Pivotal HDB 提供一個在Hadoop上運行的標準SQL引擎介面, 箇中好處開發者最能感受, 但本篇重點不在這, 哈哈~ 主要分享在HDB上可以輕易整合外部資料的應用. ...