3 起動と停止

データベースの起動時には、そのデータベースのインスタンスを作成し、データベースの状態を確認します。現在実行中のOracle Databaseインスタンスの停止では、必要に応じて、データベースをクローズおよびディスマウントできます。

関連項目:

Oracle Real Application Clusters環境に固有の追加情報は、『Oracle Real Application Clusters管理およびデプロイメント・ガイド』を参照してください。

3.1 データベースの起動

データベースの起動時には、そのデータベースのインスタンスを作成し、データベースの状態を確認します。インスタンスは通常、データベースをマウントおよびオープンすることで起動します。これによって、有効なユーザーはデータベースに接続して通常のデータ・アクセス操作を実行できます。

3.1.1 データベースの起動オプションについて

Oracle Restartを使用していない場合は、SQL*Plus、Recovery ManagerまたはOracle Enterprise Manager Cloud Control (Cloud Control)を使用してデータベース・インスタンスを起動できます。Oracle Restartでデータベースを管理している場合は、SRVCTLを使用してデータベースを起動する方法をお薦めします。

Oracle Restartの詳細は、「Oracle Databaseの自動再起動の構成」を参照してください。

3.1.1.1 SQL*Plusを使用したデータベースの起動

SQL*Plusセッションを開始し、管理者権限でOracle Databaseに接続すると、STARTUPコマンドを発行できます。このマニュアルでは、SQL*Plusを使用するこの方法について詳細に説明します。

  • SQL*PlusのSTARTUPコマンドを実行します。

3.1.1.2 Recovery Managerを使用したデータベースの起動

Recovery Manager(RMAN)を使用して、STARTUPおよびSHUTDOWNコマンドを実行する方法もあります。この方法を選択するのは、RMAN環境でSQL*Plusを起動しない場合です。

  • RMANのSTARTUPコマンドを実行します。

関連項目:

RMAN STARTUPコマンドの詳細は、『Oracle Databaseバックアップおよびリカバリ・リファレンス』を参照してください。

3.1.1.3 Cloud Controlを使用したデータベースの起動

Cloud Controlは、起動や停止も含めたデータベースの管理に使用できます。Cloud Controlは、GUIコンソール、エージェント、共有サービスおよびOracleのツール製品を組み合せて、Oracle製品の管理のために統合された包括的なシステム管理プラットフォームを提供します。Cloud Controlを使用すると、コマンドライン操作のかわりにGUIインタフェースを使用して、このマニュアルで説明されている機能を実行できます。

  • Cloud Controlでデータベース・インスタンスを起動します。

関連項目:

Cloud Controlのオンライン・ヘルプ

3.1.1.4 SRVCTLを使用したデータベースの起動

Oracle Restartがインストールされてデータベース用に構成されている場合は、SRVCTLを使用してデータベースを起動することをお薦めします。

SRVCTL使用してデータベース・インスタンスを起動すると、次の項目が保証されます。

  • データベースが依存する任意のコンポーネント(Oracle Automatic Storage ManagementやOracle Netリスナーなど)が、適切な順序で最初に自動起動します。

  • データベースはOracle Restart構成の設定に従って起動します。そのような設定の例は、サーバー・パラメータ・ファイルの場所です。

  • データベースのOracle Restart構成に格納された環境変数は、インスタンス起動前に設定されます。

SRVCTLを使用してデータベース・インスタンスを起動するには:

  • srvctl start databaseコマンドを実行します。

詳細は、「srvctl start database」および「Oracle Restartで管理されているコンポーネントの起動と停止」を参照してください。

3.1.2 起動時における初期化パラメータの指定

データベースは、インスタンスを起動するために、サーバー・パラメータ・ファイル(SPFILE)またはテキスト形式の初期化パラメータ・ファイル(PFILE)からインスタンス構成パラメータ(初期化パラメータ)を読み込む必要があります。データベースは、デフォルトの場所でこれらのファイルを検索します。これらのファイルにデフォルト以外の場所を指定することも可能で、その方法は、データベースの起動にSQL*Plusを使用するか(Oracle Restartを使用していない場合)、SRVCTLを使用するか(データベースをOracle Restartで管理している場合)によって異なります。

関連項目:

初期化パラメータ、初期化パラメータ・ファイルおよびサーバー・パラメータ・ファイルの詳細は、「Oracle Databaseの作成および構成」を参照してください

3.1.2.1 初期化パラメータ・ファイルおよび起動について

データベース・インスタンスを起動すると、データベースは、プラットフォーム固有のデフォルトの場所にあるSPFILEから初期化パラメータの読込みを試行します。SPFILEが見つからない場合は、テキスト形式の初期化パラメータ・ファイルを検索します。

表2-3に、PFILEおよびSPFILEのデフォルトの名前と場所を示します。

プラットフォーム固有のデフォルトの場所では、Oracle Databaseは次の順序でファイル名を検査し、初期化パラメータ・ファイルを検索します。

  1. SRVCTLコマンドのsrvctl add databaseまたはsrvctl modify database-spfileオプションで指定した場所

    現在の設定はsrvctl config databaseコマンドで確認できます。

  2. spfileORACLE_SID.ora

  3. spfile.ora

  4. initORACLE_SID.ora

最初の3つのファイルはSPFILEであり、4つ目はテキスト形式の初期化パラメータ・ファイルです。DBCAによってOracle Automatic Storage Managementディスク・グループにSPFILEが作成されている場合、データベースではそのディスク・グループ内のSPFILEが検索されます。

CREATE SPFILE文でAS COPYが指定されず、データベースがOracle Clusterwareのリソースとして定義されている場合、spfile_nameFROM PFILE句の両方を指定すると、データベース・リソース内のSPFILEの名前と場所がこの文によって自動的に更新されます。CREATE SPFILE文でAS COPYが指定されている場合は、SPFILEがコピーされ、データベース・リソースは更新されません。

ノート:

spfile.oraファイルがこの検索パスに含まれているのは、Oracle Real Application Clusters環境では、すべてのインスタンスの初期化パラメータ設定が1つのサーバー・パラメータ・ファイルに格納されるためです。サーバー・パラメータ・ファイルにはインスタンス固有の格納場所はありません。

Oracle Real Application Clusters環境のサーバー・パラメータ・ファイルの詳細は、『Oracle Real Application Clusters管理およびデプロイメント・ガイド』を参照してください。

ユーザー(またはDatabase Configuration Assistant)が作成したサーバー・パラメータ・ファイルをテキスト形式の初期化パラメータ・ファイルで上書きする場合は、SQL*Plusを使用してSTARTUPコマンドのPFILE句を指定すると、その初期化パラメータ・ファイルを識別できます。

STARTUP PFILE = /u01/oracle/dbs/init.ora

デフォルト以外のサーバー・パラメータ・ファイル

デフォルト以外のサーバー・パラメータ・ファイル(SPFILE)とは、デフォルトの場所以外の場所に存在するSPFILEです。通常は、インスタンスをデフォルト以外のSPFILEで起動する必要はありません。ただし、そうする必要がある場合は、SRVCTL (Oracle Restartを使用)およびSQL*Plusのいずれでも実行できます。これらについては、この項で後ほど説明します。

初期化ファイルおよびOracle Automatic Storage Management

Oracle Automatic Storage Management (Oracle ASM)を使用するデータベースの場合、通常はデフォルト以外のSPFILEがあります。Database Configuration Assistant(DBCA)を使用してOracle ASMを使用するようにデータベースを構成すると、DBCAによってOracle ASMディスク・グループ内にデータベース・インスタンスのSPFILEが作成され、ローカル・ファイル・システム内のデフォルトの場所に、そのSPFILEを指し示すテキスト形式の初期化パラメータ・ファイル(PFILE)が作成されます(次の項を参照)。

3.1.2.2 デフォルト以外のサーバー・パラメータ・ファイルを使用したSQL*Plusでの起動

SQL*Plusでは、PFILE句を使用して、デフォルト以外のサーバー・パラメータ・ファイルでインスタンスを起動できます。

SQL*Plusでデフォルト以外のサーバー・パラメータ・ファイルを使用して起動するには:

  1. SPFILEパラメータのみを記述した1行のテキスト形式の初期化パラメータ・ファイルを作成します。パラメータの値には、デフォルト以外のサーバー・パラメータ・ファイルの場所を指定します。

    たとえば、次のパラメータのみを記述したテキスト形式の初期化パラメータ・ファイル/u01/oracle/dbs/spf_init.oraを作成します。

    SPFILE = /u01/oracle/dbs/test_spfile.ora

    ノート:

    従来のテキスト形式の初期化パラメータ・ファイルで、サーバー・パラメータ・ファイルを設定するためにIFILE初期化パラメータを使用することはできません。この場合は、必ずSPFILE初期化パラメータを使用してください。

  2. この初期化パラメータ・ファイルを指定して、インスタンスを起動します。
    STARTUP PFILE = /u01/oracle/dbs/spf_init.ora
    

SPFILEはデータベース・ホスト・コンピュータに存在している必要があります。したがって、前述の方法は、クライアント・システムからSPFILEを使用するデータベースを起動する手段にもなります。また、クライアント・システムがクライアント側で初期化パラメータ・ファイルを維持する必要もなくなります。クライアント・システムがSPFILEパラメータが含まれている初期化パラメータ・ファイルを読み込むと、その値をサーバーに渡し、そこで指定されたSPFILEが読み込まれます。

3.1.2.3 デフォルト以外のサーバー・パラメータ・ファイルを使用したSRVCTLでの起動

データベースがOracle Restartで管理されている場合は、データベースのOracle Restart構成でSPFILEの場所オプションを設定または変更することにより、デフォルト以外のSPFILEの場所を指定できます。

SRVCTLでデフォルト以外のサーバー・パラメータ・ファイルを使用して起動するには:

  1. 「SRVCTLの実行準備」で説明したように、SRVCTLの実行を準備します。
  2. 次のコマンドを入力します。
    srvctl modify database -db db_unique_name -spfile spfile_path
    

    db_unique_nameは、データベースのDB_UNIQUE_NAME初期化パラメータの設定と一致している必要があります。

  3. 次のコマンドを入力します。
    srvctl start database -db db_unique_name [options]
    

詳細は、「Oracle RestartのSRVCTLコマンド・リファレンス」を参照してください。

3.1.3 データベース・サービスの自動起動について

データベースがOracle Restartで管理されている場合は、個々のデータベース・サービス(サービス)ごとに起動オプションを構成できます。

サービスの管理ポリシーをAUTOMATIC(デフォルト)に設定した場合は、SRVCTLを使用してデータベースを起動するとサービスが自動的に起動します。管理ポリシーをMANUALに設定した場合、サービスは自動起動されず、SRVCTLを使用して手動で起動する必要があります。MANUALを設定しても、サービスは実行中にOracle Restartで監視され、障害が発生すると再起動されます。

データベースがOracle Restartで管理されているOracle Data Guard(Data Guard)環境では、Oracle Restart構成でサービスにData Guardロールを割り当てることにより、サービスの自動起動をさらに制御できます。サービスの管理ポリシーがAUTOMATICであり、割り当てられているいずれかのロールがデータベースの現行のロールに一致する場合にのみ、手動でデータベースを起動するとサービスが自動的に起動されます。

サービスに対してData Guardロールの管理ポリシーを設定する構文は、「srvctl add service」および「srvctl modify service」を参照してください。

ノート:

Oracle Restartを使用する場合は、SRVCTLを使用してデータベース・サービスを作成することをお薦めします。

3.1.4 インスタンス起動の準備

SQL*Plusを使用してデータベース・インスタンスを起動する前に、次の準備ステップを実行する必要があります。

ノート:

次の手順は、Oracle Restartを使用していないインストール用です。データベースをOracle Restartで管理している場合は、「Oracle Restartで管理されているコンポーネントの起動と停止」の手順に従ってください。

インスタンスを起動準備するには:

  1. データベースが依存するOracleコンポーネントが起動されたことを確認します。

    たとえば、データベースのデータがOracle Automatic Storage Management(Oracle ASM)のディスク・グループに格納される場合は、Oracle ASMインスタンスが実行中であること、および必要なディスク・グループがマウントされていることを確認してください。また、データベースが起動する前にOracle Netリスナーを起動することをお薦めします。

  2. オペレーティング・システム認証を使用する場合は、OSDBAグループのメンバーとしてデータベース・ホスト・コンピュータにログインします。
  3. 環境変数が目的のOracleインスタンスに接続するように設定されていることを確認します。
  4. データベースに接続せずに、SQL*Plusを起動します。
    SQLPLUS /NOLOG
    
  5. SYSOPERSYSDBASYSBACKUPまたはSYSDGとしてOracle Databaseに接続します。たとえば:
    CONNECT username AS SYSDBA
    
    —or—
    
    CONNECT / AS SYSDBA
    

データベースに接続され、データベース・インスタンスを起動する準備が完了します。

関連項目:

3.1.5 インスタンスの起動

SQL*PlusまたはOracle Restartを使用してインスタンスを起動できます。

3.1.5.1 インスタンスの起動について

Oracle Restartを使用していない場合は、SQL*PlusのSTARTUPコマンドを使用してOracle Databaseインスタンスを起動します。Oracle Restartでデータベースを管理している場合は、srvctl start databaseコマンドを使用することをお薦めします。

SQL*PlusおよびOracle Restartを使用して、次のような様々なモードでインスタンスを起動できます。

  • NOMOUNT—データベースをマウントせずにインスタンスを起動します。この場合、データベースへのアクセスは禁止され、通常はデータベース作成または制御ファイルの再作成時にのみ使用されます。

  • MOUNT—インスタンスを起動し、データベースをマウントするが、クローズしたままにするモード。この状態では、一部のDBAアクティビティは可能ですが、データベースへの汎用アクセスはできません。

  • OPEN—インスタンスを起動し、データベースをマウントしてオープンするモード。この操作を非制限モードで実行してユーザー全員にアクセスを許可するか、制限モードで実行してデータベース管理者のみにアクセスを許可できます。

  • FORCE—起動時または停止時に問題が発生した後にインスタンスを強制的に起動するモード。

  • OPEN RECOVER—インスタンスを起動し、直後に完全メディア・リカバリを開始するモード。

ノート:

共有サーバー・プロセスを介してデータベースに接続してデータベースのインスタンスを起動することはできません。

次の例では、インスタンスを起動できるいくつかの状態を具体的に説明します。STARTUPコマンドの句の結合時やsrvctl start databaseコマンドの起動オプションの結合時は、いくつかの制限が適用されます。

ノート:

制御ファイル、データベース・ファイルまたはオンラインREDOログが使用できない場合は、インスタンスの起動で問題が発生することがあります。データベースをマウントするときにCONTROL_FILES初期化パラメータで指定された1つ以上のファイルが存在しない場合、またはオープンできない場合は、Oracle Databaseによって警告メッセージが返され、データベースはマウントされません。データベースをオープンするときに、1つ以上のデータファイルまたはオンラインREDOログを使用できない場合、またはオープンできない場合、データベースは警告メッセージを返し、データベースをオープンしません。

関連項目:

3.1.5.2 インスタンスを起動し、データベースをマウントしてオープンする方法

通常のデータベース操作とは、インスタンスを起動し、データベースをマウントおよびオープンすることを意味します。このモードでは、有効なユーザーがデータベースに接続して、データ・アクセス操作を実行できます。

次のコマンドは、インスタンスを起動し、デフォルトの場所から初期化パラメータを読み込んで、データベースをマウントおよびオープンします。

SQL*Plus SRVCTL(Oracle Restartを使用している場合)
STARTUP
srvctl start database -db db_unique_name

db_unique_nameDB_UNIQUE_NAME初期化パラメータと一致します。

3.1.5.3 インスタンスを起動するが、データベースをマウントしない方法

インスタンスは、データベースをマウントしなくても起動できます。通常、この方法で起動するのはデータベースの作成時のみです。

次のコマンドのいずれかを使用します。

SQL*Plus SRVCTL(Oracle Restartを使用している場合)
STARTUP NOMOUNT
srvctl start database -db db_unique_name -startoption nomount
3.1.5.4 インスタンスを起動し、データベースをマウントする方法

インスタンスを起動し、データベースをオープンしないでマウントして、特定のメンテナンス操作を実行できます。

たとえば、次のようなタスクの実行時は、データベースのマウントは必要ですが、オープンはしないでください。

次のコマンドは、インスタンスを起動してデータベースをマウントしますが、データベースはクローズしたままです。

SQL*Plus SRVCTL(Oracle Restartを使用している場合)
STARTUP MOUNT
srvctl start database -db db_unique_name -startoption mount
3.1.5.5 起動時にインスタンスへのアクセスを制限する方法

インスタンスの使用を管理担当者にのみ許可し、一般データベース・ユーザーの使用を禁止するには、制限モードでインスタンスを起動して、オプションでデータベースをマウントおよびオープンします。

次のいずれかのタスクを実行する必要があるときは、このインスタンス起動モードを使用してください。

  • データのエクスポートまたはインポートを実行する場合

  • SQL*Loaderを使用してデータをロードする場合

  • 一時的に一般ユーザーがデータを使用できないようにする場合

  • 特定の移行またはアップグレード操作を実行する場合

通常、CREATE SESSIONシステム権限を持つすべてのユーザーが、オープンしているデータベースに接続できます。データベースを制限モードでオープンすると、CREATE SESSIONおよびRESTRICTED SESSIONシステム権限の両方を持つユーザーのみがデータベースへのアクセスを許可されます。データベース管理者のみにRESTRICTED SESSIONシステム権限が付与されている必要があります。さらに、インスタンスが制限モードの場合、データベース管理者はOracle Netリスナーからリモートでインスタンスにアクセスすることはできませんが、インスタンスが実行されているシステムからローカルでインスタンスにアクセスすることのみ可能です。

次のコマンドは、制限モードでインスタンスを起動します(データベースをマウントしてオープンします)。

SQL*Plus SRVCTL(Oracle Restartを使用している場合)
STARTUP RESTRICT
srvctl start database -db db_unique_name -startoption restrict

MOUNT、NOMOUNTおよびOPENモードと制限モードを組み合せて使用できます。

RESTRICTED SESSION機能を無効にするには、ALTER SYSTEM文を使用します。

ALTER SYSTEM DISABLE RESTRICTED SESSION;

データベースを非制限モードでオープンし、後でアクセス制限が必要であると判明した場合は、ALTER SYSTEM文を使用して制限できます。詳細は、「オープンしているデータベースへのアクセスを制限する方法」を参照してください。

関連項目:

ALTER SYSTEM文の詳細は、『Oracle Database SQL言語リファレンス』を参照してください。

3.1.5.6 インスタンスを強制的に起動する方法

通常と異なる状況では、データベース・インスタンスを起動しようとしたときに問題が発生することがありますが、データベース・インスタンスを強制的に起動できます。

次の問題が発生している場合以外は、データベースを強制的に起動しないでください。

  • 現行インスタンスをSHUTDOWN NORMALSHUTDOWN IMMEDIATEまたはSHUTDOWN TRANSACTIONALコマンドで停止できない場合

  • インスタンス起動時に問題が発生した場合。

このような問題が発生した場合、次のいずれかのコマンドを指定して新しいインスタンスを起動(必要に応じて、データベースをマウントおよびオープン)すると、通常は問題を解決できます。

SQL*Plus SRVCTL(Oracle Restartを使用している場合)
STARTUP FORCE
srvctl start database -db db_unique_name -startoption force

インスタンスの実行中にFORCEモードを使用すると、ABORTモードでインスタンスを停止した後に再起動します。この場合、メッセージ「インスタンス"abort"の停止中」に続いて「ORACLEインスタンス"normal"の起動中」がアラート・ログに表示されます。

関連項目:

現行インスタンスの強制終了による影響の詳細は、「ABORTモードによる停止」を参照してください

3.1.5.7 インスタンスを起動し、データベースをマウントして、完全メディア・リカバリを開始する方法

メディア・リカバリが必要な場合は、インスタンスを起動し、データベースをインスタンスにマウントして、リカバリ処理を自動的に開始できます。

これには、次のいずれかのコマンドを使用します。

SQL*Plus SRVCTL(Oracle Restartを使用している場合)
STARTUP OPEN RECOVER
srvctl start database -db db_unique_name -startoption "open,recover"

必要ない場合にリカバリを実行しようとすると、Oracle Databaseによってエラー・メッセージが表示されます。

3.1.5.8 オペレーティング・システム起動時にデータベースを自動的に起動する方法

多くのサイトでは、システムの起動直後に1つ以上のOracle Databaseインスタンスとデータベースを自動的に起動する手順を使用しています。

そのための手順は、オペレーティング・システムによって異なります。自動起動の詳細は、オペレーティング・システム固有のOracleマニュアルを参照してください。

データベースの自動起動を構成する方法としてお薦めする(およびプラットフォームに依存しない)方法は、Oracle Restartです。詳細は、「Oracle Databaseの自動再起動の構成」を参照してください。

3.1.5.9 リモート・インスタンスを起動する方法

ローカルのOracle Databaseサーバーが分散データベースの一部を構成している場合は、リモート・インスタンスとデータベースを起動できます。

リモート・インスタンスの起動と停止の手順は、通信プロトコルとオペレーティング・システムによって大きく異なります。

3.2 データベースの可用性の変更

データベースの可用性を変更できます。可用性の変更は、メンテナンス上の理由やデータベースを読取り専用にするために行う場合があります。

3.2.1 インスタンスにデータベースをマウントする方法

特定の管理操作を実行する場合は、データベースを起動してインスタンスにマウントし、クローズしたままにする必要があります。そのためには、インスタンスを起動してデータベースをマウントします。

  • あらかじめ起動したインスタンスにデータベースをマウントするには、次のように、SQL文ALTER DATABASEMOUNT句を指定します。
    ALTER DATABASE MOUNT;

関連項目:

データベースをマウントし、クローズしておくことが必要な操作(およびインスタンスの起動とデータベースを1ステップでマウントする手順)の詳細は、「インスタンスを起動し、データベースをマウントする方法」を参照してください

3.2.2 クローズしているデータベースをオープンする方法

データベースをオープンすることによって、マウントされ、クローズしているデータベースを一般的な用途のために使用可能にできます。

  • マウントされたデータベースをオープンするには、ALTER DATABASE SQL文でOPEN句を使用します。
    ALTER DATABASE OPEN;
    

この文の実行後は、CREATE SESSIONシステム権限を持つ有効なOracle Databaseユーザーであれば、誰でもデータベースに接続できます。

3.2.3 データベースを読取り専用モードでオープンする方法

データベースを読取り専用モードでオープンすると、オープンしたデータベースを問い合せることができますが、その間にデータの内容がオンラインで変更されることはありません。

これにより、データファイルとREDOログ・ファイルにデータが書き込まれないことが保証されますが、データベース・リカバリや、REDOを生成せずにデータベースの状態を変更する操作が制限されることはありません。たとえば、データファイルをオフラインとオンラインの間で切り替えてもデータの内容には影響しないため、このような切替えは可能です。

ディスク・ソートの実行時など、読取り専用モードでデータベースを問い合せるときに一時表領域を使用する場合、問合せの発行者には、デフォルト一時表領域としてローカル管理表領域が割り当てられている必要があります。割り当てられていない場合は、問合せが失敗します。詳細は、「ローカル管理の一時表領域の作成」を参照してください。

次の文では、データベースが読取り専用モードでオープンします。

ALTER DATABASE OPEN READ ONLY;

また、次のように読取り/書込みモードでデータベースをオープンすることもできます。

ALTER DATABASE OPEN READ WRITE;

ただし、読取り/書込みはデフォルトのモードです。

ノート:

RESETLOGS句とREAD ONLY句は併用できません。

読取り専用データベースの制約

  • 読取り専用データベースに対してアプリケーションを実行中は、データベース・オブジェクトへ書き込まないでください。たとえば、アプリケーションは、グローバルな一時表を含むデータベース表に対して行の挿入、削除、更新またはマージを実行する際に、データベース・オブジェクトに書き込みます。アプリケーションは、データベースの順序を操作する際にデータベース・オブジェクトに書き込みます。また、アプリケーションは行のロック、EXPLAIN PLANの実行またはDDLの実行の際にデータベース・オブジェクトに書き込みます。オラクル社が提供するPL/SQLパッケージのファンクションとプロシージャの多くは(DBMS_SCHEDULERなど)、データベース・オブジェクトに書き込みます。アプリケーションがこれらのファンクションとプロシージャのいずれかをコールする場合、または前述の操作のいずれかを実行する場合、アプリケーションからデータベース・オブジェクトへ書込みが実行されるため、読取り専用ではありません。

  • 読取り専用データベースで実行する場合は、1つのデータベース・リンクを使用する進行中のトランザクションをコミットまたはロールバックしてから、別のデータベース・リンクを使用する必要があります。これは、最初のデータベース・リンクで汎用的なSELECT文を実行し、トランザクションが現在読取り専用である場合も当てはまります。

  • 読取り専用データベースではPL/SQLストアド・プロシージャをコンパイルまたは再コンパイルできません。リモート・プロシージャ・コールが原因のPL/SQLの無効化を最小限に抑えるには、読取り専用データベースに対してリモート・プロシージャ・コールを実行するセッションではREMOTE_DEPENDENCIES_MODE=SIGNATUREを使用します。

  • 読取り専用データベースで一度もコールされたことがないリモート・プロシージャ(読取り専用のリモート・プロシージャであっても)は、そのデータベースから起動できません。この制約は、無名PL/SQLブロックの中およびSQL文の中のリモート・プロシージャ・コールに当てはまります。ストアド・プロシージャ内にリモート・プロシージャ・コールを指定するか、またはデータベース内のリモート・プロシージャを読取り専用にする前に起動できます。

関連項目:

ALTER DATABASE文の詳細は、『Oracle Database SQL言語リファレンス』を参照してください。

3.2.4 オープンしているデータベースへのアクセスを制限する方法

データベースが制限モードの場合は、RESTRICTED SESSION権限を持つユーザーのみが新しい接続を開始できます。SYSDBAとして接続するユーザー、またはDBAロールを使用して接続するユーザーにはこの権限があります。

すでに実行中のインスタンスを制限モードにするには:

  • ENABLE RESTRICTED SESSION句を指定して、SQL文ALTER SYSTEMを実行します。

実行中インスタンスを制限モードにすると、ユーザー・セッションは終了されないか、終了された場合は影響を受けます。したがって、インスタンスを制限モードにした場合は、管理タスクを実行する前に現行のユーザー・セッションをすべて停止(終了)することを考慮します。

インスタンスの制限モードを解除するには、ALTER SYSTEMDISABLE RESTRICTED SESSION句を指定します。

関連項目:

3.3 データベースの停止

SQL*PlusまたはOracle Restartでデータベースを停止できます。

3.3.1 データベースの停止について

Oracle Restartを使用していない場合、データベース・インスタンスを停止するには、SQL*PlusでSYSOPERSYSDBASYSBACKUPまたはSYSDGとして接続し、SHUTDOWNコマンドを発行します。Oracle Restartでデータベースを管理している場合は、srvctl stop databaseコマンドを使用してデータベースを停止する方法をお薦めします。

停止処理が完了するまで、データベース停止を開始したセッションに制御が戻されません。停止処理の進行中に接続しようとするユーザーは、次のようなメッセージを受け取ります。

ORA-01090: shutdown in progress - connection is not permitted

ノート:

共有サーバー・プロセスを介してデータベースに接続している場合は、データベースを停止できません。

データベースには、複数の停止モード(NORMAL、IMMEDIATE、TRANSACTIONALおよびABORT)があります。一部の停止モードでは、データベースを実際に停止する前に、特定のイベント(トランザクションの完了またはユーザーによる切断など)の発生を待機します。これらのイベントに対するタイムアウト間隔は1時間です。

関連項目:

Oracle Restartの詳細は、「Oracle Databaseの自動再起動の構成」を参照してください。

3.3.2 NORMALモードによる停止

NORMALモードでデータベースを停止する場合、現在、接続しているすべてのユーザーが切断するまで待機してから、データベースが停止します。NORMALモードはデフォルトの停止モードです。

データベースを通常の状況で停止するには、次のいずれかのコマンドを使用します。

SQL*Plus SRVCTL(Oracle Restartを使用している場合)
SHUTDOWN [NORMAL]
srvctl stop database -db db_unique_name -stopoption normal

SQL*Plus SHUTDOWNコマンドのNORMAL句はオプションです(これがデフォルトの停止方法であるため)。SRVCTLの場合、-stopoptionオプションを省略すると、停止操作はデータベースのOracle Restart構成に格納されている停止オプションに従って進行します。デフォルトの停止オプションはIMMEDIATEです。

通常のデータベース停止では、次のように処理が進みます。

  • 文が発行された後は、新しい接続は許可されません。

  • データベースは、停止する前に、現在データベースに接続しているすべてのユーザーによるデータベースからの切断を待機します。

次にデータベースを起動するときに、インスタンス・リカバリ手順は必要ありません。

3.3.3 IMMEDIATEモードによる停止

IMMEDIATEモードでデータベースを停止する場合、Oracle Databaseにより実行中のSQL文が終了され、ユーザーが切断されます。アクティブなトランザクションは終了され、コミットされていない変更はロールバックされます。

データベースの即時停止は、次のような状況のときにのみ使用します。

  • 自動バックアップおよび無人バックアップを開始する場合

  • 電源が間もなく停止する場合

  • データベースやデータベース・アプリケーションの一部が異常に動作している場合で、ユーザーにログオフを依頼できない場合、またはユーザーがログオフできない場合

データベースを即時に停止するには、次のいずれかのコマンドを使用します。

SQL*Plus SRVCTL(Oracle Restartを使用している場合)
SHUTDOWN IMMEDIATE
srvctl stop database -db db_unique_name -stopoption immediate

このデータベース停止では、次のように処理が進みます。

  • 文が発行されると、新しい接続は許可されず、新しいトランザクションは開始できません。

  • すべての未コミットのトランザクションは、ロールバックされます。(長くかかる未コミットのトランザクションが存在する場合、この停止方法ではその名前に反して即座に終了しない場合があります。)

  • Oracle Databaseは、現在データベースに接続しているユーザーが切断されるのを待機しません。アクティブなトランザクションは暗黙的にロールバックされ、接続中のユーザーはすべて切断されます。

次にデータベースを起動するときに、インスタンス・リカバリ手順は必要ありません。

3.3.4 TRANSACTIONALモードによる停止

TRANSACTIONALモードでデータベースを停止する場合、ユーザーが新規トランザクションを開始できなくなりますが、現在のトランザクションがすべて完了するまで待機してから、データベースが停止します。現行トランザクションの性質によっては、停止までにかなりの時間がかかる場合があります。

アクティブ・トランザクションを完了してから、計画どおりにインスタンスを停止する場合は、次のいずれかのコマンドを使用します。

SQL*Plus SRVCTL(Oracle Restartを使用している場合)
SHUTDOWN TRANSACTIONAL
srvctl stop database -db db_unique_name -stopoption transactional

このデータベース停止では、次のように処理が進みます。

  • 文が発行されると、新しい接続は許可されず、新しいトランザクションは開始できません。

  • すべてのトランザクションが完了すると、まだインスタンスに接続されているすべてのクライアントが切断されます。

  • この時点で、インスタンスはSHUTDOWN IMMEDIATE文を発行した場合と同じように停止します。

次にデータベースを起動するときに、インスタンス・リカバリ手順は必要ありません。

TRANSACTIONALオプションによる停止では、クライアントの作業内容が失われずに済み、すべてのユーザーがログオフする必要がなくなります。

3.3.5 ABORTモードによる停止

データベース・インスタンスを強制終了することによって、データベースをただちに停止できます。

この停止方法は、次の場合を除いてできるだけ使用を避けてください。

  • データベース、もしくはそのアプリケーションの1つが不適切に機能していて、かつ他のいずれの停止モードも作動しない場合。

  • データベースをただちに停止する必要がある(たとえば、電源遮断が1分以内に発生することがわかっている)場合。

  • データベース・インスタンスを起動するときに問題が発生した場合。

トランザクションとユーザーの接続を強制終了してデータベースを停止する必要がある場合は、次のいずれかのコマンドを使用します。

SQL*Plus SRVCTL(Oracle Restartを使用している場合)
SHUTDOWN ABORT
srvctl stop database -db db_unique_name -stopoption abort

このデータベース停止では、次のように処理が進みます。

  • 文が発行されると、新しい接続は許可されず、新しいトランザクションは開始できません。

  • Oracle Databaseによって処理されている現行のクライアントSQL文はただちに終了します。

  • コミットされていないトランザクションはロールバックされません。

  • Oracle Databaseは、現在データベースに接続しているユーザーが切断されるのを待機しません。接続中のユーザーはすべて暗黙的に切断されます。

次にデータベースを起動するときに、自動インスタンス・リカバリ手順が必要になります。

3.3.6 停止のタイムアウト

ユーザーによる切断またはトランザクションの完了を待機する停止モードには、待機時間に制限があります。

停止をブロックするすべてのイベントが1時間以内に発生しない場合、停止操作は「ORA-01013: ユーザーによって現行の操作の取消しがリクエストされました」というメッセージを表示して強制終了されます。また、このメッセージは停止プロセスを中断した場合(たとえばCTRL-Cを押した場合など)にも表示されます。インスタンスの停止を中断しようとしないことをお薦めします。停止プロセスが完了してから、インスタンスを再起動してください。

ORA-01013が発生した後は、インスタンスが予測できない状態になると考える必要があります。このため、SHUTDOWNコマンドを再発行して、停止プロセスを継続する必要があります。後続のSHUTDOWNコマンドが引き続き失敗する場合は、SHUTDOWN ABORTコマンドを発行してインスタンスを停止する必要があります。その後でインスタンスを再起動できます。

3.4 データベースの静止

データベースの静止中は、DBAによるトランザクション、問合せ、フェッチまたはPL/SQL文のみ実行できます。

3.4.1 データベースの静止について

データベースを、DBAによるトランザクション、問合せ、フェッチまたはPL/SQL文の実行のみ許可された状態にすることが必要な場合があります。このような状態は、システム上でDBA以外によるトランザクション、問合せ、フェッチまたはPL/SQL文が実行されていないという意味で、静止状態と呼びます。

ノート:

静止中のデータベースに関するこの項の説明では、DBAがユーザーSYSまたはSYSTEMとして定義されています。DBAロールを持つユーザーなどの他のユーザーには、ALTER SYSTEM QUIESCE DATABASE文の発行や、データベース静止後の処理の継続は許可されていません。

データベースを静止状態にすることで、管理者は、それ以外の状態では安全に実行できない処理を実行できます。次の処理を実行できます。

  • 同時ユーザー・トランザクションが同じオブジェクトにアクセスした場合に失敗する処理。たとえば、データベース表のスキーマの変更や、NOWAITロックが必要な既存表への列の追加などがこれに該当します。

  • 同時ユーザー・トランザクションによって好ましくない中間影響を受けるアクション、たとえば表を最初にエクスポートしてから削除し、最後にインポートする場合のような、複数ステップ手順からなる表の再編成処理など。表が削除された後であっても、インポートされる前に同時ユーザーが表にアクセスしようとすると、状況を正確に認識できません。

データベースの静止機能がない場合は、データベースを停止し、制限モードで再度オープンする必要があります。これは、特に24時間、365日の可用性が必要なシステムにとっては重大な制限です。データベースの静止によって、ユーザーに対する遮断とデータベースの停止と再起動に伴う停止時間を最小限にできるため、制限が大幅に緩和されます。

データベースが静止中の場合、DBA以外のセッションがアクティブにならないようにするために、データベース・リソース・マネージャの機能が使用されています。したがって、この文が有効な間に現行のリソース・プランを変更しようとすると、その処理はシステムが静止解除されるまでキューに待機します。データベース・リソース・マネージャの詳細は、「Oracle Database Resource Managerを使用したリソースの管理」を参照してください。

3.4.2 データベースの静止状態への変更

データベースを静止状態にした場合、DBA以外によるアクティブ・セッションは非アクティブになるまで続行されます。アクティブなセッションとは、トランザクション、問合せ、フェッチまたはPL/SQL文を現在実行しているセッション、または現在なんらかの共有リソース(エンキューなど)を保持しているセッションです。非アクティブなセッションがアクティブになることはできません。

たとえば、ユーザーが非アクティブなセッションを強制的にアクティブにしようとしてSQL問合せを発行すると、その問合せは停止したようになります。後でデータベースが静止解除されると、セッションが再開され、ブロックされていた処理が実行されます。

  • データベースを静止状態にするには、次のSQL文を発行します。
    ALTER SYSTEM QUIESCE RESTRICTED;
    

DBA以外のセッションがすべて非アクティブになると、ALTER SYSTEM QUIESCE RESTRICTED文が完了し、データベースは静止状態となります。Oracle Real Application Clusters環境でこの文を発行すると、文を発行したインスタンスだけでなく、すべてのインスタンスが影響を受けます。

ALTER SYSTEM QUIESCE RESTRICTED文は、アクティブなセッションが非アクティブになるまで、長時間待機する場合があります。V$BLOCKING_QUIESCEビューを問い合せると、静止操作をブロックしているセッションを判別できます。このビューでは、1つの列SID(セッションID)のみが返されます。これをV$SESSIONと結合すると、次の例のように、セッションに関する詳細を取得できます。

select bl.sid, user, osuser, type, program
from v$blocking_quiesce bl, v$session se
where bl.sid = se.sid;

データベース静止の要求を中断した場合、またはアクティブなセッションがすべて静止する前にセッションが異常終了した場合は、Oracle Databaseによって、この文による部分的な影響がすべて自動的に取り消されます。

複数のOracle Call Interface (OCI)の連続したフェッチによって問合せが実行されている場合、ALTER SYSTEM QUIESCE RESTRICTED文はすべてのフェッチが完了するまで待機しません。現行のフェッチの完了のみを待機します。

専用サーバー接続の場合も、共有サーバー接続の場合も、この文の発行後、DBA以外のユーザーがログインしようとすると、その処理はデータベース・リソース・マネージャによってすべてキューに送られ、進行しません。ユーザーにはログインが停止したように見えます。データベースが静止解除されると、ログインは再開されます。

文を発行したセッションが終了しても、データベースは静止状態のままです。DBAは、データベースを静止解除される文を明示的に発行するために、データベースにログインする必要があります。

ノート:

データベースが静止状態の場合でも、Oracle Databaseのバックグラウンド・プロセスが内部の目的のために更新を実行している可能性があるため、データベースが静止状態の場合はコールド・バックアップを実行できません。また、オンライン・データファイルのヘッダーは引き続きアクセス可能に見えます。このファイル・ヘッダーの状態は、データベースが正しく停止された場合とは異なります。ただし、データベースが静止状態の間でも、オンライン・バックアップ操作は実行できます。

関連項目:

3.4.3 通常操作へのシステムのリストア

システムを通常操作にリストアすると、DBA以外によるすべてのアクティビティを続行できます。

  • データベースを通常操作にリストアするには、次のSQL文を発行します。
    ALTER SYSTEM UNQUIESCE;
    

Oracle Real Application Clusters環境では、データベースを静止した場合と同じセッションまたは同じインスタンスでこの文を発行する必要はありません。ALTER SYSTEM UNQUIESCE文を発行したセッションが異常終了した場合、Oracle Databaseサーバーは静止解除を確実に完了します。

3.4.4 インスタンスの静止状態の表示

V$INSTANCEビューを問い合せて、インスタンスの静止状態を表示できます。

インスタンスの静止状態を表示するには:

  • V$INSTANCEビューのACTIVE_STATE列を問い合せます。

列の値は、次のいずれかになります。

  • NORMAL: 通常の静止していない状態。

  • QUIESCING: 静止途中の状態。DBA以外の一部のセッションがアクティブな状態です。

  • QUIESCED: 静止状態。DBA以外のセッションは非アクティブで、許可されていない状態です。

3.5 データベースの一時停止と再開

ALTER SYSTEM SUSPEND文は、データファイル(ファイル・ヘッダーとファイル・データ)および制御ファイルへの入出力(I/O)をすべて停止します。一時停止状態によって、I/Oに干渉されずにデータベースのバックアップを作成できます。データベースを一時停止すると、実行中のすべてのI/O操作の完了が許可され、新しいデータベース・アクセスはキューに待機した状態になります。通常のデータベース操作を再開するには、ALTER SYSTEM RESUME文を使用します。

データベース操作を一時停止するには:

  • ALTER SYSTEM SUSPEND文を実行します。

データベース操作を再開するには:

  • ALTER SYSTEM RESUME文を実行します。

SUSPENDコマンドは、インスタンスに固有ではありません。Oracle Real Application Clusters環境では、あるシステムでSUSPENDコマンドを発行すると、内部ロッキング・メカニズムを通じてインスタンス間で停止要求が伝播し、特定のクラスタのアクティブ・インスタンスがすべて停止します。ただし、あるインスタンスの一時停止中に新しいインスタンスを起動すると、新しいインスタンスは一時停止されません。

SUSPENDコマンドとRESUMEコマンドは、異なるインスタンスから発行できます。たとえば、インスタンス1、2および3の実行中に、インスタンス1からALTER SYSTEM SUSPEND文を発行した場合は、インスタンス1、2または3から同様にRESUME文を発行できます。

一時停止/再開機能は、ディスクやファイルをミラー化してそのミラーを分割できるシステムで役立ち、バックアップとリストアの代替ソリューションを提供します。書込み中に既存のデータベースからミラー化されたディスクを分割できないシステムを使用している場合は、この一時停止/再開機能を使用すると容易に分割できます。

一時停止したデータベースのコピーにはコミット前の更新が含まれるため、一時停止/再開機能は通常の停止操作の簡易版ではありません。

ノート:

表領域をホット・バックアップ・モードに設定する代替手段としてALTER SYSTEM SUSPEND文を使用しないでください。データベースの一時停止操作ではなく、ALTER TABLESPACE BEGIN BACKUP文を使用してください。

次の文は、ALTER SYSTEM SUSPEND/RESUMEの使用方法を示しています。データベースの状態を確認するために、V$INSTANCEビューを問い合せています。

SQL> ALTER SYSTEM SUSPEND;
System altered
SQL> SELECT DATABASE_STATUS FROM V$INSTANCE;
DATABASE_STATUS
---------
SUSPENDED

SQL> ALTER SYSTEM RESUME;
System altered
SQL> SELECT DATABASE_STATUS FROM V$INSTANCE;
DATABASE_STATUS
---------
ACTIVE

関連項目:

データベースの一時停止/再開機能を使用してデータベースをバックアップする方法の詳細は、『Oracle Databaseバックアップおよびリカバリ・ユーザーズ・ガイド』を参照してください。

3.6 インスタンス中断の遅延

INSTANCE_ABORT_DELAY_TIME初期化パラメータを使用して、エラーによりインスタンスが中断したときに、データベースの停止を遅延する時間を秒単位で指定します。

エラーによってOracleデータベース・インスタンスが中断することがあります。INSTANCE_ABORT_DELAY_TIME初期化パラメータを使用して、インスタンスの停止を遅延する時間を指定します。データベース管理者が遅延時間を使用して、エラーについての情報を取得し、インスタンスが中断したときに発生する可能性のある問題を最小限に抑えることができます。たとえば、データベース管理者が遅延時間を使用して診断を取得し、透過アプリケーション・フェイルオーバー(TAF)を使用して接続をリダイレクトし、バッファ・キャッシュをフラッシュできます。遅延した中断が開始されると、アラート・ログにメッセージが書き込まれます。 

注意:

INSTANCE_ABORT_DELAY_TIMEを大きすぎる値に設定しないでください。インスタンスはエラーが原因でクローズするため、一部のプロセスやリソースが破損したり使用できなくなっている可能性があり、複雑なアクションは実行できない可能性があります。

インスタンス中断を遅延するには:

  • INSTANCE_ABORT_DELAY_TIME初期化パラメータで秒数を設定して、エラーが原因でインスタンスが中断するときに停止を遅延する時間を指定します。

    このパラメータはデフォルトでは0に設定されます。

例3-1 INSTANCE_ABORT_DELAY_TIME初期化パラメータの設定

ALTER SYSTEM SET INSTANCE_ABORT_DELAY_TIME=60;