はじめに
こんにちは!ゆうきです🤗
これまで「ひとりでできるもん」シリーズなどを執筆しています。
関連記事が充実していますのであわせてご覧くださいね。
特にDB停止起動ひとりでできるもん(制御ファイル破壊編)は今回の記事と内容が近しいので是非ご覧ください。
今回は制御ファイルの作成方法をご紹介したいと思います🍀
本記事では、実機操作を通して情報処理技術の理解を深めることを目的としており、
皆様の環境での動作を保証するものではありません。👀
制御ファイル作成スクリプトを作成する
制御ファイルを作成するSQL文を、
現在の制御ファイルから作成できるので最初に作成しましょう!
方法については、マニュアルを読んで操作していきます。
Oracle Database
Release 19
SQL言語リファレンス
13 SQL文: CREATE COMMITからCREATE JAVA
CREATE CONTROLFILE
マニュアルが苦手でも、読んでいるうちに見方がわかってくると思います。
ぜひチャレンジしてみてください。
データベースが正常に動作している状態で次のALTER文を実行して制御ファイル作成スクリプトを出力しましょう。
SQL> ALTER DATABASE BACKUP CONTROLFILE TO TRACE;
[root@localhost ~]# id uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 [root@localhost ~]# date 2020年 12月 8日 火曜日 15:25:57 JST [root@localhost ~]# uname -a Linux localhost.localdomain 4.14.35-1818.3.3.el7uek.x86_64 #2 SMP Mon Sep 24 14:45:01 PDT 2018 x86_64 x86_64 x86_64 GNU/Linux [root@localhost ~]# su - oracle 最終ログイン: 2020/10/01 (木) 17:04:28 JST日時 pts/0 [oracle@localhost ~]$ id uid=1001(oracle) gid=1002(oinstall) groups=1002(oinstall),1001(dba) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 [oracle@localhost ~]$ ls -l 合計 10364 drwxr-x---. 2 oracle oinstall 4096 8月 6 16:12 ORCL -rw-r-----. 1 oracle oinstall 10600448 8月 6 14:00 control01.ctl -rw-r-----. 1 oracle oinstall 3584 7月 15 15:27 spfileorcl.ora -rw-r--r--. 1 oracle oinstall 10 10月 1 17:07 test.txt drwxr-xr-x. 2 oracle oinstall 6 6月 29 17:01 ダウンロード drwxr-xr-x. 2 oracle oinstall 6 6月 29 17:01 テンプレート drwxr-xr-x. 2 oracle oinstall 6 6月 29 17:01 デスクトップ drwxr-xr-x. 2 oracle oinstall 6 6月 29 17:01 ドキュメント drwxr-xr-x. 2 oracle oinstall 6 6月 29 17:01 ビデオ drwxr-xr-x. 2 oracle oinstall 6 6月 29 17:01 音楽 drwxr-xr-x. 2 oracle oinstall 6 6月 29 17:01 画像 drwxr-xr-x. 2 oracle oinstall 6 6月 29 17:01 公開 [oracle@localhost ~]$ pwd /home/oracle [oracle@localhost ~]$ sqlplus / as sysdba SQL*Plus: Release 19.0.0.0.0 - Production on Tue Dec 8 15:26:10 2020 Version 19.3.0.0.0 Copyright (c) 1982, 2019, Oracle. All rights reserved. Connected to an idle instance. SQL> startup ORACLE instance started. Total System Global Area 838858176 bytes Fixed Size 8902080 bytes Variable Size 595591168 bytes Database Buffers 230686720 bytes Redo Buffers 3678208 bytes Database mounted. Database opened. SQL> select host_name, instance_name, status from v$instance; HOST_NAME -------------------------------------------------------------------------------- INSTANCE_NAME ------------------------------------------------ STATUS ------------------------------------ localhost.localdomain orcl OPEN SQL> ALTER DATABASE BACKUP CONTROLFILE TO TRACE AS '/home/oracle/control01.sql'; Database altered. SQL> quit Disconnected from Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production Version 19.3.0.0.0 [oracle@localhost ~]$ ls -l 合計 10372 drwxr-x---. 2 oracle oinstall 4096 8月 6 16:12 ORCL -rw-r----- . 1 oracle oinstall 10600448 8月 6 14:00 control01.ctl -rw-r--r--. 1 oracle oinstall 5495 12月 8 15:44 control01.sql -rw-r-----. 1 oracle oinstall 3584 7月 15 15:27 spfileorcl.ora -rw-r--r--. 1 oracle oinstall 10 10月 1 17:07 test.txt drwxr-xr-x. 2 oracle oinstall 6 6月 29 17:01 ダウンロード drwxr-xr-x. 2 oracle oinstall 6 6月 29 17:01 テンプレート drwxr-xr-x. 2 oracle oinstall 6 6月 29 17:01 デスクトップ drwxr-xr-x. 2 oracle oinstall 6 6月 29 17:01 ドキュメント drwxr-xr-x. 2 oracle oinstall 6 6月 29 17:01 ビデオ drwxr-xr-x. 2 oracle oinstall 6 6月 29 17:01 音楽 drwxr-xr-x. 2 oracle oinstall 6 6月 29 17:01 画像 drwxr-xr-x. 2 oracle oinstall 6 6月 29 17:01 公開 [oracle@localhost ~]$
現在のデータベースの制御ファイルを元にSQL文が生成されました。
今回の作業では、「TO TRACE」 の後に 「AS ‘/home/oracle/control01.sql’」を指定して出力先を明示しているところがポイントですね🤗
制御ファイルを破壊する
データベースが起動している状態では、
次のコマンドで、制御ファイルの配置先を確認できます。
削除コマンドを作りやすくするために配置先を控えておきましょう。
SQL> select name from v$controlfile;
[oracle@localhost ~]$ sqlplus / as sysdba SQL*Plus: Release 19.0.0.0.0 - Production on Mon Dec 28 15:02:55 2020 Version 19.3.0.0.0 Copyright (c) 1982, 2019, Oracle. All rights reserved. Connected to: Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production Version 19.3.0.0.0 SQL> select name from v$controlfile; NAME -------------------------------------------------------------------------------- /opt/oracle/base/oradata/ORCL/control01.ctl /opt/oracle/base/oradata/ORCL/control02.ctl SQL> quit Disconnected from Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production Version 19.3.0.0.0 [oracle@localhost ~]$
確認ができたらデータベースを停止しておきます。
[oracle@localhost ~]$ sqlplus / as sysdba SQL*Plus: Release 19.0.0.0.0 - Production on Tue Dec 8 16:02:39 2020 Version 19.3.0.0.0 Copyright (c) 1982, 2019, Oracle. All rights reserved. Connected to: Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production Version 19.3.0.0.0 SQL> select host_name, instance_name, status from v$instance; HOST_NAME -------------------------------------------------------------------------------- INSTANCE_NAME ------------------------------------------------ STATUS ------------------------------------ localhost.localdomain orcl OPEN SQL> shutdown immediate Database closed. Database dismounted. ORACLE instance shut down. SQL> quit Disconnected from Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production Version 19.3.0.0.0 [oracle@localhost ~]$
データベースの制御ファイルを削除します。
[oracle@localhost ~]$ ls -l /opt/oracle/base/oradata/ORCL 合計 2140240 -rw-r-----. 1 oracle oinstall 10600448 12月 8 16:03 control01.ctl -rw-r-----. 1 oracle oinstall 10600448 12月 8 16:03 control02.ctl -rw-r-----. 1 oracle oinstall 209715712 12月 8 15:34 redo01.log -rw-r-----. 1 oracle oinstall 209715712 12月 8 15:34 redo02.log -rw-r-----. 1 oracle oinstall 209715712 12月 8 16:03 redo03.log -rw-r-----. 1 oracle oinstall 576724992 12月 8 16:03 sysaux01.dbf -rw-r-----. 1 oracle oinstall 734011392 12月 8 16:03 system01.dbf -rw-r-----. 1 oracle oinstall 20979712 8月 25 14:24 temp01.dbf -rw-r-----. 1 oracle oinstall 220209152 12月 8 16:03 undotbs01.dbf -rw-r-----. 1 oracle oinstall 5251072 12月 8 16:03 users01.dbf [oracle@localhost ~]$ rm -f /opt/oracle/base/oradata/ORCL/control01.ctl [oracle@localhost ~]$ rm -f /opt/oracle/base/oradata/ORCL/control02.ctl [oracle@localhost ~]$ ls -l /opt/oracle/base/oradata/ORCL 合計 2119536 -rw-r-----. 1 oracle oinstall 209715712 12月 8 15:34 redo01.log -rw-r-----. 1 oracle oinstall 209715712 12月 8 15:34 redo02.log -rw-r-----. 1 oracle oinstall 209715712 12月 8 16:03 redo03.log -rw-r-----. 1 oracle oinstall 576724992 12月 8 16:03 sysaux01.dbf -rw-r-----. 1 oracle oinstall 734011392 12月 8 16:03 system01.dbf -rw-r-----. 1 oracle oinstall 20979712 8月 25 14:24 temp01.dbf -rw-r-----. 1 oracle oinstall 220209152 12月 8 16:03 undotbs01.dbf -rw-r-----. 1 oracle oinstall 5251072 12月 8 16:03 users01.dbf [oracle@localhost ~]$
制御ファイルが削除された状態になりました。
制御ファイルを作成する
生成されたSQL文を利用して、制御ファイルを作成します。
行頭が「–」になっている行はコメント行なので、使用しません。
CREATE CONTROLFILE文以外のコマンドも書いてあるので、流れがつかみやすいですね
[oracle@localhost ~]$ sqlplus / as sysdba SQL*Plus: Release 19.0.0.0.0 - Production on Wed Dec 9 16:50:12 2020 Version 19.3.0.0.0 Copyright (c) 1982, 2019, Oracle. All rights reserved. Connected to an idle instance. SQL> STARTUP NOMOUNT ORACLE instance started. Total System Global Area 838858176 bytes Fixed Size 8902080 bytes Variable Size 595591168 bytes Database Buffers 230686720 bytes Redo Buffers 3678208 bytes SQL> CREATE CONTROLFILE REUSE DATABASE "ORCL" NORESETLOGS NOARCHIVELOG 2 MAXLOGFILES 16 3 MAXLOGMEMBERS 3 4 MAXDATAFILES 100 5 MAXINSTANCES 8 6 MAXLOGHISTORY 292 7 LOGFILE 8 GROUP 1 '/opt/oracle/base/oradata/ORCL/redo01.log' SIZE 200M BLOCKSIZE 512, 9 GROUP 2 '/opt/oracle/base/oradata/ORCL/redo02.log' SIZE 200M BLOCKSIZE 512, 10 GROUP 3 '/opt/oracle/base/oradata/ORCL/redo03.log' SIZE 200M BLOCKSIZE 512 11 DATAFILE 12 '/opt/oracle/base/oradata/ORCL/system01.dbf', 13 '/opt/oracle/base/oradata/ORCL/sysaux01.dbf', 14 '/opt/oracle/base/oradata/ORCL/undotbs01.dbf', 15 '/opt/oracle/base/oradata/ORCL/users01.dbf' 16 CHARACTER SET JA16SJISTILDE 17 ; Control file created. SQL> RECOVER DATABASE ORA-00283: recovery session canceled due to errors ORA-00264: no recovery required SQL> ALTER DATABASE OPEN; Database altered. SQL> select host_name, instance_name, status from v$instance; HOST_NAME -------------------------------------------------------------------------------- INSTANCE_NAME ------------------------------------------------ STATUS ------------------------------------ localhost.localdomain orcl OPEN SQL> ALTER TABLESPACE TEMP ADD TEMPFILE '/opt/oracle/base/oradata/ORCL/temp01.dbf' 2 SIZE 20971520 REUSE AUTOEXTEND ON NEXT 655360 MAXSIZE 32767M; Tablespace altered. SQL> quit Disconnected from Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production Version 19.3.0.0.0 [oracle@localhost ~]$
正常に制御ファイルが作成できました!
おわりに
生成されたスクリプトを元に制御ファイルを作成できましたでしょうか👀
SQL文を実行するときに、内容を書き換えて制御ファイルの設定値を変更したり
何らかの理由で制御ファイルのバックアップから復旧できない際にSQL文で作成できるなど
応用できる場面がいろいろあります。
CREATE CONTROLFILE文を読むことで、どんな情報が制御ファイルに記録されているのかを知る機会にもなりますね
投稿者プロフィール
- 23ai2024年11月1日Oracle 23aiの新機能 スキーマ権限を使ってみました
- Oracle Cloud2024年10月25日OCI GoldenGate のデータ・レプリケーションとデータ変換のデプロイメントを使用して、データのロードおよび変換を試してみよう。(3/3)
- Oracle Cloud2024年10月24日OCI GoldenGate のデータ・レプリケーションとデータ変換のデプロイメントを使用して、データのロードおよび変換を試してみよう。(2/3)
- Oracle Cloud2024年10月23日OCI GoldenGate のデータ・レプリケーションとデータ変換のデプロイメントを使用して、データのロードおよび変換を試してみよう。(1/3)