オラクる。

oracle専門ブログにしてみようかな~っと

2015年04月

制御ファイルが全損した場合のRMANによるリストアはリカバリカタログを作成していると簡単です。

SQL> SELECT name FROM v$controlfile;

NAME
--------------------------------------------------------------------------------
/u01/app/oracle/oradata/orcl/control01.ctl
/u01/app/oracle/flash_recovery_area/orcl/control02.ctl

SQL> !rm -rf /u01/app/oracle/oradata/orcl/control01.ctl /u01/app/oracle/flash_recovery_area/orcl/control02.ctl


擬似障害のためにコントロールファイルを全部削除します。

SQL> SHUTDOWN ABORT
ORACLEインスタンスがシャットダウンされました。

SQL> STARTUP
ORACLEインスタンスが起動しました。

Total System Global Area  839282688 bytes
Fixed Size                  2233000 bytes
Variable Size             578817368 bytes
Database Buffers          251658240 bytes
Redo Buffers                6574080 bytes
ORA-00205: ?????????????????????????????????????????

インスタンスをシャットダウンし、スタートさせようとするとエラーで終わってしまいます。

SQL> SELECT status FROM v$instance;

STATUS
------------------------------------
STARTED

NOMUNT状態で止まってしまいます。

[oracle@node01 ~]$ rman target / catalog rcatowner/password@rcat
Recovery Manager: Release 11.2.0.3.0 - Production on 水 4月 22 14:46:10 2015

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

ターゲット・データベース: ORCLに接続されました(マウントされていません)
リカバリ・カタログ・データベースに接続されました。

リカバリカタログ付きでrmanを起動します。


RMAN> restore CONTROLFILE;

restoreが開始されました(開始時間: 15-04-22)
チャネル: ORA_DISK_1が割り当てられました
チャネルORA_DISK_1: SID=133 デバイス・タイプ=DISK

チャネルORA_DISK_1: データファイル・バックアップ・セットのリストアを開始しています
チャネルORA_DISK_1: 制御ファイルをリストア中です
チャネルORA_DISK_1: バックアップ・ピース/flash_recovery/ORCL/backupset/2015_04_20/o1_mf_ncsnf_TAG20150420T211608_bm9vjsds_.bkpから読取り中です
チャネルORA_DISK_1: ピース・ハンドル=/flash_recovery/ORCL/backupset/2015_04_20/o1_mf_ncsnf_TAG20150420T211608_bm9vjsds_.bkp タグ=TAG20150420T211608
チャネルORA_DISK_1: バックアップ・ピース1がリストアされました
チャネルORA_DISK_1: リストアが完了しました。経過時間: 00:00:01
出力ファイル名=/u01/app/oracle/oradata/orcl/control01.ctl
出力ファイル名=/u01/app/oracle/flash_recovery_area/orcl/control02.ctl
restoreが完了しました(完了時間: 15-04-22)


制御ファイルをリストアします。
必要なバックアップファイルは自動的に選択してくれます。

RMAN> ALTER DATABASE MOUNT;

データベースがマウントされました。

RMAN> RECOVER DATABASE;

recoverが開始されました(開始時間: 15-04-22)
implicit crosscheck backupが開始されました(開始時間: 15-04-22)
チャネル: ORA_DISK_1が割り当てられました
チャネルORA_DISK_1: SID=125 デバイス・タイプ=DISK
2オブジェクトをクロスチェックしました
implicit crosscheck backupが完了しました(完了時間: 15-04-22)

implicit crosscheck copyが開始されました(開始時間: 15-04-22)
チャネルORA_DISK_1の使用
implicit crosscheck copyが完了しました(完了時間: 15-04-22)

リカバリ領域ですべてのファイルを検索しています
ファイルをカタログに追加しています...

(中略)

アーカイブ・ログ・ファイル名=/flash_recovery/ORCL/archivelog/2015_04_22/o1_mf_1_84_bmg6vqt4_.arc スレッド=1 順序=84
アーカイブ・ログ・ファイル名=/u01/app/oracle/oradata/orcl/redo01.log スレッド=1 順序=85
メディア・リカバリが完了しました。経過時間: 00:00:02
recoverが完了しました(完了時間: 15-04-22)

データベースをリカバリします。

RMAN> ALTER DATABASE OPEN RESETLOGS;

データベースがオープンしました。
データベースの新しいインカネーションがリカバリ・カタログに登録されました
リカバリ・カタログの完全再同期を開始しています
完全再同期が完了しました
リカバリ・カタログの完全再同期を開始しています
完全再同期が完了しました

SQL> SELECT status FROM v$instance;

STATUS
------------------------------------
OPEN


RESETLOGSオプション付きでデータベースをオープンします。
これで制御ファイル全損からのリストアは完了です。

一方、リカバリカタログを作成していない場合、自動バックアップ機能によりバックアップされた制御ファイルを手動で指定する必要があるようです。

「制御ファイルの自動バックアップ機能」を有効しておくと、制御ファイルの更新時に、制御ファイルが自動的にバックアップされます。
nocatalogでRMANのバックアップを管理している場合は、バックアップの情報が制御ファイルに書き込まれるので、特に重要です。

RMAN> SHOW CONTROLFILE AUTOBACKUP;

db_unique_name ORCLのデータベースにおけるRMAN構成パラメータ:
CONFIGURE CONTROLFILE AUTOBACKUP OFF; # default

RMAN> CONFIGURE CONTROLFILE AUTOBACKUP ON;

新しいRMAN構成パラメータ:
CONFIGURE CONTROLFILE AUTOBACKUP ON;
新しいRMAN構成パラメータが格納できました

RMAN> SHOW CONTROLFILE AUTOBACKUP;

db_unique_name ORCLのデータベースにおけるRMAN構成パラメータ:
CONFIGURE CONTROLFILE AUTOBACKUP ON;


バックアップ設定の「CONTROLFILE AUTOBACKUP」をONに設定することで自動バックアップが有効になります。
デフォルトはOFFです。

RMAN> BACKUP TABLESPACE users;

backupが開始されました(開始時間: 15-04-21)
リカバリ・カタログのかわりにターゲット・データベース制御ファイルを使用しています
チャネル: ORA_DISK_1が割り当てられました
チャネルORA_DISK_1: SID=30 デバイス・タイプ=DISK
チャネルORA_DISK_1: フル・データファイル・バックアップ・セットを開始しています
チャネルORA_DISK_1: バックアップ・セットにデータファイルを指定しています
入力データファイル・ファイル番号=00004 名前=/u01/app/oracle/oradata/orcl/users01.dbf
チャネルORA_DISK_1: ピース1(15-04-21)を起動します
チャネルORA_DISK_1: ピース1(15-04-21)が完了しました
ピース・ハンドル=/flash_recovery/ORCL/backupset/2015_04_21/o1_mf_nnndf_TAG20150421T233250_bmdqwlmw_.bkp タグ=TAG20150421T233250 コメント=NONE
チャネルORA_DISK_1: バックアップ・セットが完了しました。経過時間: 00:00:01
backupが完了しました(完了時間: 15-04-21)

Control File and SPFILE Autobackupが開始されました(開始時間: 15-04-21)
ピース・ハンドル=/flash_recovery/ORCL/autobackup/2015_04_21/o1_mf_s_877649571_bmdqwmv6_.bkp コメント=NONE
Control File and SPFILE Autobackupが完了しました(完了時間: 15-04-21)


試しにRMANでバックアップを取得してみました。
バックアップ情報が制御ファイルに書き込まれ、制御ファイルの自動バックアップ機能が動作しました。

RMAN> CONFIGURE CONTROLFILE AUTOBACKUP FORMAT
2> FOR DEVICE TYPE DISK TO '/u01/app/oracle/oradata/orcl/ctl_auto/cf_ORCL_auto_%F';

リカバリ・カタログのかわりにターゲット・データベース制御ファイルを使用しています
新しいRMAN構成パラメータ:
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/u01/app/oracle/oradata/orcl/ctl_auto/cf_ORCL_auto_%F';
新しいRMAN構成パラメータが格納できました


また、格納場所を指定しない場合はフラッシュリカバリ領域にバックアップが格納されます。
特定の場所に保管したい場合は「CONTROLFILE AUTOBACKUP FORMAT」に指定します。

RMAN> BACKUP TABLESPACE users;

backupが開始されました(開始時間: 15-04-21)
チャネル: ORA_DISK_1が割り当てられました
チャネルORA_DISK_1: SID=23 デバイス・タイプ=DISK
チャネルORA_DISK_1: フル・データファイル・バックアップ・セットを開始しています
チャネルORA_DISK_1: バックアップ・セットにデータファイルを指定しています
入力データファイル・ファイル番号=00004 名前=/u01/app/oracle/oradata/orcl/users01.dbf
チャネルORA_DISK_1: ピース1(15-04-21)を起動します
チャネルORA_DISK_1: ピース1(15-04-21)が完了しました
ピース・ハンドル=/flash_recovery/ORCL/backupset/2015_04_21/o1_mf_nnndf_TAG20150421T235909_bmdsfxg5_.bkp タグ=TAG20150421T235909 コメント=NONE
チャネルORA_DISK_1: バックアップ・セットが完了しました。経過時間: 00:00:01
backupが完了しました(完了時間: 15-04-21)

Control File and SPFILE Autobackupが開始されました(開始時間: 15-04-21)
ピース・ハンドル=/u01/app/oracle/oradata/orcl/ctl_auto/cf_ORCL_auto_c-1404902188-20150421-02 コメント=NONE
Control File and SPFILE Autobackupが完了しました(完了時間: 15-04-21)


再度、RMANによるバックアップを実行し、制御ファイルの自動バックアップの格納先が変更されていることを確認しました。

フラッシュリカバリエリアを有効にしてみます。
有効にすることで、バックアップ関連ファイルの一元管理が可能になり、またサイズの管理が自動的に行なわれます。

[root@node01 ~]# mkdir /flash_recovery
[root@node01 ~]# chown oracle:oinstall /flash_recovery/


フラッシュリカバリエリア用のフォルダを作成し、所有者をoracleユーザーに変更します。

[oracle@node01 ~]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.3.0 Production on 土 4月 18 17:52:04 2015

Copyright (c) 1982, 2011, Oracle.  All rights reserved.



Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
に接続されました。

SQL> show parameter DB_RECOVERY_FILE_DEST

NAME                                 TYPE
------------------------------------ ---------------------------------
VALUE
------------------------------
db_recovery_file_dest                string

db_recovery_file_dest_size           big integer
0


SQL*PLUSに接続し、現在のフラッシュリカバリエリアの情報を確認します。
初期化パラメーターのDB_RECOVERY_FILE_DESTから確認できます。

SQL> alter system set DB_RECOVERY_FILE_DEST='/flash_recovery' scope=both;
alter system set DB_RECOVERY_FILE_DEST='/flash_recovery' scope=both
*
行1でエラーが発生しました。:
ORA-02097: 指定した値が無効なので、パラメータを変更できません。 ORA-19802:
DB_RECOVERY_FILE_DEST_SIZEなしでDB_RECOVERY_FILE_DESTを使用できません


サイズ(db_recovery_file_dest_size)を決める前に場所(db_recovery_file_dest)を決めようとするとエラーが発生します。

SQL> alter system set DB_RECOVERY_FILE_DEST_SIZE=10G scope=both;

システムが変更されました。

SQL> alter system set DB_RECOVERY_FILE_DEST='/flash_recovery' scope=both;

システムが変更されました。


サイズを決めてから、ファイルサイズを決めてきました。

SQL> show parameter DB_RECOVERY_FILE_DEST


NAME                                 TYPE
------------------------------------ ---------------------------------
VALUE
------------------------------
db_recovery_file_dest                string
/flash_recovery
db_recovery_file_dest_size           big integer
10G


設定が反映されていることを確認しました。

RMANのリポジトリ用DBであるリカバリカタログを作成することで、リポジトリの2重化による可用性の向上が見込めます。
また、リポジトリの長期保存も実現できます。

SQL> show parameter CONTROL_FILE_RECORD_KEEP_TIME

NAME                                 TYPE
------------------------------------ ---------------------------------
VALUE
------------------------------
control_file_record_keep_time        integer
7


制御ファイルにもレポジトリは保管されますが、保管期間はCONTROL_FILE_RECORD_KEEP_TIMEパラメーターに記載されています。
デフォルトで1週間と短めです。

[oracle@node01 ~]$ export ORACLE_SID=rcat
[oracle@node01 ~]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.3.0 Production on 金 4月 17 19:31:26 2015

Copyright (c) 1982, 2011, Oracle.  All rights reserved.



Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
に接続されました。

では、リカバリカタログを作成しましょう。
あらかじめ、新しいデータベースを作成しています。

SQL> CREATE TABLESPACE rcat_tbs DATAFILE '/u01/app/oracle/oradata/reco/rcat_tbs01.dbf'
  2  SIZE 15M;

表領域が作成されました。


リカバリカタログ用の表領域を作成します。
サイズは15M程度でいいです。

SQL> CREATE USER rcatowner IDENTIFIED BY password
  2  TEMPORARY TABLESPACE temp
  3  DEFAULT TABLESPACE rcat_tbs
  4  QUOTA UNLIMITED ON rcat_tbs;

ユーザーが作成されました。

SQL> GRANT recovery_catalog_owner TO rcatowner;

権限付与が成功しました。


新しい表領域を所有するユーザーを作成します。
そして、新しいユーザーにrecovery_catalog_ownerロールを付与します。

[oracle@node01 ~]$ rman

Recovery Manager: Release 11.2.0.3.0 - Production on 金 4月 17 19:58:05 2015

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

RMAN> CONNECT CATALOG rcatowner/password@rcat

リカバリ・カタログ・データベースに接続されました。

RMAN> CREATE CATALOG;

リカバリ・カタログが作成されました。

rmanで新しいデータベースに接続し、リカバリカタログを作成します。
まだ、どのデータベースを管理するのかは決まっていません。

[oracle@node01 ~]$ export ORACLE_SID=orcl
[oracle@node01 ~]$ rman TARGET / CATALOG rcatowner/password@rcat

Recovery Manager: Release 11.2.0.3.0 - Production on 金 4月 17 19:59:35 2015

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

ターゲット・データベース: RCAT (データベースID=649438833)に接続されました
リカバリ・カタログ・データベースに接続されました。

rmanでバックアップ取得対象のデータベースとリカバリカタログに接続します。

RMAN> REGISTER DATABASE;

データベースがリカバリ・カタログに登録されました。
リカバリ・カタログの完全再同期を開始しています
完全再同期が完了しました


カタログファイルバックアップ取得対象のデータベースを登録しました。
これでデータベースをバックアップすると情報がカタログファイルに書き込まれます。

rlwrapを利用することでsqlplusがとても使いやすくなります。
例えば・・・
・↑↓キーによる履歴機能
・tabキーによる補完機能
要は通常のコマンドラインと同様の機能になるのです。

http://utopia.knoware.nl/~hlub/uck/rlwrap/

こちらからダウンロードしてください。

[root@node01 rlwrap-0.42]# yum install readline-devel

readline-develが必要なので事前にインストールしておきます。

[root@node01 ~]# tar zxvf rlwrap-0.42.tar.gz

[root@node01 ~]# cd rlwrap-0.42
[root@node01 rlwrap-0.42]# ./configure
[root@node01 rlwrap-0.42]# make
[root@node01 rlwrap-0.42]# make install

[root@node01 rlwrap-0.42]# whereis rlwrap
rlwrap: /usr/local/bin/rlwrap

ソースを解凍し、コンパイル、インストールを行ないます。

[oracle@node01 ~]$ rlwrap sqlplus

SQL*Plus: Release 11.2.0.1.0 Production on 木 4月 16 14:49:53 2015

Copyright (c) 1982, 2009, Oracle.  All rights reserved.

ユーザー名を入力してください: system
パスワードを入力してください:


Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
に接続されました。


「rlwrap sqlplus」と実行することで、rlwrapの機能を利用することが出来ます。
パスワードの入力に****と表示されていたり、↑↓キーによる履歴機能も有効になっています。

http://www.linuxification.at/rlwrap_ext.html.en

補完機能は、こちらからrlwrap-extensionsを追加でダウンロードします。

[oracle@node01 ~]$ mkdir rlwrap-extensions
[oracle@node01 ~]$ cd rlwrap-extensions/
[oracle@node01 rlwrap-extensions]$ tar zxvf rlwrap-extensions-V11-0.05.tar.gz


ホームフォルダにrlwrap-extensionsというフォルダを作成し、ダウンロードしたファイルを解凍します。

[oracle@node01 ~]$ rlwrap -if /home/oracle/rlwrap-extensions/sqlplus sqlplus

フォルダ内のsqlplusというファイルを-ifオプションで指定すれば、SQLの補完機能を利用することが出来ます。

[oracle@node01 ~]$ alias sqlplus="rlwrap -if /home/oracle/rlwrap-extensions/sqlplus sqlplus"

sqlplusのエイリアスとして登録しておきました。

このページのトップヘ