12 WindowsシステムのノードでのOracle RACの追加と削除

この章では、既存のOracle Real Application Clusters(Oracle RAC)ホームを他のノードおよびクラスタ内のインスタンスに拡張し、Oracle RACをノードおよびクラスタ内のインスタンスから削除する方法について説明します。Windowsシステムの場合の手順について説明します。

注意:

この章では、Grid_homeのエントリはOracle Grid Infrastructureホームのフル・パス名を指し、Oracle_homeのエントリはOracle RACがあるOracleホームの環境変数の置き換えを指します。

既存のOracle RACホームをクローニングし、クラスタ全体で複数の新規Oracle RACインストールを作成する場合は、「新規クラスタのノードへのOracle RACのクローニング」に示すクローニング手順に従います。

この章の内容は次のとおりです。

注意:

  • ocrconfig -showbackupコマンドを実行してOracle RACの追加または削除を行う前に、Oracle Cluster Registry(OCR)の現行のバックアップがあることを確認してください。

  • ノードの追加とノードの削除のすべての手順で、%TEMP%C:\Tempなどの一時ディレクトリは、共有ディレクトリにしないでください。一時ディレクトリが共有されていると、%TEMP%などの一時環境変数にはローカル・ノードにある場所が設定されます。また、すべてのノードに存在するディレクトリ・パスを使用してください。

12.1 Oracle ClusterwareがインストールされたノードへのOracle RACの追加

この手順を開始する前に、既存ノードのGrid_homeへのパスが正しいこと、およびOracle_home環境変数が正しく設定されていることを確認します。

Oracle ClusterwareがすでにインストールされているノードにOracle RACデータベース・インスタンスを追加するには、クラスタの既存のノード(この手順ではnode1)にあるOracle RACホームをターゲット・ノードに拡張する必要があります。

  1. node1Oracle_home\addnodeディレクトリに移動し、次の構文を使用してaddnode.batスクリプトを実行します(ここで、node2は追加するノードの名前です)。

    addnode.bat "CLUSTER_NEW_NODES={node2}"

    このコマンドをサイレント・モードで実行するには、次の手順を実行します。

    addNode.bat -silent "CLUSTER_NEW_NODES={node2}"

    使用するOracleホーム・ディレクトリで、Oracle DatabaseソフトウェアをインストールしたときにOracleホーム・ユーザーを指定した場合、OUIではOracleホーム・ユーザーのパスワードが必要になります。OUIは、ユーザーの(OCRに格納されている)ウォレットをチェックし、そこからパスワードを抽出します。ユーザー情報がウォレットに含まれていない場合は、コマンドラインで-promptPasswdフラグを指定しないかぎり、addnode.batスクリプトによってエラーが生成されます。

  2. ポリシー管理データベースをOracle Automatic Storage Management(Oracle ASM)に格納する場合は、Oracle Managed Filesが有効になり、node2のサーバー・プールに領域があれば、crsdがOracle RACデータベース・インスタンスをnode2に追加するため、それ以上の処置は必要ありません。Oracle Managed Filesが有効でない場合は、UNDOログおよびREDOログを手動で追加する必要があります。

    サーバー・プールに空き領域がない場合は、node2は空きサーバー・プールに移動します。srvctl modify srvpoolコマンドを使用して、node2を格納するサーバー・プールのカーディナリティを上げた後に、node2は空きサーバー・プールから修正済サーバー・プールに移動し、crsdはOracle RACデータベース・インスタンスをnode2に追加します。

  3. 管理者管理データベースを使用している場合、node2に新しいインスタンスを追加します

Oracle Automatic Storage Management Cluster File System (Oracle ACFS)を使用して共有されている共有Oracleホームを持つ場合は、次の手順を実行し、Oracle Databaseホームをnode2に拡張します。

  1. rootとしてGrid_home\binディレクトリから次のコマンドを実行して、新しいノードでOracle ACFSリソースを起動します。

    $ srvctl start filesystem -device volume_device_name [-node node_name]

    注意:

    Oracleホームが格納されているOracle ACFSレジストリ・リソースおよびOracle ACFSファイル・システム・リソースを含むOracle ACFSリソースが、新しく追加されたノードでオンラインであることを確認します。

  2. Oracle RACをインストールしたユーザーとして、追加したノードのOracle_home\oui\binディレクトリから次のコマンドを実行し、Oracle RACデータベース・ホームを追加します。

    setup.exe -attachHome ORACLE_HOME="ORACLE_HOME" LOCAL_NODE="node2"
      ORACLE_HOME_NAME="home_name" -cfs
  3. node1Oracle_home\addnodeディレクトリに移動し、次の構文を使用してOracle RACをインストールしたユーザーとしてaddnode.batスクリプトを実行します。

    addnode.bat -noCopy "CLUSTER_NEW_NODES={node2}"

    注意:

    宛先ノードのOracleホームはすでにソフトウェアに完全に移入されているため、-noCopyオプションを使用します。

Oracle ACFS以外の共有ファイル・システムで共有Oracleホームを持つ場合は、まずターゲット・ノードでOracle RACデータベース・ホームのマウント・ポイントを作成し、Oracle RACデータベース・ホームをマウントおよびアタッチし、次のようにOracle Inventoryを更新します。

  1. クラスタ内の既存ノードでsrvctl config database -db db_nameコマンドを実行して、マウント・ポイント情報を取得します。

  2. Oracle RACデータベース・ホームをホストするファイル・システムをマウントします。

  3. Oracle RACをインストールしたユーザーとして、追加したノードのOracle_home\oui\binディレクトリから次のコマンドを実行し、Oracle RACデータベース・ホームを追加します。

    setup.exe -attachHome ORACLE_HOME="ORACLE_HOME" "CLUSTER_NODES=
      local_node_name}" LOCAL_NODE="node_name" ORACLE_HOME_NAME="home_name"
  4. Oracle RACをインストールしたユーザーとして、次のようにOracle Inventoryを更新します。

    setup.exe -updateNodeList ORACLE_HOME=mount_point_path "CLUSTER_NODES={node_list}"

    前述のコマンドで、node_listはOracle RACデータベース・ホームがインストールされたすべてのノード(追加したものも含む)のリストです。

注意:

ノード追加プロセスの終了後は、投票ディスクおよびOracle Cluster Registry(OCR)ファイルをバックアップすることをお薦めします。

12.1.1 ターゲット・ノードへの管理者管理Oracle RACデータベース・インスタンスの追加

Oracle Enterprise ManagerまたはDBCAを使用して、Oracle RACデータベース・インスタンスをターゲット・ノードに追加できます。

この項では、DBCAを使用してOracle RACデータベース・インスタンスを追加する方法について説明します。

これらのツールは、次のタスクをガイドします。

  • 各ターゲット・ノードでの新規データベース・インスタンスの作成

  • 高可用性コンポーネントの作成および構成

  • Oracleホームからのデフォルト以外のリスナー用のOracle Net構成の作成

  • 新規インスタンスの起動

  • サービス構成ページでサービス情報を入力した場合、サービスの作成および起動

ターゲット・ノードにインスタンスを追加した後で、必要なサービス構成手順を実行する必要があります。

12.1.1.1 対話モードでのDBCAによるターゲット・ノードへのデータベース・インスタンスの追加

対話モードでDBCAを使用してターゲット・ノードにデータベース・インスタンスを追加するには、次の手順を実行します。

  1. 既存ノードのOracleホーム環境変数が正しく設定されていることを確認します。

  2. 既存ノードのOracle_home\binディレクトリから、システム・プロンプトでdbcaを入力してDBCAを起動します。

    DBCAの実行中に、CVUの特定のチェックが実行されます。ただし、コマンドラインからCVUを実行して、様々な検証を実行することもできます。

  3. 「データベース操作」ページで、「インスタンス管理」を選択し、「次へ」をクリックすると、DBCAには「インスタンス管理」ページが表示されます。

  4. 「インスタンスの追加」を選択し、「次へ」をクリックします。DBCAによって「クラスタ・データベースのリスト」ページが表示され、データベースおよび現在のステータス(ACTIVEINACTIVEなど)が表示されます。

  5. 「クラスタ・データベースのリスト」ページで、インスタンスを追加するアクティブなOracle RACデータベースを選択します。「次へ」をクリックすると、DBCAによって選択したOracle RACデータベースの既存のインスタンスの名前を示す「クラスタ・データベース・インスタンスのリスト」ページが表示されます。

  6. 新規インスタンスを追加するには、「次へ」をクリックします。DBCAによって「インスタンスの追加」ページが表示されます。

  7. 「インスタンスの追加」ページで、DBCAに表示されるインスタンス名が既存のインスタンス名スキームと合致しない場合には、このページの一番上のフィールドにインスタンス名を入力します。次に、リストから新しいノード名を選択します。

    注意:

    「Oracleホーム・ユーザー」オプションとともにOracleホームをインストールした場合、DBCAによって、このページでパスワードが求められます。

  8. 「サマリー」ページの情報を確認し、「終了」をクリックしてインスタンス追加操作を開始します。DBCAがインスタンス追加操作を実行中であることを示す進捗ダイアログ・ボックスが表示されます。

OraMTS Service for Microsoft Transaction Serverの作成

Oracle Services for Microsoft Transaction Server (OraMTS)を使用すると、Microsoftアプリケーションで調整されるトランザクション内で、リソース・マネージャとしてOracle Databaseを使用できます。OraMTSは、Microsoft分散トランザクション・コーディネータ(MSDTC)に対するOracle Databaseのプロキシとして機能します。この結果、OraMTSによってクライアント側の接続プールが提供され、Oracleを利用するクライアント・コンポーネントを昇格可能なトランザクションおよび分散トランザクションに使用できるようになります。また、サービス自体がWindowsで実行される場合、OraMTSは、任意のオペレーティング・システム上で実行されているOracle Databaseと連携して動作できます。

Oracle Database 12cより前のリリースでは、OraMTSはソフトウェアのみのインストールの一部として作成されました。Oracle Database 12c以上では、構成ツールを使用してこのサービスを作成する必要があります。

ノードの追加後、またはOracle RACのソフトウェアのみのインストールを実行した後でOraMTSサービスを作成するには、次の手順を実行します。

  1. コマンド・ウィンドウを開きます。

  2. ディレクトリを%ORACLE_HOME%\binに変更します。

  3. OraMTSCtlユーティリティを実行してOraMTSサービスを作成します(ここで、host_nameはサービスが作成されるノードのリストです)。

    C:\..bin> oramtsctl.exe -new -host host_name
12.1.1.2 サイレント・モードでのDBCAによるターゲット・ノードへのデータベース・インスタンスの追加

Oracle ClusterwareホームおよびOracle Databaseホームを拡張したノードにインスタンスを追加します。

次の構文とともにDBCAのサイレント・モードを使用します。

dbca -silent -addInstance -nodeList node_name -gdbName gdb_name
[-instanceName instance_name -sysDBAUserName sysdba -sysDBAPassword password]

関連項目:

前述の構文で使用されている変数の定義については、表11-1を参照してください。

必要なサービス構成手順を実行します。

12.2 クラスタ・ノードからのOracle RACの削除

クラスタ・ノードからOracle RACを削除するには、データベース・インスタンスおよびOracle RACソフトウェアを削除した後で、クラスタからそのノードを削除する必要があります。

注意:

削除するノードにデータベース・インスタンスがない場合は、Oracle RACを削除します。

この項では、次の手順を実行して、Oracle RAC環境のクラスタからノードを削除します。

関連項目

12.2.1 Oracle RACデータベースからのインスタンスの削除

インスタンスの削除手順は、ポリシー管理データベースと管理者管理データベースとでは異なります。

ポリシー管理データベース・インスタンスを削除すると、データベース・インスタンスが存在するサーバー・プールのサイズが減少します。管理者管理データベース・インスタンスの削除では、DBCAを使用したデータベース・インスタンスの削除が必要です。

ポリシー管理データベースの削除

ポリシー管理データベースを削除するには、データベース・インスタンスが存在するサーバー・プールのサイズを小さくします。この操作によって、ノードからOracle RACソフトウェアを削除しなくても、またはクラスタからノードを削除しなくても、事実上インスタンスは削除されます。

たとえば、クラスタ内の任意のノードで次のコマンドを実行すると、ポリシー管理データベースを削除できます。

$ srvctl stop instance -db db_unique_name -node node_name
$ srvctl relocate server -servers "server_name_list" -serverpool Free

最初のコマンドは特定のノードのインスタンスで停止し、2つ目のコマンドはサーバーのリストを現行のサーバー・プールから空きサーバー・プールに移動します。

管理者管理データベースからのインスタンスの削除

注意:

Oracle RACデータベースからインスタンスを削除する前に、SRVCTLを使用して次の操作を実行します。

  • サービスが構成されている場合は、サービスを再配置します。

  • 各サービスを残りのインスタンスの1つで実行できるように、サービスを変更します。

  • 管理者管理データベースから削除されるインスタンスが、何らかのサービスの優先インスタンスまたは使用可能インスタンスではないことを確認します。

12.2.1.1 対話モードでのDBCAによるノードからのインスタンスの削除

対話モードでDBCAを使用してインスタンスを削除するには、次の手順を実行します。

  1. OCRの現行のバックアップがあることを確認します。

    ocrconfig -showbackupコマンドを実行して、有効なバックアップがあることを確認します。

  2. DBCAを起動します。

    削除するインスタンスを保持しているノード以外のノードで、DBCAを起動します。削除するデータベースおよびインスタンスは、この手順の間、起動し、実行し続ける必要があります。

  3. DBCAの「操作」ページで「インスタンス管理」を選択して、「次へ」をクリックします。「インスタンス管理」ページが表示されます。

  4. 「インスタンス管理」ページで、「インスタンスの削除」を選択して、「次へ」をクリックします。DBCAによって「クラスタ・データベースのリスト」ページが表示されます。

  5. インスタンスを削除するOracle RACデータベースを選択します。「次へ」をクリックすると、DBCAによって「クラスタ・データベース・インスタンスのリスト」ページが表示されます。「クラスタ・データベース・インスタンスのリスト」ページには、選択したOracle RACデータベースに関連付けられたインスタンスと各インスタンスのステータスが表示されます。

  6. 「クラスタ・データベースのリスト」ページで、次のように、インスタンスを削除するOracle RACデータベースを選択します。

    1. この「クラスタ・データベース・インスタンスのリスト」ページには、DBCAによって選択したOracle RACデータベースに関連付けられたインスタンスと各インスタンスのステータスが表示されます。インスタンスを削除するクラスタ・データベースを選択します。「終了」をクリックします。

    2. 「確認」ダイアログ・ボックスで「OK」をクリックし、インスタンスの削除を続行します。

    3. 次の「確認」ダイアログ・ボックスで「OK」をクリックし、インスタンスおよび関連するOptimal Flexible Architecture(OFA)ディレクトリ構造を削除します。

      DBCAがインスタンスを削除していることを示す進捗ダイアログ・ボックスが表示されます。この操作の中で、DBCAはインスタンスとそのインスタンスのOracle Net構成を削除します。

      DBCAを終了する場合は「いいえ」を、別の操作を実行する場合は「はい」をクリックします。「はい」をクリックすると、DBCAによって「操作」ページが表示されます。

  7. 既存インスタンスからSQL*Plusを使用してV$LOGビューを問い合せ、削除したインスタンスのREDOスレッドが削除されていることを確認します。REDOスレッドが無効になっていない場合は、スレッドを無効にします。次に例を示します。

    SQL> ALTER DATABASE DISABLE THREAD 2;
    
  8. 次のコマンドを実行して、OCRからインスタンスが削除されていることを確認します(db_unique_nameはデータベース名です)。

    srvctl config database -db db_unique_name
    
  9. 複数のノードを削除する場合は、この手順を繰り返し、削除するすべてのノードからインスタンスを削除します。

12.2.1.2 サイレント・モードでのDBCAによるノードからのインスタンスの削除

DBCAのサイレント・モードを使用して、ノードからデータベース・インスタンスを削除できます。

次のコマンドを実行します(変数は、表11-1に示したインスタンスを追加するDBCAコマンドの変数と同じです)。次の例に示すとおり、DBCAが実行されているノード以外からインスタンスを削除する場合のみ、ノード名を指定します(passwordはSYSDBAパスワードです)。

dbca -silent -deleteInstance [-nodeList node_name] -gdbName gdb_name
-instanceName instance_name [-sysDBAUserName sysdba] [-sysDBAPassword password]

この時点で、次の作業が完了しました。

  • 関連付けられたOracle Net Servicesリスナーからの選択されたインスタンスの登録解除

  • インスタンスの構成ノードからの選択されたデータベース・インスタンスの削除

  • Oracle Net構成の削除

  • インスタンスの構成ノードからのOracle Flexible Architectureディレクトリ構造の削除

12.2.2 Oracle RACの削除

この手順では、クラスタから削除するノードからOracle RACソフトウェアを削除し、残りのノードのインベントリを更新します。

  1. 削除するノードのOracle RACホームにリスナーが存在する場合、Oracle RACソフトウェアを削除する前にリスナーを無効にして停止する必要があります。リスナーの名前および削除するノード名前を指定して、次のコマンドをクラスタ内の任意のノードで実行します。

    C:\srvctl disable listener -listener listener_name -node name_of_node_to_delete
    C:\srvctl stop listener -listener listener_name -node name_of_node_to_delete
  2. Oracle_home\deinstallディレクトリから次のコマンドを実行して、削除するノードからOracleホームをアンインストールします。

    deinstall -local

共有Oracle RACホームがある場合、この手順のコマンド例に-cfsオプションを追加し、クラスタ・ファイル・システムの完全なパスの場所を指定します。

12.2.3 クラスタからのノードの削除

インスタンスを削除すると、クラスタからノードを削除するプロセスを開始できます。削除するノードでスクリプトを実行してOracle Clusterwareインストールを削除し、残りのノードでスクリプトを実行してノード・リストを更新し、このプロセスを完了します。