3章 RMANバックアップ その1
本章ではRMANを使用したバックアップの取得について確認していきます。
RMAN基本コマンド
RMANはOracleが提供するバックアップリカバリを実施するツールです。
RMANはデータベースがどんなファイルシステム(ASM,rawデバイス,OSファイルシステム etc)
でも取得することができるのが特徴です。
それではさっそく使用していきましょう。
RMANの起動方法は以下のとおりです。
  [構文] RMANログイン(パスワード認証)
 $ rman target sysユーザ/パスワード[@ネットサービス名]
  [構文] RMANログイン(OS認証)
 $ rman target /
上記コマンドでtargetというのは使用しているデータベースを表しています。
RMANのログインもSQL*Plusと同様にパスワード認証とOS認証でログインすることができます。
RMANのバックアップ取得
では次にバックアップの取得方法です。
バックアップの取得については全体、表領域単位で取得が可能です。
  [構文] データベース全体バックアップ
 RMAN> BACKUP [ as copy | as backupset ]
 2> DATABASE [ format "バックアップファイル名" ];
データベース全体のバックアップを取得した場合はすべてのデータファイル、制御ファイル、SPFILEが取得されます。
また全体バックアップは、対象のデータファイルや対象の表領域のみリストアすることも可能です。
バックアップファイルのタイプはバックアップセットがデフォルトですが、as copyを指定することでイメージコピーで取得することが出来ます。
  [構文] 表領域単位バックアップ
 RMAN> BACKUP [ as copy | as backupset ]
 2> TABLESPACE 表領域名 [ ,表領域名 ]
 3> [ format "バックアップファイル名" ] ;
  [構文] データファイル単位バックアップ
 RMAN> BACKUP [ as copy | as backupset ]
 2> DATAFILE データファイル名|データファイル番号
 3> [ format "バックアップファイル名" ];
上記コマンドで表領域単位、データファイル単位で取得することができます。また取得したいデータファイル番号を指定することもできます。
データファイル番号はDBA_DATA_FILESで確認できます。
  $ rman target /
  Recovery Manager: Release 12.1.0.1.0 - Production on XX:XX:XX 2017
  Copyright (c) 1982, 2013, Oracle and/or its affiliates. All rights reserved.
  connected to target database: ORCL (DBID=397531058)
  RMAN> select tablespace_name,file_id,file_name from dba_data_files;
  TABLESPACE_NAME             FILE_ID FILE_NAME
  ------------------------ ---------- ---------------------------------------------------
  SYSTEM                            1 /home/oracle/12101/oradata/orcl/system01.dbf
  SYSAUX                            3 /home/oracle/12101/oradata/orcl/sysaux01.dbf
  UNDOTBS                           4 /home/oracle/12101/oradata/orcl/undotbs01.dbf
  USERS                             6 /home/oracle/12101/oradata/orcl/users01.dbf
  
上記のように12c以降ではRMANでSQL文を実行できます。
RMANのデフォルト値
RMANにはデフォルト値が用意されているため、バックアップは「backup database;」だけで取得することが出来ます。
デフォルト値はshowコマンドで確認できます。
  RMAN> show DEVICE TYPE;
  RMAN configuration parameters for database with db_unique_name orcl are:
  CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # default
  
上記ではバックアップ先はディスクに保存、パラレル度は1、バックアップセットで取得することが分かります。
また変更はconfigureコマンドで設定できます。詳細は別の章にて書いていきたいと思います。
NOARCHIVELOGモードでのバックアップ取得
それでは今回はデータベース全体のバックアップを取得してみましょう。
データベースの状態はNOARCHIVELOGモードです。
  $ rman target /
  Recovery Manager: Release 12.1.0.1.0 - Production on XX:XX:XX 2017
  Copyright (c) 1982, 2013, Oracle and/or its affiliates. All rights reserved.
  connected to target database: ORCL (DBID=397531058)
  RMAN> backup database;
  Starting backup at XX-XX-XX
  using channel ORA_DISK_1
  channel ORA_DISK_1: starting full datafile backup set
  channel ORA_DISK_1: specifying datafile(s) in backup set
  RMAN-00571: ===========================================================
  RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
  RMAN-00571: ===========================================================
  RMAN-03009: failure of backup command on ORA_DISK_1 channel at MM/DD/YYYY
  ORA-19602: cannot backup or copy active file in NOARCHIVELOG mode
NOARCHIVELOGではオンラインバックアップの取得が出来ない為、エラーとなりました。
NOARCHIVELOGモードはオフラインバックアップのみ取得が出来ます。
  RMAN> shutdown immediate
  database closed
  database dismounted
  Oracle instance shut down
  RMAN> startup mount
  connected to target database (not started)
  Oracle instance started
  database mounted
  Total System Global Area    1068937216 bytes
  Fixed Size                     2296576 bytes
  Variable Size                746587392 bytes
  Database Buffers             314572800 bytes
  Redo Buffers                   5480448 bytes
  RMAN> backup database;
  Starting backup at 08-JUL-16
  allocated channel: ORA_DISK_1
  channel ORA_DISK_1: SID=6 device type=DISK
  Starting Control File and SPFILE Autobackup at XX-XXX-XX
  piece handle=/home/oracle/recovery_area/ORCL/autobackup/2016_XX_XX/o1_mf_s_
  XX_XX_.bkp comment=NONE
  Finished Control File and SPFILE Autobackup at XX-XXX-XX
データベースをMOUNT状態にし、バックアップを取得しました。
分かりづらいですが、データベース全体のバックアップを取得したので、すべてのデータファイルと
制御ファイル、SPFILEが取得されています。
取得したバックアップの表示
取得したバックアップは自動的には削除されません。
不要なバックアップは削除し、新しく取得するバックアップの為に領域を確保したりする必要があります。
取得したバックアップの情報はlistコマンドで確認できます。
  [構文] バックアップセットの表示
 RMAN> LIST BACKUP [SUMMARY];
  [構文] イメージコピーの表示
 RMAN> LIST COPY;
  [構文] アーカイブログの表示
 RMAN> LIST ARCHIVELOG ALL;
LISTコマンドはその他にも色々な情報が取得できます。
その他はマニュアルを参照ください。
  RMAN> list backup summary;
  List of Backups
  ===============
  Key     TY LV S Device Type Completion Time #Pieces #Copies Compressed Tag
  ------- -- -- - ----------- --------------- ------- ------- ---------- ---
  175     B  F  A DISK        08-JUL-16       1       1       NO         TAG201
  176     B  F  A DISK        08-JUL-16       1       1       NO         TAG201
  177     B  F  A DISK        08-JUL-16       1       1       NO         TAG201
  178     B  F  A DISK        08-JUL-16       1       1       NO         TAG201
  179     B  F  A DISK        08-JUL-16       1       1       NO         TAG201
  RMAN> list backup;
  List of Backup Sets
  ===================
  BS Key  Type LV Size       Device Type Elapsed Time Completion Time
  ------- ---- -- ---------- ----------- ------------ ---------------
  175     Full    6.28G      DISK        00:03:07     26-JUL-16
          BP Key: 175   Status: AVAILABLE  Compressed: NO  Tag: TAG20160726T090
          Piece Name: /u01/app/oracle/product/12.1.0/dbhome_1/dbs/6irbld4t_1_1
          
    List of Datafiles in backup set 175
    File LV Type Ckp SCN    Ckp Time  Name
    ---- -- ---- ---------- --------- ----
    1       Full 478677142  08-JUL-16 /u01/app/・・・/ORCL/system01.dbf
    3       Full 478677142  08-JUL-16 /u01/app/・・・/ORCL/sysaux01.dbf
    4       Full 478677142  08-JUL-16 /u01/app/・・・/ORCL/undotbs01.dbf
    6       Full 478677142  08-JUL-16 /u01/app/・・・/ORCL/users01.dbf
LISTコマンドでどのファイルをバックアップし、どこに保存したか確認できます。
今回の例では「/u01/app/oracle/product/12.1.0/dbhome_1/dbs/6irbld4t_1_1」という
ファイル名でバックアップセットが作成されています。
取得したバックアップの削除
不要になったバックアップはDELETEコマンドで削除することが出来ます。
  [構文] バックアップの削除
 RMAN> DELETE [BACKUP|COPY] TAG タグ名;
上記コマンドを使用して、バックアップセットやイメージコピー、アーカイブログを削除することが出来ます。
  RMAN> delete backup tag TAG20170407T164804;
  allocated channel: ORA_DISK_1
  channel ORA_DISK_1: SID=15 device type=DISK
  allocated channel: ORA_DISK_2
  channel ORA_DISK_2: SID=259 device type=DISK
  List of Backup Pieces
  BP Key  BS Key  Pc# Cp# Status      Device Type Piece Name
  ------- ------- --- --- ----------- ----------- ----------
  342     313     1   1   AVAILABLE   DISK        /home/oracle/flash_reco
  Do you really want to delete the above objects (enter YES or NO)? y
  deleted backup piece
  backup piece handle=/home/oracle/flash_recovery_area/ORCL/autobackup/2017
  
すべてのアーカイブログを削除する場合は、delete allコマンドを使用します。
  RMAN> delete archivelog all;
  released channel: ORA_DISK_1
  released channel: ORA_DISK_2
  allocated channel: ORA_DISK_1
  channel ORA_DISK_1: SID=15 device type=DISK
  allocated channel: ORA_DISK_2
  channel ORA_DISK_2: SID=259 device type=DISK
  List of Archived Log Copies for database with db_unique_name ORCL
  =====================================================================
  Key     Thrd Seq     S Low Time
  ------- ---- ------- - ---------
  2616    1    803     A 15-MAR-17
          Name: /home/oracle/flash_recovery_area/ORCL/archivelog/2017_03_
    ・・・
  Do you really want to delete the above objects (enter YES or NO)? yes
  deleted archived log
  archived log file name=/home/oracle/flash_recovery_area/ORCL/archivelog
  
バックアップを取得するとそれだけディスク領域を使用するため、定期的に削除を行ってください。
その他、バックアップの保存ポリシーも設定でき、不要になったバックアップを自動的に削除することもできます。
本章はNOARCHIVELOGモードでのバックアップ取得について確認していきました。