そういうのがいいブログ

SIerで働く30代サラリーマンSEがインフラエンジニアに憧れてLinux・クラウド・AWSの勉強をするブログ

【Oracle】RMANバックアップのスケジュール設定【cronで自動化】

※[PR]当ブログの記事の中にはプロモーションが含まれています。

RMANバックアップのスケジュール設定

【Oracle19c】RMANバックアップ実行をスケジュール設定する方法【CentOS7・cronで自動化】

Oracle19をアーカイブログモードで運用していて、
バックアップ取得および不要ファイル削除を自動化する方法を探している方へ。

OracleのRMANバックアップをスケジュール化して自動実行する方法を知りたい

Oracle19cデータベースをアーカイブログモードで運用していると、 アーカイブログファイルがどんどん増えていきます。 そのため、定期的にバックアップを取得して、古いアーカイブファイルを削除していかないと、 ディスク使用率が100%になってしまい、最悪の場合Oracleデータベースが起動できなくなってしまいます。

OracleのRMANバックアップ取得をスケジュール化して自動実行する方法を紹介します

本記事では、下記の内容を解説します。

  1. Oracleのバックアップ取得を定期的に実行しなければいけない理由
  2. RMANでデータベースのバックアップを実行するシェルの書き方
  3. RMANで不要ファイルを削除するシェルの書き方
  4. 作成したシェルをcronに登録して定期的・自動的にスケジュール実行する方法
  5. ラクルデータベースのおススメの勉強法の紹介

この記事を書いている私は、某SIerに勤務しながら、
WEB系エンジニア・インフラエンジニアに憧れて、プログラミングおよびインフラ技術の勉強をしています。
私が実機で試したコマンドや画像を載せて書いています。
記事の信頼性担保に繋がると思います。

Oracleはバックアップ取得を定期的に実行する必要がある

Oracleデータベースをアーカイブログモードで運用しているときは、
RMANでのバックアップ取得を定期的に実行する必要があります。

理由は、定期的にバックアップを取得して古いアーカイブログファイルを削除していかないと、
いずれディスク使用率100%になってしまい、
「ORA-19809・ORA-19804・ORA-19815・ORA-16038」等のエラー
でデータベースが起動できなくなってしまうからです。

実際にエラーが起きたときに対処した手順は、以前に以下の記事に書いています。
「ORA-19809・ORA-19804・ORA-19815・ORA-16038」エラーがおきたので、
古いアーカイブログファイルを削除して、さらにRMANバックアップを実行して不要ファイルを削除しました。

souiunogaii.hatenablog.com

RMANでデータベースのバックアップを実行するシェルの書き方

RMANでデータベースのバックアップを実行するスクリプトと、
そのスクリプトを実行するシェルを用意しておきます。

シェルを作成しておくと、毎回、手動でコマンドを書かなくてよいからです。

実際に作成したシェルの内容は以下です。

バックアップを実行するスクリプト「database_backup.rman」

backup database plus archivelog delete all input;

そのスクリプトを実行するシェル「oracle_rman_backup.sh」

#/bin/bash
 
#環境変数設定
export ORACLE_SID=ORCLCDB
export ORACLE_BASE=/opt/oracle
export ORACLE_HOME=$ORACLE_BASE/product/19c/dbhome_1
export NLS_LANG=Japanese_Japan.AL32UTF8
export PATH=$PATH:$ORACLE_HOME/bin
 
#開始日時の取得
datetime=$(date '+%Y%m%d_%H%M%S')
 
#ログファイル名設定
LogDir=/home/oracle/log/rmanlog/
LogFile=backup_database_$datetime.log
LogFilePath=$LogDir$LogFile
 
echo $LogFilePath
 
#RMANバックアップ実行
rman target / @/home/oracle/system/shl/database_backup.rman log=$LogFilePath
 
#リターンコード
returncd=$?
echo $returncd
 
exit $returncd

RMANで不要ファイルを削除するシェルの書き方

RMANで不要ファイルを削除するスクリプトと、
そのスクリプトを実行するシェルを用意しておきます。

シェルを作成しておくと、毎回、手動でコマンドを書かなくてよいからです。

実際に作成したシェルの内容は以下です。

不要ファイルを削除するスクリプト「delete_obsolete.rman」

delete obsolete;
exit

そのスクリプトを実行するシェル「oracle_rman_delete.sh」

#/bin/bash
 
#環境変数設定
export ORACLE_SID=ORCLCDB
export ORACLE_BASE=/opt/oracle
export ORACLE_HOME=$ORACLE_BASE/product/19c/dbhome_1
export NLS_LANG=Japanese_Japan.AL32UTF8
export PATH=$PATH:$ORACLE_HOME/bin
 
#開始日時の取得
datetime=$(date '+%Y%m%d_%H%M%S')
 
#ログファイル名設定
LogDir=/home/oracle/log/rmanlog/
LogFile=delete_obsolete_$datetime.log
LogFilePath=$LogDir$LogFile
 
echo $LogFilePath
 
#RMAN不要ファイル削除実行
rman target / @/home/oracle/system/shl/delete_obsolete.rman log=$LogFilePath
 
#リターンコード
returncd=$?
echo $returncd
 
exit $returncd

作成したシェルをcronに登録して定期的・自動的にスケジュール実行する方法

作成したシェルをcronに登録して定期的・自動的にスケジュール実行されるようにしておきます。

cronに登録しておくと、スケジュール化された日時に定期的に自動でシェルが実行できるからです。

実際に、cronにシェル実行をスケジュール登録する手順は以下です。

作成したスクリプトとシェルをCentOSサーバのoracleユーザのhomeディレクトリに配置

今回は、/home/oracle/system/shlに配置しました。

noanacronのインストールおよびanacronの削除

CentOS7は、デフォルトでは「anacron」がインストールされていますが、
厳密な日時指定ができないので、今回は「noanacron」の方をインストールします。

qiita.com

yum install cronie-noanacron
[root@SV-PLUTO ~]# yum install cronie-noanacron
読み込んだプラグイン:langpacks, ulninfo
ol7_UEKR5                                                                                        | 2.5 kB  00:00:00
ol7_latest                                                                                       | 2.7 kB  00:00:00
(1/4): ol7_UEKR5/x86_64/updateinfo                                                               |  61 kB  00:00:00
(2/4): ol7_latest/x86_64/updateinfo                                                              | 2.7 MB  00:00:03
(3/4): ol7_latest/x86_64/primary_db                                                              |  28 MB  00:00:18
(4/4): ol7_UEKR5/x86_64/primary_db                                                               |  15 MB  00:00:21
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ cronie-noanacron.x86_64 0:1.4.11-23.el7 を インストール
--> 依存性解決を終了しました。

依存性を解決しました

========================================================================================================================
 Package                          アーキテクチャー       バージョン                    リポジトリー                容量
========================================================================================================================
インストール中:
 cronie-noanacron                 x86_64                 1.4.11-23.el7                 ol7_latest                  14 k

トランザクションの要約
========================================================================================================================
インストール  1 パッケージ

総ダウンロード容量: 14 k
インストール容量: 396
Is this ok [y/d/N]: y
Downloading packages:
cronie-noanacron-1.4.11-23.el7.x86_64.rpm                                                        |  14 kB  00:00:01
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  インストール中          : cronie-noanacron-1.4.11-23.el7.x86_64                                                   1/1
  検証中                  : cronie-noanacron-1.4.11-23.el7.x86_64                                                   1/1

インストール:
  cronie-noanacron.x86_64 0:1.4.11-23.el7

完了しました!
yum remove cronie-anacron
[root@SV-PLUTO ~]# yum remove cronie-anacron
読み込んだプラグイン:langpacks, ulninfo
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ cronie-anacron.x86_64 0:1.4.11-23.el7 を 削除
--> 依存性解決を終了しました。

依存性を解決しました

========================================================================================================================
 Package                       アーキテクチャー      バージョン                      リポジトリー                  容量
========================================================================================================================
削除中:
 cronie-anacron                x86_64                1.4.11-23.el7                   @anaconda/7.7                 41 k

トランザクションの要約
========================================================================================================================
削除  1 パッケージ

インストール容量: 41 k
上記の処理を行います。よろしいでしょうか? [y/N]y
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  削除中                  : cronie-anacron-1.4.11-23.el7.x86_64                                                     1/1
  検証中                  : cronie-anacron-1.4.11-23.el7.x86_64                                                     1/1

削除しました:
  cronie-anacron.x86_64 0:1.4.11-23.el7

完了しました!

crontabの編集

ユーザーはoracle でサーバにログインして、crontabを編集します。(viと同じ要領で編集ができます)
(オプション-eで編集、-lで確認ができます)

crontab -e
crontab -l
[oracle@SV-PLUTO ~]$ crontab -l
0 2 * * 0 /home/oracle/system/shl/oracle_rman_backup.sh
0 4 * * 0 /home/oracle/system/shl/oracle_rman_delete.sh

今回は以下のように設定しました。

  • 毎週(日曜=0)の午前2時00分に、バックアップのシェルを実行
  • 毎週(日曜=0)の午前4時00分に、不要ファイル削除のシェルを実行

RMANログの確認

RMANのログ出力先に指定した、/home/oracle/log/rmanlog に、確かにログが出力されていました。

Recovery Manager: Release 19.0.0.0.0 - Production on 日 3月 22 02:00:02 2020
Version 19.3.0.0.0

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

ターゲット・データベース: ORCLCDB (DBID=2800378676)に接続されました

RMAN> backup database plus archivelog delete all input;
2> 

backupを20-03-22で開始しています
(途中省略)
Recovery Managerが完了しました。
Recovery Manager: Release 19.0.0.0.0 - Production on 日 3月 22 04:00:01 2020
Version 19.3.0.0.0

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

ターゲット・データベース: ORCLCDB (DBID=2800378676)に接続されました

RMAN> delete obsolete;

(途中省略)
Recovery Managerが完了しました。

cronスケジュール実行の結果確認

cronのログも確認します。

/var/log/cron-YYYYMMDD
Mar 22 02:00:01 SV-PLUTO CROND[2551]: (oracle) CMD (/home/oracle/system/shl/oracle_rman_backup.sh)
Mar 22 04:00:01 SV-PLUTO CROND[8832]: (oracle) CMD (/home/oracle/system/shl/oracle_rman_delete.sh)

まとめ

OracleのRMANバックアップ取得と不要ファイル削除をするシェルを、
CentOS7のcronに登録することでスケジュール実行する設定ができました

  1. Oracleのバックアップ取得を定期的に実行しなければいけない
  2. RMANでデータベースのバックアップを実行するシェルを用意しておく
  3. RMANで不要ファイルを削除するシェルも用意しておく
  4. シェルをcronに登録しておけば定期的・自動的にスケジュール実行できる

ラクルデータベースのおススメの勉強法の紹介

私は、某SIerに勤務しながら、入社以来10年以上、オラクルデータベースを使用したシステムに関わる仕事をしています。

ラクルデータベースについて、仕事場以外でも勉強をしたい、おススメの勉強法を知りたい、と考えている方のために、
①おすすめの書籍と、②おすすめのオンライン学習サイト、 を紹介します。

働きながら勉強するための、おススメの書籍とオンラインで学習できるサイトの紹介です

ラクルデータベースの勉強ができるおススメ書籍

朝の通勤時や帰宅時の電車の中や、社外打合せへの移動中などに勉強するなら、やはり書籍が一番だと思います。

Oracleの基本 ~データベース入門から設計/運用の初歩まで

技術エキスパートとして認定されたOracle ACEの渡部亮太さんの書かれた本です。

https://twitter.com/wrcsus4twitter.com

本書では、Oracle初心者/新人エンジニアが押さえておくべき知識とスキルを、現場で活躍するOracleエンジニアたちが、わかりやすく丁寧に解説。
Oracleの使い方はもちろん、データベースの基礎知識から、データ操作のためのSQL、テーブル設計、データベース運用/管理の基礎までしっかり押さえ、実務で使える入門スキルを身につけられます。
Oracleを学びたいすべての人に最適な入門書です。

Oracleの基本 ~データベース入門から設計/運用の初歩まで

プロとしてのOracleアーキテクチャ入門【第2版】

もう1冊、こちらもOracle ACEの渡部亮太さんの書かれた本です。

本書は、Oracle Databaseのアーキテクチャ(内部構成)について解説した入門書です。 本書の内容を理解することで「Oracleの動作の仕組み」を本質的に理解することができます。 これからOracleを使用する初心者の方から、実際にシステムの開発や運用管理を行っている DBエンジニアやシステムエンジニアの方を対象としています。

プロとしてのOracleアーキテクチャ入門【第2版】(12c、11g、10g 対応) 図解と実例解説で学ぶ、データベースの仕組み (Oracle現場主義)

ラクルデータベースの勉強ができるオンライン学習サイト

iStudy

ラクルのeラーニングサイトといえば、「iStudy」です。
ラクル関連のいろいろなコースが用意されています。

https://www.istudy.co.jp/products/training/list/it/database?a8=s7Jmh7cw.IM0943bcaLmnD3k0J16MwDZcaLVQ1eubuKw.IJDo4JwjbXtMI1QYQXMFuHbe5J2F7Jmgs00000020030001

f:id:souiunogaii:20200118213515j:plain

f:id:souiunogaii:20200118213502j:plain