データベースの起動時には、そのデータベースのインスタンスを作成し、データベースの状態を確認します。現在実行中のOracle Databaseインスタンスの停止では、必要に応じて、データベースをクローズおよびディスマウントできます。
関連項目:
Oracle Real Application Clusters環境に固有の追加情報は、『Oracle Real Application Clusters管理およびデプロイメント・ガイド』を参照してください。
データベースの起動時には、そのデータベースのインスタンスを作成し、データベースの状態を確認します。インスタンスは通常、データベースをマウントおよびオープンすることで起動します。これによって、有効なユーザーはデータベースに接続して通常のデータ・アクセス操作を実行できます。
Oracle Restartを使用していない場合は、SQL*Plus、Recovery ManagerまたはOracle Enterprise Manager Cloud Control (Cloud Control)を使用してデータベース・インスタンスを起動できます。Oracle Restartでデータベースを管理している場合は、SRVCTLを使用してデータベースを起動する方法をお薦めします。
Oracle Restartの詳細は、「Oracle Databaseの自動再起動の構成」を参照してください。
SQL*Plusセッションを開始し、管理者権限でOracle Databaseに接続すると、STARTUP
コマンドを発行できます。このマニュアルでは、SQL*Plusを使用するこの方法について詳細に説明します。
SQL*PlusのSTARTUP
コマンドを実行します。
関連トピック
Recovery Manager(RMAN)を使用して、STARTUP
およびSHUTDOWN
コマンドを実行する方法もあります。この方法を選択するのは、RMAN環境でSQL*Plusを起動しない場合です。
RMANのSTARTUP
コマンドを実行します。
関連項目:
RMAN STARTUP
コマンドの詳細は、『Oracle Databaseバックアップおよびリカバリ・リファレンス』を参照してください。
Cloud Controlは、起動や停止も含めたデータベースの管理に使用できます。Cloud Controlは、GUIコンソール、エージェント、共有サービスおよびOracleのツール製品を組み合せて、Oracle製品の管理のために統合された包括的なシステム管理プラットフォームを提供します。Cloud Controlを使用すると、コマンドライン操作のかわりにGUIインタフェースを使用して、このマニュアルで説明されている機能を実行できます。
Cloud Controlでデータベース・インスタンスを起動します。
関連項目:
Cloud Controlのオンライン・ヘルプ
Oracle Restartがインストールされてデータベース用に構成されている場合は、SRVCTLを使用してデータベースを起動することをお薦めします。
SRVCTL使用してデータベース・インスタンスを起動すると、次の項目が保証されます。
データベースが依存する任意のコンポーネント(Oracle Automatic Storage ManagementやOracle Netリスナーなど)が、適切な順序で最初に自動起動します。
データベースはOracle Restart構成の設定に従って起動します。そのような設定の例は、サーバー・パラメータ・ファイルの場所です。
データベースのOracle Restart構成に格納された環境変数は、インスタンス起動前に設定されます。
SRVCTLを使用してデータベース・インスタンスを起動する手順:
srvctl start database
コマンドを実行します。
詳細は、「srvctl start database」および「Oracle Restartで管理されているコンポーネントの起動と停止」を参照してください。
データベースは、インスタンスを起動するために、サーバー・パラメータ・ファイル(SPFILE
)またはテキスト形式の初期化パラメータ・ファイル(PFILE)からインスタンス構成パラメータ(初期化パラメータ)を読み込む必要があります。データベースは、デフォルトの場所でこれらのファイルを検索します。これらのファイルにデフォルト以外の場所を指定することも可能で、その方法は、データベースの起動にSQL*Plusを使用するか(Oracle Restartを使用していない場合)、SRVCTLを使用するか(データベースをOracle Restartで管理している場合)によって異なります。
関連項目:
初期化パラメータ、初期化パラメータ・ファイルおよびサーバー・パラメータ・ファイルの詳細は、「Oracle Databaseの作成および構成」を参照してください
データベース・インスタンスを起動すると、データベースは、プラットフォーム固有のデフォルトの場所にあるSPFILE
から初期化パラメータの読込みを試行します。SPFILE
が見つからない場合は、テキスト形式の初期化パラメータ・ファイルを検索します。
表2-3に、PFILEおよびSPFILEのデフォルトの名前と場所を示します。
プラットフォーム固有のデフォルトの場所では、Oracle Databaseは次の順序でファイル名を検査し、初期化パラメータ・ファイルを検索します。
SRVCTLコマンドのsrvctl add database
またはsrvctl modify database
の-spfile
オプションで指定した場所
現在の設定はsrvctl config database
コマンドで確認できます。
spfile
ORACLE_SID
.ora
spfile.ora
init
ORACLE_SID
.ora
最初の3つのファイルはSPFILE
であり、4つ目はテキスト形式の初期化パラメータ・ファイルです。DBCAによってOracle Automatic Storage Managementディスク・グループにSPFILEが作成されている場合、データベースではそのディスク・グループ内のSPFILEが検索されます。
spfile_name
とCREATE SPFILE
文のFROM PFILE
句の両方を指定し、データベースがOracle Clusterwareでリソースとして定義されている場合、この文はデータベース・リソース内の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)が作成されます(次の項を参照)。
SQL*Plusでは、PFILE
句を使用して、デフォルト以外のサーバー・パラメータ・ファイルでインスタンスを起動できます。
SQL*Plusでデフォルト以外のサーバー・パラメータ・ファイルを使用して起動する方法は次のとおりです。
SPFILE
はデータベース・ホスト・コンピュータに存在している必要があります。したがって、前述の方法は、クライアント・システムからSPFILE
を使用するデータベースを起動する手段にもなります。また、クライアント・システムがクライアント側で初期化パラメータ・ファイルを維持する必要もなくなります。クライアント・システムがSPFILE
パラメータが含まれている初期化パラメータ・ファイルを読み込むと、その値をサーバーに渡し、そこで指定されたSPFILE
が読み込まれます。
データベースがOracle Restartで管理されている場合は、データベースのOracle Restart構成でSPFILEの場所オプションを設定または変更することにより、デフォルト以外のSPFILEの場所を指定できます。
SRVCTLでデフォルト以外のサーバー・パラメータ・ファイルを使用して起動する方法は次のとおりです。
詳細は、「Oracle RestartのSRVCTLコマンド・リファレンス」を参照してください。
データベースが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を使用してデータベース・サービスを作成することをお薦めします。
SQL*Plusを使用してデータベース・インスタンスを起動する前に、次の準備手順を実行する必要があります。
注意:
次の手順は、Oracle Restartを使用していないインストール用です。データベースをOracle Restartで管理している場合は、「Oracle Restartで管理されているコンポーネントの起動と停止」の手順に従ってください。
インスタンスの起動準備の手順:
データベースに接続され、データベース・インスタンスを起動する準備が完了します。
関連項目:
CONNECT
、STARTUP
およびSHUTDOWN
コマンドの説明と構文は、『SQL*Plusユーザーズ・ガイドおよびリファレンス』を参照してください。
SQL*PlusまたはOracle Restartを使用してインスタンスを起動できます。
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ログを使用できない場合、またはオープンできない場合、データベースは警告メッセージを返し、データベースをオープンしません。
関連項目:
STARTUP
コマンドの構文の詳細は、『SQL*Plusユーザーズ・ガイドおよびリファレンス』を参照してください。
Oracle Restartで管理されるデータベースの起動手順は、「Oracle Restartで管理されているコンポーネントの起動と停止」を参照してください。
通常のデータベース操作とは、インスタンスを起動し、データベースをマウントおよびオープンすることを意味します。このモードでは、有効なユーザーがデータベースに接続して、データ・アクセス操作を実行できます。
次のコマンドは、インスタンスを起動し、デフォルトの場所から初期化パラメータを読み込んで、データベースをマウントおよびオープンします。
SQL*Plus | SRVCTL(Oracle Restartを使用している場合) |
---|---|
STARTUP |
srvctl start database -db db_unique_name
|
db_unique_name
はDB_UNIQUE_NAME
初期化パラメータと一致します。
インスタンスは、データベースをマウントしなくても起動できます。通常、この方法で起動するのはデータベースの作成時のみです。
次のコマンドのいずれかを使用します。
SQL*Plus | SRVCTL(Oracle Restartを使用している場合) |
---|---|
STARTUP NOMOUNT |
srvctl start database -db db_unique_name -startoption nomount
|
インスタンスを起動し、データベースをオープンしないでマウントして、特定のメンテナンス操作を実行できます。
たとえば、次のようなタスクの実行時は、データベースのマウントは必要ですが、オープンはしないでください。
Oracle Database 12cリリース1 (12.1.0.2)以上での、データベース・インスタンスを強制フル・データベース・キャッシュ・モードへの切替。詳細は、「強制フル・データベース・キャッシュ・モードの使用方法」を参照してください。
REDOログ・アーカイブ・オプションの有効化および無効化。詳細は、「アーカイブREDOログ・ファイルの管理」を参照してください。
全データベース・リカバリの実行。詳細は、『Oracle Databaseバックアップおよびリカバリ・ユーザーズ・ガイド』を参照してください。
次のコマンドは、インスタンスを起動してデータベースをマウントしますが、データベースはクローズしたままです。
SQL*Plus | SRVCTL(Oracle Restartを使用している場合) |
---|---|
STARTUP MOUNT |
srvctl start database -db db_unique_name -startoption mount
|
インスタンスの使用を管理担当者にのみ許可し、一般データベース・ユーザーの使用を禁止するには、制限モードでインスタンスを起動して、オプションでデータベースをマウントおよびオープンします。
次のいずれかのタスクを実行する必要があるときは、このインスタンス起動モードを使用してください。
データのエクスポートまたはインポートを実行する場合
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言語リファレンス』を参照してください。
通常と異なる状況では、データベース・インスタンスを起動しようとしたときに問題が発生することがありますが、データベース・インスタンスを強制的に起動できます。
次の問題が発生している場合以外は、データベースを強制的に起動しないでください。
現行インスタンスをSHUTDOWN NORMAL
、SHUTDOWN 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モードによる停止」を参照してください
メディア・リカバリが必要な場合は、インスタンスを起動し、データベースをインスタンスにマウントして、リカバリ処理を自動的に開始できます。
これには、次のいずれかのコマンドを使用します。
SQL*Plus | SRVCTL(Oracle Restartを使用している場合) |
---|---|
STARTUP OPEN RECOVER |
srvctl start database -db db_unique_name -startoption "open,recover"
|
必要ない場合にリカバリを実行しようとすると、Oracle Databaseによってエラー・メッセージが表示されます。
多くのサイトでは、システムの起動直後に1つ以上のOracle Databaseインスタンスとデータベースを自動的に起動する手順を使用しています。
そのための手順は、オペレーティング・システムによって異なります。自動起動の詳細は、オペレーティング・システム固有のOracleマニュアルを参照してください。
データベースの自動起動を構成する方法としてお薦めする(およびプラットフォームに依存しない)方法は、Oracle Restartです。詳細は、「Oracle Databaseの自動再起動の構成」を参照してください。
データベースの可用性を変更できます。可用性の変更は、メンテナンス上の理由やデータベースを読取り専用にするために行う場合があります。
特定の管理操作を実行する場合は、データベースを起動してインスタンスにマウントし、クローズしたままにする必要があります。そのためには、インスタンスを起動してデータベースをマウントします。
ALTER DATABASE
でMOUNT
句を指定します。ALTER DATABASE MOUNT;
関連項目:
データベースをマウントし、クローズしておくことが必要な操作(およびインスタンスの起動とデータベースのマウントを一度に実行する手順)の詳細は、「インスタンスを起動し、データベースをマウントする方法」を参照してください
データベースをオープンすることによって、マウントされ、クローズしているデータベースを一般的な用途のために使用可能にできます。
ALTER DATABASE
SQL文でOPEN
句を使用します。ALTER DATABASE OPEN;
この文の実行後は、CREATE SESSION
システム権限を持つ有効なOracle Databaseユーザーであれば、誰でもデータベースに接続できます。
データベースを読取り専用モードでオープンすると、オープンしたデータベースを問い合せることができますが、その間にデータの内容がオンラインで変更されることはありません。
これにより、データファイルと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言語リファレンス』を参照してください。
データベースが制限モードの場合は、RESTRICTED
SESSION
権限を持つユーザーのみが新しい接続を開始できます。SYSDBA
として接続するユーザー、またはDBA
ロールを使用して接続するユーザーにはこの権限があります。
すでに実行中のインスタンスを制限モードにする手順:
ENABLE RESTRICTED SESSION
句を指定して、SQL文ALTER SYSTEM
を実行します。
実行中インスタンスを制限モードにすると、ユーザー・セッションは終了されないか、終了された場合は影響を受けます。したがって、インスタンスを制限モードにした場合は、管理タスクを実行する前に現行のユーザー・セッションをすべて停止(終了)することを考慮します。
インスタンスの制限モードを解除するには、ALTER SYSTEM
でDISABLE RESTRICTED SESSION
句を指定します。
関連項目:
ユーザー・セッションを停止する方法は、「セッションの停止」を参照してください
インスタンスを制限モードにする理由は、「起動時にインスタンスへのアクセスを制限する方法」を参照してください
SQL*PlusまたはOracle Restartでデータベースを停止できます。
Oracle Restartを使用していない場合、データベース・インスタンスを停止するには、SQL*PlusでSYSOPER
、SYSDBA
、SYSBACKUP
または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の自動再起動の構成」を参照してください。
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
です。
通常のデータベース停止では、次のように処理が進みます。
文が発行された後は、新しい接続は許可されません。
データベースは、停止する前に、現在データベースに接続しているすべてのユーザーによるデータベースからの切断を待機します。
次にデータベースを起動するときに、インスタンス・リカバリ手順は必要ありません。
IMMEDIATEモードでデータベースを停止する場合、Oracle Databaseにより実行中のSQL文が終了され、ユーザーが切断されます。アクティブなトランザクションは終了され、コミットされていない変更はロールバックされます。
データベースの即時停止は、次のような状況のときにのみ使用します。
自動バックアップおよび無人バックアップを開始する場合
電源が間もなく停止する場合
データベースやデータベース・アプリケーションの一部が異常に動作している場合で、ユーザーにログオフを依頼できない場合、またはユーザーがログオフできない場合
データベースを即時に停止するには、次のいずれかのコマンドを使用します。
SQL*Plus | SRVCTL(Oracle Restartを使用している場合) |
---|---|
SHUTDOWN IMMEDIATE |
srvctl stop database -db db_unique_name -stopoption immediate
|
このデータベース停止では、次のように処理が進みます。
文が発行されると、新しい接続は許可されず、新しいトランザクションは開始できません。
すべての未コミットのトランザクションは、ロールバックされます。(長くかかる未コミットのトランザクションが存在する場合、この停止方法ではその名前に反して即座に終了しない場合があります。)
Oracle Databaseは、現在データベースに接続しているユーザーが切断されるのを待機しません。アクティブなトランザクションは暗黙的にロールバックされ、接続中のユーザーはすべて切断されます。
次にデータベースを起動するときに、インスタンス・リカバリ手順は必要ありません。
TRANSACTIONALモードでデータベースを停止する場合、ユーザーが新規トランザクションを開始できなくなりますが、現在のトランザクションがすべて完了するまで待機してから、データベースが停止します。現行トランザクションの性質によっては、停止までにかなりの時間がかかる場合があります。
アクティブ・トランザクションを完了してから、計画どおりにインスタンスを停止する場合は、次のいずれかのコマンドを使用します。
SQL*Plus | SRVCTL(Oracle Restartを使用している場合) |
---|---|
SHUTDOWN TRANSACTIONAL |
srvctl stop database -db db_unique_name -stopoption transactional
|
このデータベース停止では、次のように処理が進みます。
文が発行されると、新しい接続は許可されず、新しいトランザクションは開始できません。
すべてのトランザクションが完了すると、まだインスタンスに接続されているすべてのクライアントが切断されます。
この時点で、インスタンスはSHUTDOWN IMMEDIATE
文を発行した場合と同じように停止します。
次にデータベースを起動するときに、インスタンス・リカバリ手順は必要ありません。
TRANSACTIONALオプションによる停止では、クライアントの作業内容が失われずに済み、すべてのユーザーがログオフする必要がなくなります。
データベース・インスタンスを強制終了することによって、データベースをただちに停止できます。
この停止方法は、次の場合を除いてできるだけ使用を避けてください。
データベース、もしくはそのアプリケーションの1つが不適切に機能していて、かつ他のいずれの停止モードも作動しない場合。
データベースをただちに停止する必要がある(たとえば、電源遮断が1分以内に発生することがわかっている)場合。
データベース・インスタンスを起動するときに問題が発生した場合。
トランザクションとユーザーの接続を強制終了してデータベースを停止する必要がある場合は、次のいずれかのコマンドを使用します。
SQL*Plus | SRVCTL(Oracle Restartを使用している場合) |
---|---|
SHUTDOWN ABORT |
srvctl stop database -db db_unique_name -stopoption abort
|
このデータベース停止では、次のように処理が進みます。
文が発行されると、新しい接続は許可されず、新しいトランザクションは開始できません。
Oracle Databaseによって処理されている現行のクライアントSQL文はただちに終了します。
コミットされていないトランザクションはロールバックされません。
Oracle Databaseは、現在データベースに接続しているユーザーが切断されるのを待機しません。接続中のユーザーはすべて暗黙的に切断されます。
次にデータベースを起動するときに、自動インスタンス・リカバリ手順が必要になります。
ユーザーによる切断またはトランザクションの完了を待機する停止モードには、待機時間に制限があります。
停止をブロックするすべてのイベントが1時間以内に発生しない場合、停止操作は「ORA-01013: ユーザーによって現行の操作の取消しがリクエストされました
」というメッセージを表示して強制終了されます。また、このメッセージは停止プロセスを中断した場合(たとえばCTRL-C
を押した場合など)にも表示されます。インスタンスの停止を中断しようとしないことをお薦めします。停止プロセスが完了してから、インスタンスを再起動してください。
ORA-01013
が発生した後は、インスタンスが予測できない状態になると考える必要があります。このため、SHUTDOWN
コマンドを再発行して、停止プロセスを継続する必要があります。後続のSHUTDOWN
コマンドが引き続き失敗する場合は、SHUTDOWN
ABORT
コマンドを発行してインスタンスを停止する必要があります。その後でインスタンスを再起動できます。
データベースの静止中は、DBAによるトランザクション、問合せ、フェッチまたはPL/SQL文のみ実行できます。
データベースを、DBAによるトランザクション、問合せ、フェッチまたはPL/SQL文の実行のみ許可された状態にすることが必要な場合があります。このような状態は、システム上でDBA以外によるトランザクション、問合せ、フェッチまたはPL/SQL文が実行されていないという意味で、静止状態と呼びます。
注意:
静止中のデータベースに関するこの項の説明では、DBAがユーザーSYS
またはSYSTEM
として定義されています。DBA
ロールを持つユーザーなどの他のユーザーには、ALTER SYSTEM QUIESCE DATABASE
文の発行や、データベース静止後の処理の継続は許可されていません。
データベースを静止状態にすることで、管理者は、それ以外の状態では安全に実行できない処理を実行できます。次の処理を実行できます。
同時ユーザー・トランザクションが同じオブジェクトにアクセスした場合に失敗する処理。たとえば、データベース表のスキーマの変更や、NOWAITロックが必要な既存表への列の追加などがこれに該当します。
同時ユーザー・トランザクションによって好ましくない中間影響を受けるアクション、たとえば表を最初にエクスポートしてから削除し、最後にインポートする場合のような、複数の手順からなる表の再編成処理など。表が削除された後であっても、インポートされる前に同時ユーザーが表にアクセスしようとすると、状況を正確に認識できません。
データベースの静止機能がない場合は、データベースを停止し、制限モードで再度オープンする必要があります。これは、特に24時間、365日の可用性が必要なシステムにとっては重大な制限です。データベースの静止によって、ユーザーに対する遮断とデータベースの停止と再起動に伴う停止時間を最小限にできるため、制限が大幅に緩和されます。
データベースが静止中の場合、DBA以外のセッションがアクティブにならないようにするために、データベース・リソース・マネージャの機能が使用されています。したがって、この文が有効な間に現行のリソース・プランを変更しようとすると、その処理はシステムが静止解除されるまでキューに待機します。データベース・リソース・マネージャの詳細は、「Oracle Database Resource Managerを使用したリソースの管理」を参照してください。
データベースを静止状態にした場合、DBA以外によるアクティブ・セッションは非アクティブになるまで続行されます。アクティブなセッションとは、トランザクション、問合せ、フェッチまたはPL/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のバックグラウンド・プロセスが内部の目的のために更新を実行している可能性があるため、データベースが静止状態の場合はコールド・バックアップを実行できません。また、オンライン・データファイルのヘッダーは引き続きアクセス可能に見えます。このファイル・ヘッダーの状態は、データベースが正しく停止された場合とは異なります。ただし、データベースが静止状態の間でも、オンライン・バックアップ操作は実行できます。
関連項目:
V$BLOCKING_QUIESCE
ビューの詳細は、『Oracle Databaseリファレンス』を参照してください
V$SESSION
ビューの詳細は、『Oracle Databaseリファレンス』を参照してください。
システムを通常操作にリストアすると、DBA以外によるすべてのアクティビティを続行できます。
ALTER SYSTEM UNQUIESCE;
Oracle Real Application Clusters環境では、データベースを静止した場合と同じセッションまたは同じインスタンスでこの文を発行する必要はありません。ALTER SYSTEM UNQUIESCE
文を発行したセッションが異常終了した場合、Oracle Databaseサーバーは静止解除を確実に完了します。
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バックアップおよびリカバリ・ユーザーズ・ガイド』を参照してください。