全てのOracleデータベースは、制御ファイルを持っている。
制御ファイルはデータベースの物理構造を記録するようなもので、次のような内容が含まれている。
Oracleデータベースの制御ファイルはデータベースと共に作成される。
デフォルトでは、制御ファイルのコピーーは、データベースの作成時に少なくとも1つ作成されることになっている。
データベース作成時に、制御ファイルのコピーを2つ以上作成することをお薦めする。
その後も、制御ファイルを失ったり、制御ファイル内の設定を変更したりする場合には、制御ファイルを作成する必要がある。
1.制御ファイルの命名
- データベースの初期化パラメータ・ファイル内のCONTROL_FILES初期化パラメータによって、
制御ファイルの名前を割り当てる。
CONTROL_FILESには、1つ以上の制御ファイルの名前をカンマで区切って指定する。
インスタンス起動時に、指定されたすべてのファイルが認識され、オープンされる。
インスタンスは指定されたすべての制御ファイルに書込みおよびメンテナンスを行う。
↓
制御ファイルは、データベースの使用中に絶えず更新されている。
よって、Oracleインスタンスが起動し、データベースがMOUNTされる為には、
全ての制御ファイルが使用可能である必要がある。
もし1つでも使用不能になると、データベースはMOUNTされず、データベースは正しく機能しない。
Oracleの起動時
SVRMGR> connect internal
接続されました。
SVRMGR> startup
Oracleインスタンスが起動しました。
システム・グローバル領域合計 24989680バイト
Fixed Size 69616バイト
Variable Size 24637440バイト
Database Buffers 204800バイト
Redo Buffers 77824バイト
データベースがマウントされました。
データベースがオープンされました。
制御ファイルの命名 oracle@miracle /oradata]$ grep control_files /u01/app/oracle/product/8.1.6/dbs/initcorpinfo.ora
# maporter 12/21/91 - bug 76493: Add control_files parameter
control_files = (/oradata/control01.ctl, /oradata/control02.ctl)
- 制御ファイルの名前と場所を取得するには、V$CONTROLFILEビューとV$PARAMETERビューを使用する。
制御ファイルの確認(V$CONTROLFILE) SQL> select NAME from V$CONTROLFILE;
STATUS NAME ------- ------------------------------ /oradata/control01.ctl /oradata/control02.ctl
制御ファイルの確認(V$PARAMETER) SQL> select * from V$PARAMETER
2 where NAME = 'control_files';
NUM NAME TYPE VALUE DESCRIPTION ------ ----------------- ----- ----------------------------------------------- ------------------------ 120 control_files 2 /oradata/control01.ctl, /oradata/control02.ctl control file names list
2.異なるディスク上での制御ファイルの多重化
- 全てOracleのデータベースは、複数の制御ファイルを持ち、それを別々のディスクに格納する必要がある。
ディスク障害によって制御ファイルが破損した場合は、対応するインスタンスを停止させる。
*起動した後、追加したファイルを認識しているかどうか確認できれば終了
現行の制御ファイルの多重化の手順
- データベースを停止する
↓- OSのコマンドを使用して、既存の制御ファイルと異なる位置にコピーする
↓- データベースの初期化パラメータ・ファイルのCONTROL_FILESパラメータを編集して、 新たな制御ファイルの名前を追加するか、
または既存の制御ファイル名を変更する
↓- データベースを再起動する
- 初期化パラメータCONTROL_FILESに、最大8つ の完全修飾制御ファイル名を指定する事で
制御ファイルの多重化を行うことが出来る。
3.制御ファイルの適切な配置
- 制御ファイルのコピーは、それぞれ異なるディスク・ドライブに格納する必要がある。
さらに、オンラインREDOログを多重化している場合は、オンラインREDOログ・グループのメンバーが格納されている
全てのディスク・ドライブに制御ファイルのコピーを格納すること。
このような配置をすることによって、単一のディスク障害のために制御ファイルとオンラインREDOログ・グループが
全て失われる危険を少なくする。
4.制御ファイルのサイズ管理
- 制御ファイルのサイズは、主に、対応するデータベースを作成したCREATE DATABASE文のパラメータ
MAXDATAFILES、MAXLOGFILES、MAXLOGMEMBERS、MAXLOGHISTORY、MAXINSTANCES
に設定された値によって決まる。
パラメータ名 指定内容 MAXDATAFILES 制御ファイルのデータ・ファイル・セクションの初期サイズ設定を指定する。
値がMAXDATAFILESより大きく、DB_FILES以下のファイルを追加しようとした場合、 データ・ファイル・セクションにさらに多くのファイルを格納できるように、 Oracleの制御ファイルが自動的に拡張される。MAXLOGFILES データベース用に作成可能なREDOログ・ファイル・グループの最大数を指定する。
この値を基にして、制御ファイル内でREDOログ・ファイル名に割り当てられる領域が決定される。
この上限値を置き換える唯一の方法は、データベースまたは制御ファイルの再作成。MAXLOGMEMBERS REDOログ・ファイル・グループのメンバー、つまりコピーの最大数を指定する。
この値を基にして、制御ファイル内でREDOログ・ファイル名に割り当てられる領域が決定される。
最小値は1。最大値及びデフォルト値は、使用するOSによって異なる。
この上限値を置き換える唯一の方法は、データベースまたは制御ファイルの再作成。MAXLOGHISTORY Oracle Parallel Serverでの自動メディア・リカバリ用のアーカイブREDOログ・ファイルの最大数を指定する。
この値を基にして、制御ファイル内でアーカイブREDOログ・ファイル名に割り当てられる領域が決定される。
最小値は0。デフォルト値はMAXINSTANCES値の倍数で、使用するOSによって異なる。
最大値は、制御ファイルの最大サイズの制限のみを受ける。MAXINSTANCES 作成したデータベースを同時にマウント及びオープンするインスタンスの最大数を指定する。
この値は、初期化パラメータINSTANCESの値より優先される。
最小値は1。最大値及びデフォルト値は、使用するOSによって異なる。
- 【参考】REDOログファイルの構成に関係のあるパラメータ (*参照 10.REDOログファイルのメンテナンス)
↓
パラメータ名 指定内容 ARCHIVELOG REDOログ・ファイル・グループを再使用する前に、グループの内容をアーカイブする必要があることを指定する。
この句を指定した場合、メディア・リカバリができるようになる。
ARCHIVELOGを設定した場合、オンラインREDOログファイルの構成に影響するのは、
である。
- ログ・スイッチとチェックポイントの数
- 記憶媒体の領域(例えば、アーカイブ先の記憶領域量)
- REDOエントリ(オンラインREDOログ・ファイルに書き込まれる、REDOレコードのこと)の数と量
- CREATE DATABASEコマンドで指定したMAXDATAFILES(データ・ファイルの最大数)などを確認する場合は、
V$CONTROLFILE_RECORD_SECTIONビューを使用する。
RECORDS_TOTAL列は、MAXDATAFILESなどで指定された作成可能なファイルの最大数、
RECORDS_USED列は、現在のデータファイル数を示す。
制御ファイルの各セクションに関する情報の確認(V$CONTROLFILE_RECORD_SECTION) SQL> select * from V$CONTROLFILE_RECORD_SECTION;
TYPE RECORD_SIZE RECORDS_TOTAL RECORDS_USED FIRST_INDEX LAST_INDEX LAST_RECID ----------------- ----------- ------------- ------------ ----------- ---------- ---------- DATABASE 192 1 1 0 0 0 CKPT PROGRESS 1012 1 0 0 0 0 REDO THREAD 104 1 1 0 0 0 REDO LOG 72 16 2 0 0 3 DATAFILE 180 30 5 0 0 5 FILENAME 524 63 8 0 0 0 TABLESPACE 68 30 5 0 0 5 RESERVED1 56 30 0 0 0 0 RESERVED2 1 1 0 0 0 0 LOG HISTORY 36 112 33 1 33 33 OFFLINE RANGE 56 36 0 0 0 0 TYPE RECORD_SIZE RECORDS_TOTAL RECORDS_USED FIRST_INDEX LAST_INDEX LAST_RECID ----------------- ----------- ------------- ------------ ----------- ---------- ---------- ARCHIVED LOG 584 100 0 0 0 0 BACKUP SET 40 50 0 0 0 0 BACKUP PIECE 736 60 0 0 0 0 BACKUP DATAFILE 116 69 0 0 0 0 BACKUP REDOLOG 76 53 0 0 0 0 DATAFILE COPY 660 61 0 0 0 0 BACKUP CORRUPTION 44 46 0 0 0 0 COPY CORRUPTION 40 50 0 0 0 0 DELETED OBJECT 20 101 0 0 0 0 PROXY COPY 852 92 0 0 0 0 RESERVED4 1 2024 0 0 0 0 22行が選択されました。
CREATE CONTROLFILE文を使用して、データベースの新しい制御ファイルを作成することができる。
新しい制御ファイルの作成は、次のような場合に必要となる。
CREATE CONTROLFILE REUSE DATABASE orders_2 LOGFILE GROUP 1 ('diskb:log1.log', 'diskc:log1.log') SIZE 50K, GROUP 2 ('diskb:log2.log', 'diskc:log2.log') SIZE 50K NORESETLOGS DATAFILE 'diska:dbone.dat' SIZE 2M MAXLOGFILES 5 MAXLOGHISTORY 100 MAXDATAFILES 10 MAXINSTANCES 2 ARCHIVELOG; |
警告:CREATE CONTROLFILE文は、指定したデータ・ファイルとオンラインREDOログ・ファイルに
損傷を与える可能性がある。
ファイル名を指定しないと、そのファイル内のデータが失われたり、データベース全体に
アクセス出来なくなることがある。
よって、CREATE CONTROLFILE文を使用する時は、以下の手順に従うこと。
新しい制御ファイルを作成する簡単な手順
- データベースのデータ・ファイルとオンラインREDOログ・ファイルの全てのリストを作成する。
データベース・バックアップの推奨事項に従っていれば、現在のデータベース構造を反映する
データ・ファイルとオンラインREDOログ・ファイルのリストが既にあるはずである。
- データベースを停止する。
- データベースのデータファイルとオンラインREDOログ・ファイル全てのバックアップを作成する。
- 新しいインスタンスを起動する。ただし、データベースのマウントとオープンは行わない。
- CREATE CONTROLFILE文を使用して、データベースの新しい制御ファイルを作成する。
- 新しい制御ファイルのバックアップをオフラインの記憶デバイスに格納する。
- データベースの初期化パラメータ・ファイルを編集する。
データベースの初期化パラメータ・ファイルを編集して、ステップ5とステップ6で作成した制御ファイル全て
(バックアップの制御ファイルを除く)を、CONTROL_FILESパラメータに指定すること。
データベースを改名する場合は、DB_NAMEパラメータを編集して新しい名前を指定する。
- 必要に応じて、データベースをリカバリさせる。データベース・リカバリを行わない場合は、ステップ9にスキップする。
- データベースをオープンする。
1.SQL*Loaderの概要
- SQL*Loaderでは、動作を制御する制御ファイルと1つ以上のデータファイルが、入力用に使用される。
SQL*Loaderの出力先は、Oracleデータベース(データがロードされる)、ログファイル、不良ファイル、 および場合によって必要な廃棄ファイルである。
2.SQL*Loaderの制御ファイル
- SQL*Loaderの制御ファイルは、SQL*Loaderが解釈できる言語で記述されたテキスト・ファイルで、 制御ファイルには、SQL*Loaderが実行するタスクが記述されている。
制御ファイルは、データの場所、データの分析と解釈方法、データの挿入先などをSQL*Loader に通知する。
3.SQL*Loaderへの入力データおよびデータファイル
- SQL*Loader への入力には、制御ファイル以外に、データがあり、制御ファイルに指定された1 つ以上のファイルなどから、 SQL*Loader にデータが読み込まれる。
SQL*Loader から見ると、データファイルのデータは、レコードとして構成されており、データファイルには、固定レコー ド形式、可変レコード形式またはストリーム・レコード形式がある。重要:制御ファイル内部でデータが指定されている場合(INFILE *が制御ファイルに指定されている場合)、
そのデータはデフォルトでレコード終了記号を使用したストリーム・レコード形式として解釈される。
4.BEGINDATA による制御ファイルのデータの識別と、INFILE データファイルの指定
- ユーザーのデータが制御ファイル自体に含まれていて、個別のデータファイルにはない場合は、
最初のデータ・レコードの前に、BEGINDATA キーワードを指定する。
- BEGINDATA は、INFILE*を指定することによって、 INFILE キーワードとともに制御ファイル中で使用される。
注意:制御ファイルにデータが含まれているのに、BEGINDATA キーワードを省略すると、
SQL*Loader が制御情報としてデータを解釈しようとするためにエラー・メッセージが発行される。
データが個別ファイルにある場合は、BEGINDATA キーワードは使用できない。
BEGINDATAの構文
BEGINDATA
data
- INFILE キーワードを使用して、データファイルまたはファイル処理オプション文字列が続くデータファイルを指定できる。
指定するファイルが複数あるときは、INFILE キーワードを複数使用できる。
ロードするデータを制御ファイル内にも記述した場合は、 ファイル名にアスタリスク(*)を指定する。
データファイルの指定の例
・制御ファイルにデータがある場合
INFILE *
・デフォルト拡張子が.dat のWHIRL ファイルにデータがある場合
INFILE WHIRL
・データがdatafile.dat にある場合 : フルパス指定
INFILE 'c:\topdir\subdir\datafile.dat'
- BEGINDATA、INFILEを使用した可変長データのロードの例
データの内容は、
- 1つの表と3つの列がロードされることを示す簡単な制御ファイル。
- 制御ファイルがロードするデータを含んでいるため、別のデータファイルは存在しない。
- ストリーム形式のデータをロードする。
BEGINDATA、INFILEを使用した可変長データのロードの例 制御ファイル名:ULCASE1.CTL
LOAD DATA ---(1)
INFILE * ---(2)
INTO TABLE dept ---(3)
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' ---(4)
(deptno, dname, loc) ---(5)
BEGINDATA ---(6)
12,RESEARCH,"SARATOGA"
10,"ACCOUNTING",CLEVELAND
11,"ART",SALEM
13,FINANCE,"BOSTON"
21,"SALES",PHILA.
22,"SALES",ROCHESTER
42,"INT'L","SAN FRAN"
注釈:
- (1)
- 制御ファイルの先頭には、LOAD DATA 文が必要。
- (2)
- INFILE *は、データが外部ファイルではなく制御ファイル内にあることを示す。
- (3)
- データをロードする表(DEPT )を識別するために、INTO TABLE 文が必要。
- デフォルトでは、SQL*Loader がレコードを挿入するには、表は空である必要がある。
- (4)
- FIELDS TERMINATED BY は、データがカンマで終わることを示す。
- また、一重引用符で囲むこともできる。データ型のデフォルトはどのフィールドでもCHAR である。
- (5)
- ロードする列の名前をカッコで囲んで指定する。
- データ型は指定されないので、デフォルトの255 バイトのCHAR 型になる。
- (6)
- 'BEGINDATA はデータの始まりを指定する。