管理人Kのひとりごと

デジモノレビューやプログラミングや写真など

アーカイブログモード関連の操作を確認(Oracle)

OracleのアーカイブREDOログ関連の取り回しを再確認。

やったこと

/* バージョン */
SQL> select version_full from v$instance;
VERSION_FULL
-----------------
18.3.0.0.0

/* REDOロググループの確認 */
/* REDOログは複数多重化して、ローテーションで管理する */
/* 3×2ファイルある */
SQL> select group#, status, sequence#, members,archived from v$log;
    GROUP# STATUS            SEQUENCE#    MEMBERS ARC
---------- ---------------- ---------- ---------- ---
         1 INACTIVE                 28          2 NO
         2 INACTIVE                 29          2 NO
         3 CURRENT                  30          2 NO

/* REDOログファイルの確認 */
SQL> select lg.group#, lgf.member from v$log lg inner join v$logfile lgf on lg.group# = lgf.group# order by group#;

    GROUP# MEMBER
---------- ------------------------------------------------------------------------------------------------------------------------
         1 /u01/app/oracle/oradata/ORCL/onlinelog/o1_mf_1_g2pb8wxr_.log
         1 /u01/app/oracle/fast_recovery_area/ORCL/onlinelog/o1_mf_1_g2pbgh7o_.log
         2 /u01/app/oracle/oradata/ORCL/onlinelog/o1_mf_2_g2pb8x2s_.log
         2 /u01/app/oracle/fast_recovery_area/ORCL/onlinelog/o1_mf_2_g2pbgh7x_.log
         3 /u01/app/oracle/oradata/ORCL/onlinelog/o1_mf_3_g2pb8x6o_.log
         3 /u01/app/oracle/fast_recovery_area/ORCL/onlinelog/o1_mf_3_g2pbgh8d_.log

/* *余談:フラッシュリカバリ領域→リカバリに必要なファイルを一元管理、領域の自動管理を行える領域 */
/* フラッシュリカバリ領域の場所・サイズの確認 */
SQL> show parameter recovery
NAME                       TYPE        VALUE
-------------------------- ----------- ----------------------------------
db_recovery_file_dest      string      /u01/app/oracle/fast_recovery_area
db_recovery_file_dest_size big integer 12918M

/* フラッシュリカバリ領域の現在の使用量確認 */
SQL> select (space_limit/(1024*1024)) space_limit_mb,(space_used/(1024*1024)) space_used_mb from V$RECOVERY_FILE_DEST;
SPACE_LIMIT_MB SPACE_USED_MB
-------------- -------------
         12918       619.625

/* ログスイッチの実行 */
SQL> alter system switch logfile;

System SWITCHが変更されました。

/* REDOログファイルのステータス確認(3→1へ、28→31へ) */
SQL> select group#, status, sequence#, members,archived from v$log;

    GROUP# STATUS            SEQUENCE#    MEMBERS ARC
---------- ---------------- ---------- ---------- ---
         1 CURRENT                  31          2 NO
         2 INACTIVE                 29          2 NO
         3 ACTIVE                   30          2 NO

/* アーカイブログモードかどうか確認 */
/* パターン1 */
SQL> archive log list;
データベース・ログ・モード                           非アーカイブ・モード
自動アーカイブ                                 無効
アーカイブ先                                  USE_DB_RECOVERY_FILE_DEST
最も古いオンライン・ログ順序                          29
現行のログ順序                                 31

/* パターン2 */
SQL> select name,log_mode from v$database;

NAME      LOG_MODE
--------- ------------
ORCL      NOARCHIVELOG

/* 非アーカイブログモードから、アーカイブログモードへの切り替え */
/* シャットダウン→マウント状態で起動→モード変更→DBオープン */
SQL> shutdown IMMEDIATE
データベースがクローズされました。
データベースがディスマウントされました。
ORACLEインスタンスがシャットダウンされました。
SQL>
SQL> startup mount
ORACLEインスタンスが起動しました。

Total System Global Area   2466249080 bytes
Fixed Size                    8898936 bytes
Variable Size               671088640 bytes
Database Buffers           1778384896 bytes
Redo Buffers                  7876608 bytes
データベースがマウントされました。
SQL>  ALTER DATABASE ARCHIVELOG;
ALTER DATABASE ARCHIVELOG
SQL> archive log list
データベース・ログ・モード                           アーカイブ・ログ・モード
自動アーカイブ                                 有効
アーカイブ先                                  USE_DB_RECOVERY_FILE_DEST
最も古いオンライン・ログ順序                          29
アーカイブする次のログ順序                           31
現行のログ順序                                 31

SQL> alter database open
  2  ;
Databaseが変更されました。

/* アーカイブREDOログファイルの確認(モード変更直後につき、アーカイブログREDOなし) */
SQL> select name,sequence# from v$archived_log;
行が選択されていません

/* ログスイッチさせて、アーカイブREDOログを発生させる */
SQL> select name,sequence# from v$archived_log;

NAME                                                                                                                      SEQUENCE#
------------------------------------------------------------------------------------------------------------------------ ----------
/u01/app/oracle/fast_recovery_area/ORCL/archivelog/2019_02_24/o1_mf_1_31_g749s7cs_.arc                                           31

/* フラッシュリカバリ領域の使用量再確認(使用量が増えているはず) */
/* 10MBほど増えた */
SQL> select (space_limit/(1024*1024)) space_limit_mb,(space_used/(1024*1024)) space_used_mb from V$RECOVERY_FILE_DEST;

SPACE_LIMIT_MB SPACE_USED_MB
-------------- -------------
         12918    629.808594


/* フラッシュリカバリ領域のサイズ変更 */
SQL> ALTER SYSTEM SET DB_RECOVERY_FILE_DEST_SIZE = 4294967296 scope=both;
System SETが変更されました。

/* 再度フラッシュリカバリ領域のサイズと使用率確認 */
/* フラッシュリカバリ領域サイズ枯渇によるDB停止からの復旧を後程試す */
SQL> select (space_limit/(1024*1024)) space_limit_mb,(space_used/(1024*1024)) space_used_mb from V$RECOVERY_FILE_DEST;

SPACE_LIMIT_MB SPACE_USED_MB
-------------- -------------
          4096    629.808594

余談

今回、Oracle18c付属の「SQLcl」(SQL*PlusのJava実装&機能追加)を使ってみました。TABキーで補完が効くなど、細かな使い勝手が向上していましたが、時折謎の引っ掛かりが発生するのが気になりました。