8 シャード・データベースのデプロイ

シャード・データベースのデプロイでは、必要なソフトウェア・コンポーネントのインストール、カタログ、ロール、シャード・データベースの作成、高可用性のためのレプリケーションの構成、およびシャード・データベースのスキーマの作成のための前提条件と手順について説明します。

次の各項で、シャード・データベースのデプロイに必要な概念とタスクについて説明します。

シャード・データベースのデプロイの概要

Oracle Shardingには、シャード・データベースを自動的にデプロイする機能があり、これにはシャードとレプリカの両方が含まれます。

シャード・データベース管理者は、トポロジ(リージョン、シャード・ホスト、レプリケーション・テクノロジ)を定義し、GDSCTLコマンドライン・インタフェースを使用して宣言的に指定することでDEPLOYコマンドを起動します。

大まかなデプロイメント・ステップは次のとおりです。

  1. コンポーネントを設定します。

    • シャード・カタログをホストするデータベースを作成します。

    • シャード・ノードにOracle Databaseソフトウェアをインストールします。

    • シャード・ディレクタ・ノードにシャード・ディレクタ(GSM)ソフトウェアをインストールします。

    ノート:

    本番のデプロイメントでは、シャード・カタログ・データベース用にData Guardを構成することをお薦めします。
  2. 次のコマンドを使用してトポロジ・レイアウトを指定します。

    • CREATE SHARDCATALOG

    • ADD GSM

    • START GSM

    • ADD CREDENTIAL (CREATE SHARDを使用する場合)

    • ADD SHARDGROUP

    • ADD INVITEDNODE

    • シャードごとにCREATE SHARD (またはADD SHARD)

  3. DEPLOYを実行し、シャード・データベース内のシャードにアクセスするためのグローバル・サービスを追加します。

    • DEPLOY

    • ADD SERVICE

デプロイメント方法の選択

シャード・データベースをデプロイするには、新しいデータベースに対して同時にシャードを作成するか、既存のデータベースからシャードを追加します。

Oracle Shardingでは、2つのデプロイメント方法がサポートされています。1つ目はCREATE SHARDコマンドを使用する方法で、Oracle Shardingの管理層によってシャードとレプリケーション構成の作成が自動的に実行されます。この方法は、PDBをシャードとして使用するマルチテナント・アーキテクチャでは使用できません。

2つ目はADD SHARDコマンドを使用するデプロイメント方法です。データベース作成の標準で、事前に作成した独自のデータベースを使用してSDBをデプロイする必要がある場合、ADD SHARDデプロイメント方法は、事前に作成したデータベース・シャードを追加するだけでこの要件に対応します。

デプロイメント方法: CREATE SHARD

DEPLOYコマンドは、シャードを作成します。これは、DBMS_SCHEDULERパッケージ(シャード・カタログで実行)を使用して実行され、このパッケージはリモート・シャード・ホストのスケジューラ・エージェントと通信します。

すると、エージェントがDBCAとNETCAおよび(Oracle GoldenGateレプリケーションが指定されている場合は) GoldenGate Creation Assistance (GGCA)を起動し、シャードおよびローカル・リスナーを作成します。プライマリ・シャードが作成されると、対応するスタンバイ・シャードがRMAN DUPLICATEコマンドを使用して作成されます。

高可用性ソリューションとしてData Guardを使用している場合は、プライマリ・シャードおよびスタンバイ・シャードが作成されると、DEPLOYコマンドがファスト・スタート・フェイルオーバー(FSFO)を有効にしてData Guard Brokerを構成します。FSFOオブザーバがリージョナル・シャード・ディレクタで自動的に起動されます。

ノート:

CREATE SHARDによる方法は、シャードとして使用されるPDBではサポートされません。マルチテナント・アーキテクチャでは、ADD SHARDによる方法のみが使用できます。

すべてのシャードについて、アーカイブ・ログおよびフラッシュバックは有効になります。これは、フェイルオーバー時にFSFOオブザーバがスタンバイの自動再インスタンス化を実行するために必要です。

デプロイメント方法: ADD SHARD

独自のデータベース作成標準があり、事前に作成した独自のデータベースを使用してシャード・データベースをデプロイする場合は、ADD SHARDコマンドを使用してシャード・データベース構成にシャードを追加します。この方法は、Oracle RAC対応のシャード、Oracle Restart対応のシャードまたはPDBシャードの場合にお薦めします。この方法は、ASMを使用している場合にお薦めします。ADD SHARDによるデプロイメント方法は、新しいインスタンスを作成せずに、データベースがすでにデプロイされているシャードを追加することによって、この要件をサポートします。

デプロイメントにADD SHARDコマンドを使用し、高可用性のためにData Guardを使用している場合、DEPLOYコマンドはOracle GoldenGate、またはData Guard、ブローカおよびファスト・スタート・フェイルオーバーの構成を処理します。また、追加されるシャード用にData Guardを事前に構成したシナリオにも対処します。

Data GuardまたはActive Data Guardを使用したシャーディングとは異なり、Oracle GoldenGateを手動でデプロイすることはできません。その場合は、DEPLOYコマンドを使用して行う必要があります。

Oracle ShardingでのOracle Multitenantの使用

1つのプラガブル・データベース(PDB)を含むマルチテナント・コンテナ・データベース(CDB)をOracle Sharding構成内のシャードとして使用できます。

稼働率が低いハードウェアでのデータベースの統合、管理のしやすさ、または地理的なビジネス要件をサポートするため、CDB内の1つのPDBをデータベース・シャードとして使用できます。たとえば、データベース統合の場合は、シャードPDBを含むCDBに他の非シャードPDBを追加できます。

シャード・データベース構成にシャードPDBを追加するには、まずシャード・カタログにそのシャードPDBが含まれているCDBを追加する必要があります。事前に作成されたCDBをシャード・カタログに追加するには、GDSCTLコマンドのADD CDBを使用します。次に、デプロイメント時に-cdbオプションを指定したGDSCTLのADD SHARDコマンドを使用して、CDBに含まれるPDBであるシャードをシャード・データベースに追加します。

次の例では、一意の名前がdb11であるCDBをシャード・カタログに追加し、それをシャード・データベース構成内のシャードグループshgrp1に追加しています。

GDSCTL> add cdb -connect CDB$ROOT_connect_string -pwd GSMUSER_password
GDSCTL> add shard -cdb db11 -connect PDB_connect_string –shardgroup shgrp1
 -deploy_as active_standby -pwd GSMUSER_password

シャード・カタログ内のCDBに関する情報を表示するには、CONFIG CDBを使用します。

GDSCTL> config cdb

Name: tstsdbyb 
Connection string: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=cdb1host)(PORT=1521))
(CONNECT_DATA=(SERVICE_NAME=cdb1.example.com))) 
SCAN address: 
ONS remote port: 0 
Disk Threshold, ms: 20 
CPU Threshold, %: 75 
Version: 18.0.0.0 
Rack:

ノート:

Oracle GoldenGateレプリケーションでは、PDBをシャードとしてサポートしません。

PDBシャードの移動

シャードPDBは、手動でCDBから切断し、異なるCDBに接続できます。これは、シャーディング・インタフェースの外部で行うことができます。その後、シャード・カタログのメタデータを更新して、PDBシャードが別のCDBに移動したことを示すことができます。シャード・カタログ内のシャードPDBの場所を更新するには、-REPLACEオプションを指定したGDSCTLコマンドADD SHARDを使用します。

PDBシャードの高可用性

Oracle Data Guardでは、CDBレベルのレプリケーションのみがサポートされます。既存のシャーディング・アーキテクチャでは、高可用性を実現するためにシャード・データのレプリケート・コピーが許可されており、必要に応じてこれらのコピーを作成および管理できるようにData Guardを構成して使用できます。Data Guardでは、現在PDBレベルのレプリケーションがサポートされておらず、コンテナ全体のみをレプリケートできます。

シャーディング構成でのCDBの変更

シャード・カタログ内のCDBのメタデータを変更するには、MODIFY CDBを使用します。CDBにシャードが格納されるか、デプロイされたシャードが格納された後は、一部のパラメータを使用できません。

GDSCTL> modify cdb -shard cdb1 -pwd new_password

シャード・カタログからCDBを削除するには、REMOVE CDBを使用します。CDBを削除しても、そのCDBは破棄されません。

GDSCTL> remove cdb -cdb cdb1

非PDBシャードからPDBシャードへのアップグレード

非PDBシャード環境からPDBを利用する環境にアップグレードするときは、既存の非PDBシャードをそれぞれバックアップしてから、新しいCDBを作成し、その内部に新しいPDBを作成する必要があります。その後、CDB移行ガイドの推奨事項に従ってシャードをCDB内のPDBにリストアします。この時点で、シャードはCDB内のPDBになっているので、GDSCTLのADD CDBコマンドを使用して新しいCDBを追加した後、PDBの接続文字列を指定してADD SHARD -REPLACEを実行し、古いシャードの場所を新しいPDBの場所に置き換えるようにシャーディング・インフラストラクチャを設定します。

関連項目:

Oracle Database Global Data Services概要および管理ガイド(PDBシャードで使用されるGDSCTLコマンドの詳細)

Oracle Database管理者ガイド(Oracle Multitenantの詳細)

Oracle Shardingの前提条件

ソフトウェアをインストールする前に、Oracle Shardingのハードウェア、ネットワークおよびオペレーティング・システムの要件を確認してください。

  • シャードのハードウェアおよびオペレーティング・システムの要件は、Oracle Databaseがサポートされる要件と同じです。これらの要件の詳細は、Oracle Databaseのインストール・ドキュメントを参照してください。

  • シャード・カタログおよびシャード・ディレクタのハードウェア、ソフトウェアおよびオペレーティング・システムの要件は、Global Data Servicesカタログおよびグローバル・サービス・マネージャのサポート要件と同じです。これらの要件の詳細は、Oracle Database Global Data Services概要および管理ガイドを参照してください。

  • ネットワーク要件は低遅延GigEです。

  • ポート通信の要件は次のとおりです。CREATE SHARDを使用するには、次のすべての要件を満たす必要があります。ADD SHARDを使用する場合、項目4と5は関係ありません。

    1. すべてのシャードがすべてのシャード・ディレクタのリスナーとONSポートに到達できる必要があります。シャード・ディレクタのデフォルトのリスナー・ポートは、1522です。デフォルトのONSポートは、ほとんどのプラットフォームで6123 (ローカルONS)および6234 (リモートONS)です。シャード・ディレクタのこれらのリスナー・ポートおよびONSポートが、アプリケーション/クライアント層、すべてのシャード、シャード・カタログおよび他のすべてのシャード・ディレクタに対して開かれている必要があります。

    2. すべてのシャードがシャード・カタログ(プライマリとスタンバイの両方)のTNSリスナー・ポートに到達できる必要があります。

    3. 各シャードのTNSリスナー・ポート(デフォルトは1521)がシャード・ディレクタおよびシャード・カタログに対して開かれている必要があります。

    4. プライマリおよびスタンバイ・シャード・カタログ・データベースで、CREATE SHARDCATALOGコマンドの-agent_port (デフォルトは8080)に使用されているポートがすべてのシャードから可視である必要があります。

    5. すべてのシャードのスケジューラ・エージェント・ポートがシャード・カタログ・ノードから可視である必要があります。このポートを特定するには、各シャードに対してschagent -statusを実行します。

Oracle Databaseソフトウェアのインストール

シャード・カタログまたはデータベース・シャードをホストする各システムにOracle Databaseをインストールします。

Oracle Databaseをインストールする前に、シャード・データベース、シャード・カタログおよびシャード・ディレクタをホストするすべてのシステムでオペレーティング・システムのユーザーを作成し、それらをDBAグループに割り当てます。ユーザーがsuを実行することを許可し、後の手順で使用できるように資格証明をノートにとります。

オペレーティング・システム・ユーザーの構成の詳細は、Oracle Databaseインストレーション・ガイドfor Linuxまたは使用しているプラットフォームのインストレーション・ガイドを参照してください。

  1. シャード・カタログまたはデータベース・シャードをホストするすべてのシステムにOracle Databaseインストーラをダウンロードします。
  2. シャード・カタログまたはシャード・データベースをホストするすべてのシステムにOracle Databaseをインストールします。
    1. 最初のシステムでインストーラを実行します。
      $ cd /u01/stage/database
      $ ./runInstaller

      Oracle Databaseのインストールをステップ・スルーするときに、該当する画面で次のオプションを選択してください。

      • インストール・オプション・ページで、データベース・ソフトウェアのみをインストールを選択します。

      • グリッド・インストール・オプション・ページで、単一インスタンス・データベースのインストールを選択します。Oracle RACおよびOracle RAC One Nodeは、このリリースではサポートされていません。

      • 「データベース・エディション」ページで、「Enterprise Edition」を選択します。

      • インストールの場所ページで、前述のステップで環境スクリプトを作成するときに使用した値と同じ「Oracleベース」値および「ソフトウェアの場所」値を使用します。

      • インベントリの作成ページで、デフォルトを受け入れます。

      • 「オペレーティング・システム・グループ」ページで、デフォルトを受け入れるか、環境に適した設定に変更します。

      • 「サマリー」ページで、レスポンス・ファイルの保存をクリックすると、残りのホストでOracle Databaseソフトウェアのサイレント・インストールを行うためのファイルを作成できます。

      • インストール中に要求された場合は、別個のターミナルでorainstRoot.shスクリプトおよびroot.shスクリプトをrootとして実行します。

    2. 必要に応じて、最初のインストールで作成したレスポンス・ファイルを使用し、残りの各ホストでサイレント・インストールを実行します。

      レスポンス・ファイルを使用してサイレント・インストールを実行した後に、データベースのroot.shスクリプトを実行すると、その実行で対話形式で値を入力するように求められず、デフォルト値(たとえば、ローカル・ユーザーのbinディレクトリ)のみが使用されることがあります。デフォルト以外の値を使用する場合は、インストーラを起動するときに-silentオプションを省略して-responseFileの場所のみを指定します。インストーラ画面をクリックして進み、レスポンス・ファイルの値を受け入れ、要求に応じてルート・スクリプトを実行します。ルート・スクリプトの実行中に、ユーザー・プロンプトが表示され、デフォルト以外の値を入力できます。

関連項目:

Oracle Databaseのサイレント・インストールのレスポンス・ファイルの使用方法の詳細は、Oracle Databaseインストレーション・ガイドfor Linuxを参照してください

シャード・ディレクタ・ソフトウェアのインストール

シャード・ディレクタをホストする各システムにグローバル・サービス・マネージャ・ソフトウェアをインストールします。

  1. シャード・ディレクタをホストするすべてのシステムにOracle Global Service Managerインストーラをダウンロードします。
  2. グローバル・サービス・マネージャのインストールの詳細は、Oracle Database Global Data Services概要および管理ガイドを参照してください。
  3. 必要に応じて、最初のインストールで作成したレスポンス・ファイルを使用し、残りのシャード・ディレクタの各ホストでサイレント・インストールを実行します。

    サイレント・インストール・プロセスの詳細は、Oracle Database Global Data Services概要および管理ガイドを参照してください。

    レスポンス・ファイルを使用してサイレント・インストールを実行した後に、データベースのroot.shスクリプトを実行すると、その実行で対話形式で値を入力するように求められず、デフォルト値(たとえば、ローカル・ユーザーのbinディレクトリ)のみが使用されることがあります。デフォルト以外の値を使用する場合は、インストーラを起動するときに-silentオプションを省略して-responseFileの場所のみを指定します。インストーラ画面をクリックして進み、レスポンス・ファイルの値を受け入れ、要求に応じてルート・スクリプトを実行します。ルート・スクリプトの実行中に、ユーザー・プロンプトが表示され、デフォルト以外の値を入力できます。

シャード・カタログ・データベースの作成

DBCAを使用して、シャード・カタログをホストするOracle Databaseを作成します。

  1. シャード・カタログをホストするホストに接続し、必要な環境変数に正しい値が設定されていることを確認します。
    $ env |grep ORA
    ORACLE_BASE=/u01/app/oracle
    ORACLE_HOME=/u01/app/oracle/product/18.0.0/dbhome_1
  2. oradataディレクトリおよびfast_recovery_areaディレクトリを作成します。
    $ mkdir /u01/app/oracle/oradata
    $ mkdir /u01/app/oracle/fast_recovery_area
    
  3. DBCAを実行して、シャード・カタログ・データベースを作成します。
    $ dbca
    Database Configuration Assistantが開きます。
  4. 「データベース操作」ページで、「データベースの作成」を選択して、「次へ」をクリックします。
  5. 「作成モード」ページで、「拡張構成」を選択して、「次へ」をクリックします。
  6. 「デプロイメント・タイプ」ページで、「Oracle単一インスタンス・データベース」データベース・タイプを選択して「汎用またはトランザクション処理」テンプレートを選択し、「次へ」をクリックします。
  7. 「データベースID」ページで、シャード・カタログのホスト環境スクリプトで構成した「グローバル・データベース名」とシャード・カタログの「SID」を入力し、「次」をクリックします。
  8. 「記憶域オプション」ページで、データベース・ストレージ属性に以下を使用するオプションを選択し、「ファイル・システム」を選択して「Oracle Managed Filesの使用(OMF)」オプションを選択し、「次へ」をクリックします。
  9. 高速リカバリ・オプションの選択ページで、「高速リカバリ領域の指定」「アーカイブ有効化」の順に選択し、「次へ」をクリックします。
  10. ネットワーク構成の詳細の指定ページで、「新規リスナーの作成」を選択してリスナー名とポート番号を設定し、「次へ」をクリックします。
    後でデータベースに接続できるように、リスナー名をノートにとります。
  11. Data Vaultオプション・ページをスキップします。
  12. 「構成オプション」ページの「メモリー」タブで、自動共有メモリー管理を使用するを選択します。
  13. 「構成オプション」ページの「文字セット」タブで、「Unicode(AL32UTF8)を使用」を選択して、「次へ」をクリックします。
  14. 「管理オプション」ページで、「Enterprise Manager (EM) Database Expressの構成」オプションの選択を解除して、「次へ」をクリックします。
  15. 「ユーザー資格証明」ページで、ビジネスのニーズに適したオプションを選択して、パスワードを入力し、「次へ」をクリックします。

    後で必要となるので、入力したパスワードをノートにとってください。

  16. 「作成オプション」ページで、「データベースの作成」を選択して、「次へ」をクリックします。
  17. 「サマリー」ページで「終了」をクリックします。
  18. データベースが作成されたら、グローバル・データベース名、SIDおよびspfile値をノートにとります。
  19. Oracle Data Guardを使用してシャード・カタログ・データベースを保護する計画の場合は、「パスワード管理」をクリックして、SYSDGアカウントをアンロックし、このアカウントに入力したパスワードをノートにとります。
  20. 「閉じる」をクリックしてDBCAを終了します。

Oracle Shardingの管理およびルーティング層のセットアップ

シャード・カタログ、シャード・ディレクタおよびシャードが相互に通信するように構成する必要があります。

始める前に、Oracle Shardingの前提条件にリストされているポート要件の前提条件を注意深く読み、必要な変更を行ってから、この項のタスクを続行してください。

  1. シャード・カタログのホストで、必要な環境値に正しい値が設定されていることを確認します。
    $ env |grep ORA
    ORACLE_SID=shardcat
    ORACLE_BASE=/u01/app/oracle
    ORACLE_HOME=/u01/app/oracle/product/18.0.0/dbhome_1
  2. シャード・カタログのリスナーがまだ開始されていない場合は、シャード・カタログのリスナーを起動します。
    $ lsnrctl start
  3. DB_CREATE_FILE_DESTパラメータがシャード・カタログ・データベースに設定されていることを確認します。

    パラメータが設定されていない場合は、次の例に示すように設定します。Oracle Shardingデモ・アプリケーションのために、open_linksおよびopen_links_per_instanceに16が設定されます。

    $ sqlplus / as sysdba
    
    SQL> alter system set db_create_file_dest='/u01/app/oracle/oradata' scope=both;
    SQL> alter system set open_links=16 scope=spfile;
    SQL> alter system set open_links_per_instance=16 scope=spfile;
    
  4. シャード・カタログ・データベースを停止して再起動します。
    SQL> shutdown immediate
    Datablase closed.
    Database dismounted.
    
    SQL> startup
    ORACLE instance started.
    
    Total System Global Area 4798283776 bytes
    Fixed Size                  4430760 bytes
    Variable Size            1006634072 bytes
    Database Buffers         3774873600 bytes
    Redo Buffers               12345344 bytes
    Database mounted.
    Database opened.
  5. シャード・カタログ・データベースにロールおよび権限を付与します。
    SQL> set echo on
    SQL> set termout on
    SQL> spool setup_grants_privs.lst
    
    1. GSMCATUSERスキーマのパスワードをアンロックして設定します。

      このスキーマは、シャード・ディレクタがシャード・カタログ・データベースに接続するときに使用されます。

      SQL> alter user gsmcatuser account unlock;
      SQL> alter user gsmcatuser identified by gsmcatuser_password;
    2. 管理者スキーマを作成し、それに権限を付与します。

      mysdbadminアカウントは、シャーディング環境に関する情報を格納するシャード・カタログ・データベースのアカウントです。mysdbadminアカウントは、シャード・データベース環境に対して管理上の変更を行うためのデータベース管理者スキーマです。GDSCTLはGDSCTLコマンドを実行するときにこのユーザーを介してデータベースに接続し、mysdbadminユーザーがデータベースで必要な変更を行います。

      SQL> create user mysdbadmin identified by mysdbadmin_password;
      SQL> grant connect, create session, gsmadmin_role to mysdbadmin;
      SQL> grant inherit privileges on user SYS to GSMADMIN_INTERNAL;
      SQL> spool off
  6. シャード・ディレクタのホストに接続し、GDSCTLを開始します。

    以降のステップのコマンドは、シャード・ディレクタのホストから実行されます(GDSCTLコマンドライン・インタフェースがそこにインストールされているため)。

    次の例には、環境変数が適切に設定されていることの健全性チェックが含まれています。

    $ env |grep ORA
    ORACLE_BASE=/u01/app/oracle
    ORACLE_HOME=/u01/app/oracle/product/18.0.0/gsmhome_1
    
    $ gdsctl
    
  7. シャード・カタログを作成し、シャード・カタログにリモート・スケジューラ・エージェントを構成します。

    この例では、シャード・データベースにcust_sdbという名前が指定され、2つのリージョン(region1およびregion2)が作成されます。リージョンは、プライマリから物理スタンバイへのシャードのフェイルオーバーのために、ローカルの可用性ドメインとして使用されます。以下の例では、リージョンは地理的な地域を表していません。

    Oracle GoldenGateレプリケーションを使用してシステム管理のシャーディング用のシャード・カタログを作成するには:

    GDSCTL> create shardcatalog -database
     shard_catalog_host:port_number:shard_catalog_name  
     -user gsm_admin/mysdbadmin_password -repl OGG -repfactor 2 -sdb cust_sdb
     -region region1, region2 -agent_port port_num -agent_password rsa_password

    ノート:

    本番システムの場合は、シャード・カタログの作成時に-chunksパラメータを指定せずに、デフォルト(1シャード当たり120個のチャンク)を使用することをお薦めします。

    システム管理はデフォルトのシャーディング方法であるため、-shardingパラメータで指定する必要はありません。

    Data Guardレプリケーションを使用してコンポジット・シャード・データベース用のシャード・カタログを作成するには:

    GDSCTL> create shardcatalog -database
     shard_catalog_host:port_number:shard_catalog_name
     -chunks 60 -shardspace shardspace1  -sharding composite -sdb comp_shpool
     -protectmode maxavailability -user gsm_admin/mysdbadmin_password

    Data Guardレプリケーションを使用してユーザー定義のシャード・データベース用のシャード・カタログを作成するには:

    GDSCTL> create shardcatalog -sdb udef_shpool -sharding user
     -protectmode maxavailability
     -database shard_catalog_host:port_number:shard_catalog_name
     -user gsm_admin/mysdbadmin_password -region region1, region2

    ノート:

    ADD SHARDによるデプロイメント方法を使用する場合は、-agent_portおよび-agent_passwordパラメータは必要ありません。

  8. シャード・ディレクタのホストに接続されているときに、シャード・ディレクタを作成して起動します。
    GDSCTL> add gsm -gsm sharddirector1 -listener listener_port -pwd gsmcatuser_password
     -catalog shard_catalog_host:1521:shardcat -region region1
    
    GDSCTL> start gsm -gsm sharddirector1

    シャード・ディレクタの各ホストで、ステップ6および8を繰り返します。シャード・ディレクタ名およびリージョン名を各ホストの適切な値に置き換えます。

  9. GDSCTLを使用して、オペレーティング・システムの資格証明を設定します。
    GDSCTL> add credential -credential credential_name -osaccount os_account_name
     -ospassword os_password
    GDSCTL> exit

    ノート:

    ADD SHARDによるデプロイメント方法を使用する場合は、このステップは必要ありません。

    これらの資格証明は、シャードのホスト(カタログのホストではなく)のオペレーティング・システムのユーザー名とパスワードであり、資格証明はリモート・スケジューラ・エージェントがホストでジョブを実行したり、DBCA、NETCAなどを使用してシャードをセットアップしたりするために使用されます。

    各ホストに別のオペレーティング・システムの資格証明を使用する場合は、このステップを繰り返します。

  10. 各シャードのホストに接続して、リモート・スケジューラ・エージェントをそれらに登録し、oradataおよびfast_recovery_areaのディレクトリを作成します。

    ノート:

    このステップは、シャード・データベースのデプロイの概要で説明されているCREATE SHARD方法を使用している場合にのみ必要です。ADD SHARD方法を使用している場合は、このステップをスキップできます。

    シャードをホストする各マシンで次の文を実行します。

    os_account_nameはOracleソフトウェアのインストールに使用したアカウント、shard_hostはシャードをホストするマシンのホスト名またはIPアドレス、shard_catalog_hostはシャード・カタログのホストのホスト名またはIPアドレス、およびport_numは前述のステップ7でcreate shardcatalog-agent_portパラメータに指定したリモート・スケジューラ・エージェントのポート番号です。リモート・スケジューラ・エージェントから、前述のステップ7のcreate shardcatalog-agent_passwordパラメータに指定したエージェント登録パスワードの入力を求められます。

    $ ssh os_account_name@shard_host
    passwd: os_password
    
    $ schagent -start
    $ schagent -status
    $ schagent -registerdatabase shard_catalog_host port_num
    
    $ mkdir /u01/app/oracle/oradata
    $ mkdir /u01/app/oracle/fast_recovery_area

関連項目:

GDSCTLコマンドの使用方法とオプションの詳細は、Oracle Database Global Data Services概要および管理ガイドを参照してください。

システム管理のシャード・データベースの作成およびデプロイ

次の各項では、システム管理のシャード・データベースを作成してデプロイするタスクについて説明します。

システム管理のシャード・データベースのデプロイ

システム管理のシャード・データベースをデプロイするには、シャードグループおよびシャードを作成し、シャードとして使用するデータベースを作成および構成し、DEPLOYコマンドを実行してロールベースのグローバル・サービスを作成します。

システム管理のシャーディングでは、ユーザーがデータをシャードにマップする必要はありません。コンシステント・ハッシュによるパーティション化を使用して、データが自動的にシャード間に分散されます。パーティション化アルゴリズムにより、データがシャード間に均一およびランダムに分散されます。システム管理のシャード・データベースの概念に関する詳細は、システム管理のシャーディングを参照してください。

  1. シャード・データベースのデプロイの概要で説明されているADD SHARD方法を使用している場合、まずそれぞれのホストでシャードとして使用するデータベースを作成する必要があります。

    シャード・データベースには次の特性が必要です。

    • 各ホストに関連付けられたTNSリスナーがあること

    • GSMUSERアカウントのロックが既知のパスワードで解除されていること

    • SYSDGおよびSYSBACKUP権限がGSMUSERに付与されていること

    • プライマリ・データベースとスタンバイ・データベースがそのように構成されていること

    • REDO適用が対応するプライマリ・データベースとスタンバイ・データベース間で設定されていること

    • フラッシュバック・ロギングと強制ロギングが有効になっていること

    • compatibleパラメータが12.2.0以上に設定されていること

    • サーバー・パラメータ・ファイル(SPFILE)が使用されていること

    • DATA_PUMP_DIRディレクトリ・オブジェクトが各データベースで作成され、有効なディレクトリを指していること

    次に、データベースがシャード用に正しく設定されていることを検証する必要があります。データベースを構成に追加する前に、SYSとしてログインしている間に各データベースに対して次の文を実行します。

    SQL> set serveroutput on
    SQL> execute DBMS_GSM_FIX.validateShard

    画面出力には、問題の分析に必要なINFO、WARNINGおよびERRORの情報が含まれます。WARNINGメッセージとERRORメッセージはすべて解決する必要があります。変更後にvalidateShard()を再度実行して構成を確認します。

  2. シャード・ディレクタのホストに接続します。
    $ ssh os_user@shard_director1_host
    
  3. 現在のセッションのグローバル・サービス・マネージャを設定し、それを管理するための資格証明を指定します。
    $ gdsctl
    GDSCTL> set gsm -gsm sharddirector1
    GDSCTL> connect mysdbadmin/mysdbadmin_password
  4. プライマリ・シャードのシャードグループを追加します。

    この例では、シャードグループはprimary_shardgroupという名前であり、Data Guardレプリケーション・ソリューションの一部です。

    GDSCTL> add shardgroup -shardgroup primary_shardgroup -deploy_as primary
     -region region1

    次の例は、Oracle GoldenGateレプリケーション・ソリューション用のシャードグループを作成する方法を示しています。

    GDSCTL> add shardgroup -shardgroup shardgroup1 -region region1 -repfactor 2
  5. スタンバイ・シャードのシャードグループを追加します。

    この例では、シャードグループはstandby_shardgroupという名前であり、-deploy_asパラメータを使用してActive Data Guardのアクティブ・スタンバイ用に作成されます。

    GDSCTL> add shardgroup -shardgroup standby_shardgroup -deploy_as active_standby
     -region region2 

    Oracle GoldenGate構成に2番目のシャードグループを追加する方法は、次の例のようになります。

    GDSCTL> add shardgroup -shardgroup shardgroup2 -region region2 -repfactor 2 
  6. 各シャードのホスト・アドレスをカタログ内の登録に関する有効ノード・チェック(VNCR)リストに追加し、次の例に示すように、プライマリまたはスタンバイ・シャードグループにシャードを作成または追加します。

    ノート:

    登録に関する有効ノード・チェック(VNCR)機能では、シャード・ディレクタによって許可された登録リクエストのIPアドレス、ホスト名またはサブネットのセットの構成や動的な更新が可能になります。シャード・ディレクタへのデータベース・インスタンスの登録は、リクエスト元が有効なノードである場合にのみ成功します。デフォルトでは、create shardまたはadd shardが実行されるたびに、シャード管理層(Oracle Global Data Servicesフレームワークに基づく)は、リモート・データベースが実行されているホストのVNCRエントリを自動的に追加します。自動化(自動VNCRと呼ばれます)によってターゲット・ホストのパブリックIPアドレスが検索され、そのIPアドレスのVNCRエントリが自動的に追加されます。ホストに複数のパブリックIPアドレスがある場合は、データベースに登録されたアドレスが自動VNCRを使用して追加されたアドレスと同じではないことがあり、登録が拒否されることがあります。ターゲット・データベースのホストに複数のパブリックIPアドレスがある場合は、GDSCTLでadd invitednodeコマンドまたはadd invitedsubnetコマンドを使用して、このホストのVNCRを手動で構成することをお薦めします。

    複数のネットカードがターゲット・ホストにある(/sbin/ifconfigで複数のパブリック・インタフェースが返されます)場合は、安全のためにadd invitednodeを使用します(パケットをルーティングするために使用されるインタフェースを確認してから)。

    登録になんらかの疑念がある場合は、必要に応じてconfig vncrおよびadd invitednodeを使用します。これを行っても問題はありません。ノードがすでに追加されている場合、自動VNCRはそれを無視し、自動VNCRによってすでに追加された後にノードを追加しようとすると、すでに存在しているという警告を受け取るからです。

    次の例は、CREATE SHARDコマンドとData Guard高可用性ソリューションを使用して4つのシャード(プライマリ・シャードグループに2つとスタンバイ・シャードグループに2つ)を作成する方法を示しています。credential_nameは、シャード・カタログで宛先ホストのために作成されたオペレーティング・システムの資格証明です。

    シャードを作成するときに、次の例に示すようにcreate shard-sys_passwordを使用してSYSのパスワードを設定することもできます。これにより、シャードが作成されてDEPLOYを実行したときに、SYSのパスワードが設定されます。

    CREATE SHARDには、他にもデータベース・パラメータ、記憶域とファイルの場所、リスナー・ポート番号などをカスタマイズできるオプションのパラメータがあります。詳細は、Oracle Database Global Data Services概要および管理ガイドの付録を参照してください。

    GDSCTL> add invitednode shard_host_1 
    GDSCTL> create shard -shardgroup primary_shardgroup -destination shard_host_1
     -credential credential_name -sys_password sys_password
    
    GDSCTL> add invitednode shard_host_2
    GDSCTL> create shard -shardgroup standby_shardgroup -destination shard_host_2
     -credential credential_name -sys_password sys_password
    GDSCTL> add invitednode shard_host_3 
    GDSCTL> create shard -shardgroup primary_shardgroup -destination shard_host_3
     -credential credential_name -sys_password sys_password
    GDSCTL> add invitednode shard_host_4
    GDSCTL> create shard -shardgroup standby_shardgroup -destination shard_host_4
     -credential credential_name -sys_password sys_password

    Oracle GoldenGateレプリケーション・ソリューションでは、レプリケーションがチャンク・レベルで処理され、シャードグループ内のシャード間に分散されるため、シャードグループがプライマリおよびスタンバイとして指定されません。ただし、障害時リカバリのために、シャードグループを1つ以上のデータ・センターにレプリケートすることをお薦めします。Oracle GoldenGateレプリケーションを使用してシャードを作成する例を次に示します。

    GDSCTL> create shard -shardgroup shardgroup -destination shard_host
     -credential oracle_cred -netparam /home/oracle/netca_dbhome.rsp
     -gg_service shard_host_1:$ADMINSRVR_PORT/$GGHOME 
     -gg_password ggadmin_password
     -dbparamfile /home/oracle/dbparams01.tmp
     -dbtemplatefile /home/oracle/sharddb01.dbt

    シャード・データベースのデプロイの概要で説明されているADD SHARD方法を使用している場合は、前述の例のCREATE SHARDコマンドのかわりに次のコマンドを使用します。追加されるシャード・データベースがプラガブル・データベース(PDB)である場合は、ADD SHARD-cdbオプションを使用して、PDBシャードが含まれているコンテナ・データベース(CDB)を指定する必要があります。また、ADD SHARDコマンドの前にADD CDBを使用してカタログにCDBを追加する必要があります。ADD CDBおよびADD SHARDの構文は、Oracle Database Global Data Services概要および管理ガイドを参照してください。Oracle Database 18cでは、各CDB内の1つのPDBのみをシャードにすることができます。

    GDSCTL> add shard –shardgroup shgrp1
     –connect shard_host:TNS_listener_port/shard_database_name
     –pwd GSMUSER_password
  7. シャード・ディレクタから構成を確認します。

    CREATE SHARD方法を使用している場合、シャード名sh1、sh2、sh3およびsh4はシステム生成のシャード名となります。

    GDSCTL> config
    Regions
    -----------------------
    region1
    region2
    
    GSMs
    -----------------------
    sharddirector1
    sharddirector2
    
    Sharded Database
    -----------------------
    cust_sdb
    
    Databases
    -----------------------
    sh1
    sh2
    sh3
    sh4
    
    Shard Groups
    -----------------------
    primary_shardgroup
    standby_shardgroup
    
    Shard spaces
    -----------------------
    shardspaceora
    
    Services
    -----------------------
    
    GDSCTL pending requests
    -----------------------
    Command          Object          Status
    -------          ------          ------
    
    Global properties
    -----------------------
    Name: oradbcloud
    Master GSM: sharddirector1
    DDL sequence #: 0
    
    GDSCTL> config shardspace
    SHARDSPACE       Chunks
    ----------       ------
    shardspaceora    12
    
    GDSCTL> config shardgroup
    Shard Group               Chunks    Region    SHARDSPACE
    -----------               ------    ------    ----------
    primary_shardgroup        12        region1   shardspaceora
    standby_shardgroup        12        region2   shardspaceora
    
    GDSCTL> config vncr
    Name    Group ID 
    ----    --------
    shard_host_1 
    shard_host_2
    shard_host_3
    shard_host_4
    shard_catalog_host_IP
    
    GDSCTL> config shard
    Name     Shard Group          Status    State    Region    Availability
    ----     -----------          ------    -----    ------    ------------
    sh1      primary_shardgroup   U         none     region1   -
    sh2      standby_shardgroup   U         none     region2   -
    sh3      primary_shardgroup   U         none     region1   -
    sh4      standby_shardgroup   U         none     region2   -
  8. DEPLOYコマンドを実行して、シャードとレプリカを作成します。

    DEPLOYコマンドは実行に約15-30分かかります。

    GDSCTL> deploy

    CREATE SHARD方法を使用してシャードを作成する場合、DEPLOYコマンドはDBCAを使用してプライマリ・シャードとスタンバイ・シャードを作成します。スタンバイの再インスタンス化を実行するためにファスト・スタート・フェイルオーバー・オブザーバが必要なアーカイブログとフラッシュバックが、すべてのシャードで有効になります。

    プライマリ・シャードおよびスタンバイ・シャードが作成されると、DEPLOYコマンドはファスト・スタート・フェイルオーバーを有効にしてData Guard Brokerを構成します。ファスト・スタート・フェイルオーバー・オブザーバは、スタンバイ・グループのシャード・ディレクタ(この例ではsharddirector2)で自動的に起動されます。

  9. すべてのシャードがデプロイされたことを確認します。
    GDSCTL> config shard
    Name    Shard Group           Status    State        Region    Availability
    ----    -----------           ------    -----        ------    ------------
    sh1      primary_shardgroup   Ok        Deployed     region1   ONLINE
    sh2      standby_shardgroup   Ok        Deployed     region2   READ_ONLY
    sh3      primary_shardgroup   Ok        Deployed     region1   ONLINE
    sh4      standby_shardgroup   Ok        Deployed     region2   READ_ONLY
  10. すべてのシャードが登録されたことを確認します。
    GDSCTL> databases
    Database: "sh1" Registered: Y State: Ok ONS: N. Role: PRIMARY
    Instances: 1 Region: region1
       Registered instances: 
         cust_sdb%1
    Database: "sh2" Registered: Y State: Ok ONS: N. Role: PH_STNDBY
    Instances: 1 Region: region2
       Registered instances: 
         cust_sdb%11
    Database: "sh3" Registered: Y State: Ok ONS: N. Role: PRIMARY
    Instances: 1 Region: region1
       Registered instances: 
         cust_sdb%21
    Database: "sh4" Registered: Y State: Ok ONS: N. Role: PH_STNDBY
    Instances: 1 Region: region2
       Registered instances: 
         cust_sdb%31
  11. シャードの構成を確認します。
    GDSCTL> config shard -shard sh1
    Name: sh1
    Shard Group: primary_shardgroup
    Status: Ok
    State: Deployed
    Region: region1
    Connection string: shard_host_1:TNS_listener_port/sh1:dedicated
    SCAN address:
    ONS remote port: 0
    Disk Threshold, ms: 20
    CPU Threshold, %: 75
    Version: 18.0.0.0
    Last Failed DDL: 
    DDL Error: ---
    Failed DDL id:
    Availability: ONLINE
    
    Supported services
    -----------------------
    Name                Preferred Status
    ----                --------- ------
  12. すべてのプライマリ・シャードで実行されるグローバル・サービスを追加します。

    oltp_rw_srvcグローバル・サービスは、クライアントがシャード・データベースに接続するために使用できるグローバル・データ・サービスです。oltp_rw_srvcサービスはプライマリ・シャードでトランザクションを実行します。同様に、スタンバイ・シャードで読取り専用のワークロードを実行するために、oltp_ro_srvcグローバル・サービスが作成されます。

    GDSCTL> add service -service oltp_rw_srvc -role primary 
    
    GDSCTL> config service 
    
    Name          Network name                      Pool         Started Preferred all
    ----          ------------                      ----         ------- -------------
    oltp_rw_srvc  oltp_rw_srvc.cust_sdb.oracdbcloud cust_sdb     No      Yes
  13. oltp_rw_srvcグローバル・サービスを開始します。
    GDSCTL> start service -service oltp_rw_srvc
    
    GDSCTL> status service
    Service "oltp_rw_srvc.cust_sdb.oradbcloud" has 2 instance(s). Affinity: ANYWHERE
       Instance "cust_sdb%1", name: "sh1", db: "sh1", region: "region1", status: ready.
       Instance "cust_sdb%21", name: "sh3", db: "sh3", region: "region1", status: ready.
  14. スタンバイ・シャードで実行する読取り専用のワークロードのためのグローバル・サービスを追加します。
    GDSCTL> add service -service oltp_ro_srvc -role physical_standby
    
    GDSCTL> config service 
    
    Name          Network name                      Pool         Started Preferred all
    ----          ------------                      ----         ------- -------------
    oltp_rw_srvc  oltp_rw_srvc.cust_sdb.oracdbcloud cust_sdb     Yes     Yes
    oltp_ro_srvc  oltp_ro_srvc.cust_sdb.oracdbcloud cust_sdb     No      Yes
    
  15. 読取り専用サービスを開始し、そのグローバル・サービスのステータスを確認します。
    GDSCTL> start service -service oltp_ro_srvc
    
    GDSCTL> status service
    Service "oltp_ro_srvc.cust_sdb.oradbcloud" has 2 instance(s). Affinity: ANYWHERE
       Instance "cust_sdb%11", name: "sh2", db: "sh2", region: "region2", status: ready.
       Instance "cust_sdb%31", name: "sh4", db: "sh4", region: "region2", status: ready.
    Service "oltp_rw_srvc.cust_sdb.oradbcloud" has 2 instance(s). Affinity: ANYWHERE
       Instance "cust_sdb%1", name: "sh1", db: "sh1", region: "region1", status: ready.
       Instance "cust_sdb%21", name: "sh3", db: "sh3", region: "region1", status: ready.

システム管理のシャード・データベースのスキーマの作成

シャード・データベースのスキーマ・ユーザー、表領域セット、シャード表および重複表を作成します。DDLがすべてのシャードに伝播されたことを確認し、シャードに接続されている状態で、ファスト・スタート・フェイルオーバーを使用した自動Data Guard Broker構成を検証します。

  1. シャード・カタログ・データベースに接続し、アプリケーション・スキーマのユーザーを作成して、そのユーザーに権限とロールを付与します。

    この例では、アプリケーション・スキーマのユーザーはapp_schemaという名前です。

    $ sqlplus / as sysdba
    
    SQL> alter session enable shard ddl;
    SQL> create user app_schema identified by app_schema_password;
    SQL> grant all privileges to app_schema;
    SQL> grant gsmadmin_role to app_schema;
    SQL> grant select_catalog_role to app_schema;
    SQL> grant connect, resource to app_schema;
    SQL> grant dba to app_schema;
    SQL> grant execute on dbms_crypto to app_schema;
  2. シャード表の表領域セットを作成します。
    SQL> CREATE TABLESPACE SET TSP_SET_1 using template
     (datafile size 100m autoextend on next 10M maxsize unlimited
      extent management local segment space management auto);
    

    表領域セットを作成する場合、シャード領域の指定はオプションです。コマンドにシャード領域を指定しない場合は、デフォルトのシャード領域(shardspaceora)が使用されます。

  3. 列にLOBを使用する場合は、LOBの表領域セットを指定できます。
    SQL> CREATE TABLESPACE SET LOBTS1;

    ノート:

    システム管理のシャーディングでは、LOBの表領域セットをサブパーティション・レベルで指定できません。

  4. 重複表の表領域を作成します。

    この例では、重複表はサンプルのCustomers-Orders-ProductsスキーマのProducts表です。

    SQL> CREATE TABLESPACE products_tsp datafile size 100m
     autoextend on next 10M maxsize unlimited
     extent management local uniform size 1m; 
    
  5. ルート表のシャード表を作成します。

    この例では、ルート表はサンプルのCustomers-Orders-ProductsスキーマのCustomers表です。

    SQL> CONNECT app_schema/app_schema_password
    
    SQL> ALTER SESSION ENABLE SHARD DDL;
    
    SQL> CREATE SHARDED TABLE Customers
      (
        CustId      VARCHAR2(60) NOT NULL,
        FirstName   VARCHAR2(60),
        LastName    VARCHAR2(60),
        Class       VARCHAR2(10),
        Geo         VARCHAR2(8),
        CustProfile VARCHAR2(4000),
        Passwd      RAW(60),
        CONSTRAINT pk_customers PRIMARY KEY (CustId),
        CONSTRAINT json_customers CHECK (CustProfile IS JSON)
      ) TABLESPACE SET TSP_SET_1
      PARTITION BY CONSISTENT HASH (CustId) PARTITIONS AUTO;

    ノート:

    列にLOBが含まれる場合は、次に示すように親表の作成文に表領域セットを含めることができます。

    SQL> CREATE SHARDED TABLE Customers
      (
        CustId      VARCHAR2(60) NOT NULL,
        FirstName   VARCHAR2(60),
        LastName    VARCHAR2(60),
        Class       VARCHAR2(10),
        Geo         VARCHAR2(8),
        CustProfile VARCHAR2(4000),
        Passwd      RAW(60),
        image       BLOB,
        CONSTRAINT pk_customers PRIMARY KEY (CustId),
        CONSTRAINT json_customers CHECK (CustProfile IS JSON)
      ) TABLESPACE SET TSP_SET_1
        LOB(image) store as (TABLESPACE SET LOBTS1) 
      PARTITION BY CONSISTENT HASH (CustId) PARTITIONS AUTO;
  6. 表ファミリの他の表のシャード表を作成します。

    この例では、シャード表はサンプルのCustomers-Orders-ProductsスキーマのOrders表およびLineItems表として作成されます。

    Ordersシャード表を最初に作成します。

    SQL> CREATE SHARDED TABLE Orders
      (
        OrderId     INTEGER NOT NULL,
        CustId      VARCHAR2(60) NOT NULL,
        OrderDate   TIMESTAMP NOT NULL,
        SumTotal    NUMBER(19,4),
        Status      CHAR(4),
        CONSTRAINT  pk_orders PRIMARY KEY (CustId, OrderId),
        CONSTRAINT  fk_orders_parent FOREIGN KEY (CustId) 
        REFERENCES Customers ON DELETE CASCADE
      ) PARTITION BY REFERENCE (fk_orders_parent);
    

    OrderId列に使用される順序を作成します。

    SQL> CREATE SEQUENCE Orders_Seq;

    LineItemsのシャード表を作成します。

    SQL> CREATE SHARDED TABLE LineItems
      (
        OrderId     INTEGER NOT NULL,
        CustId      VARCHAR2(60) NOT NULL,
        ProductId   INTEGER NOT NULL,
        Price       NUMBER(19,4),
        Qty         NUMBER,
        CONSTRAINT  pk_items PRIMARY KEY (CustId, OrderId, ProductId),
        CONSTRAINT  fk_items_parent FOREIGN KEY (CustId, OrderId)
        REFERENCES Orders ON DELETE CASCADE
      ) PARTITION BY REFERENCE (fk_items_parent);
  7. 必要な重複表を作成します。

    この例では、Products表は重複しているオブジェクトです。

    SQL> CREATE DUPLICATED TABLE Products
      (
        ProductId  INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
        Name       VARCHAR2(128),
        DescrUri   VARCHAR2(128),
        LastPrice  NUMBER(19,4)
      ) TABLESPACE products_tsp;
  8. シャード・ディレクタのホストから、表領域の作成中に障害が発生しなかったことを確認します。
    GDSCTL> show ddl
    id    DDL Text                                  Failed shards
    --    --------                                  -------------
    5     grant connect, resource to app_schema
    6     grant dba to app_schema
    7     grant execute on dbms_crypto to app_s... 
    8     CREATE TABLESPACE SET  TSP_SET_1 usin...
    9     CREATE TABLESPACE products_tsp datafi...
    10    CREATE SHARDED TABLE Customers (   Cu...
    11    CREATE SHARDED TABLE Orders (   Order...
    12    CREATE SEQUENCE Orders_Seq;
    13    CREATE SHARDED TABLE LineItems (   Or...
    14    CREATE MATERIALIZED VIEW "APP_SCHEMA"...
    

    ノート:

    show ddlコマンドの出力は切り捨てられることがあります。出力内容の完全なテキストを表示するには、カタログでSELECT ddl_text FROM gsmadmin_internal.ddl_requestsを実行します。
  9. 各シャードにDDLエラーがないことを確認します。

    構成の各シャードでconfig shardコマンドおよびconfig chunksコマンドを実行します。

    GDSCTL> config shard -shard sh1
    Name: sh1
    Shard Group: primary_shardgroup
    Status: Ok
    State: Deployed
    Region: region1
    Connection string: shard_host_1:1521/sh1_host:dedicated
    SCAN address: 
    ONS remote port: 0
    Disk Threshold, ms: 20
    CPU Threshold, %: 75
    Version: 18.0.0.0
    Last Failed DDL: 
    DDL Error: ---
    Failed DDL id: 
    Availability: ONLINE
    
    Supported services
    ------------------------
    Name                                          Preferred Status    
    ----                                          --------- ------    
    oltp_ro_srvc                                  Yes       Enabled   
    oltp_rw_srvc                                  Yes       Enabled  
    
    GDSCTL> config chunks
    Chunks
    ------------------------
    Database                      From      To        
    --------                      ----      --        
    sh1                           1         6         
    sh2                           1         6         
    sh3                           7         12        
    sh4                           7         12 
  10. シャード表ファミリのために作成した表領域セットの表領域、および重複表のために作成した表領域が、すべてのシャードに作成されたことを確認します。

    表領域セットの表領域の数は、create shardcatalogコマンドで指定したチャンク数に基づいています。

    シャード・カタログの作成例で指定した12個のチャンクのうちの最初の6個のチャンクを持つ表領域セット、および複製されたProductsの表領域を次の例に示します。

    $ sqlplus / as sysdba
    
    SQL> select TABLESPACE_NAME, BYTES/1024/1024 MB from sys.dba_data_files
     order by tablespace_name;
    
    TABLESPACE_NAME 		    MB
    ----------------------- ----------
    C001TSP_SET_1           100
    C002TSP_SET_1           100
    C003TSP_SET_1			      100
    C004TSP_SET_1			      100
    C005TSP_SET_1			      100
    C006TSP_SET_1			      100
    PRODUCTS_TSP            100
    SYSAUX                  650
    SYSTEM                  890
    SYS_SHARD_TS			      100
    TSP_SET_1			          100
    
    TABLESPACE_NAME 		     MB
    ------------------------ ----------
    UNDOTBS1			           105
    USERS					             5
    
    13 rows selected.
    

    構成のすべてのシャードでこのステップを繰り返します。

  11. チャンクおよびチャンク表領域がすべてのシャードに作成されたことを確認します。
    SQL> set linesize 140
    SQL> column table_name format a20
    SQL> column tablespace_name format a20
    SQL> column partition_name format a20
    SQL> show parameter db_unique_name
    
    NAME             TYPE        VALUE
    ---------------- ----------- ------------------------------
    db_unique_name   string      sh1
    
    SQL> select table_name, partition_name, tablespace_name
     from dba_tab_partitions
     where tablespace_name like 'C%TSP_SET_1'
     order by tablespace_name;
    
    
    TABLE_NAME       PARTITION_NAME   TABLESPACE_NAME
    ---------------- ---------------- --------------------
    ORDERS           CUSTOMERS_P1     C001TSP_SET_1
    CUSTOMERS        CUSTOMERS_P1     C001TSP_SET_1
    LINEITEM         CUSTOMERS_P1     C001TSP_SET_1
    CUSTOMERS        CUSTOMERS_P2     C002TSP_SET_1
    LINEITEMS        CUSTOMERS_P2     C002TSP_SET_1
    ORDERS           CUSTOMERS_P2     C002TSP_SET_1
    CUSTOMERS        CUSTOMERS_P3     C003TSP_SET_1
    ORDERS           CUSTOMERS_P3     C003TSP_SET_1
    LINEITEMS        CUSTOMERS_P3     C003TSP_SET_1
    ORDERS           CUSTOMERS_P4     C004TSP_SET_1
    CUSTOMERS        CUSTOMERS_P4     C004TSP_SET_1
    
    TABLE_NAME       PARTITION_NAME   TABLESPACE_NAME
    ---------------- ---------------- --------------------
    LINEITEMS        CUSTOMERS_P4     C004TSP_SET_1
    CUSTOMERS        CUSTOMERS_P5     C005TSP_SET_1
    LINEITEMS        CUSTOMERS_P5     C005TSP_SET_1
    ORDERS           CUSTOMERS_P5     C005TSP_SET_1
    CUSTOMERS        CUSTOMERS_P6     C006TSP_SET_1
    LINEITEMS        CUSTOMERS_P6     C006TSP_SET_1
    ORDERS           CUSTOMERS_P6     C006TSP_SET_1
    18 rows selected.
    

    構成のすべてのシャードでこのステップを繰り返します。

  12. シャード・カタログ・データベースに接続して、チャンクが均等に配分されていることを確認します。
    $ sqlplus / as sysdba
    
    SQL> set echo off
    SQL> SELECT a.name Shard, COUNT(b.chunk_number) Number_of_Chunks
      FROM gsmadmin_internal.database a, gsmadmin_internal.chunk_loc b
      WHERE a.database_num=b.database_num
      GROUP BY a.name
      ORDER BY a.name;
    
    SHARD			       NUMBER_OF_CHUNKS
    ------------------------------ ----------------
    sh1					      6
    sh2					      6
    sh3					      6
    sh4					      6
  13. シャード表および重複表が作成されたことを確認します。

    シャード・カタログ・データベースおよび各シャードで、アプリケーション・スキーマのユーザーとしてログインします。

    次の例は、app_schemaユーザーとしてデータベース・シャード上の表に問い合せています。

    $ sqlplus app_schema/app_schema_password
    Connected.
    
    SQL> select table_name from user_tables;
    
    TABLE_NAME
    -----------------------------------------------------------------------
    CUSTOMERS
    ORDERS
    LINEITEMS
    PRODUCTS
    
    4 rows selected.
  14. Data Guard Brokerの自動ファスト・スタート・フェイルオーバー構成が設定されたことを確認します。
    $ ssh os_username@shard_host_1
    $ dgmgrl
    
    DGMGRL> connect sys/password
    Connected to "sh1"
    Connected as SYSDG.
    DGMGRL> show configuration
    
    Configuration - sh1
    
      Protection Mode: MaxPerformance
      Members:
      sh1 - Primary database
        sh2 - (*) Physical standby database 
    
    Fast-Start Failover: ENABLED
    
    Configuration Status:
    SUCCESS   (status updated 15 seconds ago)
    
    DGMGRL> show database sh1
    
    Database - sh1
    
      Role:               PRIMARY
      Intended State:     TRANSPORT-ON
      Instance(s):
        sh1
    
    Database Status:
    SUCCESS
    
    DGMGRL> show database sh2
    
    Database - sh2
    
      Role:               PHYSICAL STANDBY
      Intended State:     APPLY-ON
      Transport Lag:      0 seconds (computed 0 seconds ago)
      Apply Lag:          0 seconds (computed 0 seconds ago)
      Average Apply Rate: 2.00 KByte/s
      Real Time Query:    ON
      Instance(s):
        sh2
    
    Database Status:
    SUCCESS
    
    DGMGRL> show fast_start failover
    
    Fast-Start Failover: ENABLED
    
      Threshold:          30 seconds
      Target:             sh2
      Observer:           shard_director_host
      Lag Limit:          30 seconds
      Shutdown Primary:   TRUE
      Auto-reinstate:     TRUE
      Observer Reconnect: (none)
      Observer Override:  FALSE
    
    Configurable Failover Conditions
      Health Conditions:
        Corrupted Controlfile          YES
        Corrupted Dictionary           YES
        Inaccessible Logfile            NO
        Stuck Archiver                  NO
        Datafile Write Errors          YES
    
      Oracle Error Conditions:
        (none)
  15. ファスト・スタート・フェイルオーバーのオブザーバを見つけます。

    シャード・カタログ・データベースに接続して、次のコマンドを実行します。

    $ sqlplus / as sysdba
    
    SQL> SELECT observer_state FROM gsmadmin_internal.broker_configs;
    
    OBSERVER_STATE
    --------------------------------------------------------------------------------
    GSM server SHARDDIRECTOR2. Observer started. 
    Log files at '/u01/app/oracle/product/18.0.0/gsmhome_1/network/admin/
    gsm_observer_1.log'.
    
    GSM server SHARDDIRECTOR2. Observer started. 
    Log files at '/u01/app/oracle/product/18.0.0/gsmhome_1/network.admin/
    gsm_observer_2.log'.

関連項目:

GDSCTLコマンドの使用方法については、Oracle Database Global Data Services概要および管理ガイドを参照してください

システム管理のSDBのデモ・アプリケーション

システム管理のシャード・データベース(SDB)のデモ・アプリケーションは、オンライン小売業者のワークロードをシミュレートしています。システム管理(自動シャーディング)のSDB構成のセットアップを検証するために使用してください。また、デモ・アプリケーションは、データベース・シャーディングを初めて使用する管理者および開発者にシャーディングの概念の実例を示します。

デモ・アプリケーションでは、システム管理のSDB環境およびCUSTOMER表ファミリがすでに作成されていることを想定しています。この環境では、任意の数のチャンクおよびシャード(データベース・ノード)を持つことができます。実行すると、アプリケーションは最初にProductsにデータを移入してから、管理者がいつでも一時休止できる1時間のワークロードを開始します。このワークロードには、4つのタイプのトランザクション(顧客オーダーの作成、オーダーのリストの検索、新しい製品の作成、およびレポートの生成でのマルチシャード問合せ)が含まれています。シャード・データベース構成のすべての特徴が示されます。

デモ・アプリケーション、および実行方法および監視方法について説明しているREADMEファイルは、My Oracle Supportドキュメント2184500.1からダウンロードできます。

ユーザー定義のSDBの作成およびデプロイ

次の各項では、ユーザー定義のSDBを作成してデプロイするタスクについて説明します。

ユーザー定義のSDBのデプロイ

次の手順では、ADD SHARDコマンドとOracle Active Data Guard高可用性ソリューションを使用してユーザー定義のシャード・データベースをデプロイする方法について説明します。

ユーザー定義のシャーディングでは、ユーザーがデータをシャードにマップできます。ユーザー定義のシャーディング方法の概念に関する詳細は、ユーザー定義のシャーディングを参照してください。

  1. この手順では、シャード・データベースのデプロイの概要で説明されているADD SHARDによる方法を使用して説明しているため、最初にそれぞれのホストでシャードとして使用するデータベースを作成する必要があります。

    シャード・データベースには次の特性が必要です。

    • 各ホストに関連付けられたTNSリスナーがあること

    • GSMUSERアカウントのロックが既知のパスワードで解除されていること

    • SYSDGおよびSYSBACKUP権限がGSMUSERに付与されていること

    • プライマリ・データベースとスタンバイ・データベースがそのように構成されていること

    • REDO適用が対応するプライマリ・データベースとスタンバイ・データベース間で設定されていること

    • フラッシュバック・ロギングと強制ロギングが有効になっていること

    • compatibleパラメータが12.2.0以上に設定されていること

    • サーバー・パラメータ・ファイル(SPFILE)が使用されていること

    • DATA_PUMP_DIRディレクトリ・オブジェクトが各データベースで作成され、有効なディレクトリを指していること

    次に、データベースがシャード用に正しく設定されていることを検証する必要があります。構成に追加する前に、各データベースに対して次のコマンドを実行します。

    SQL> set serveroutput on
    SQL> execute DBMS_GSM_FIX.validateShard

    画面出力には、問題の分析に必要なINFO、WARNINGおよびERRORの情報が含まれます。WARNINGメッセージとERRORメッセージはすべて解決する必要があります。変更後にvalidateShard()を再度実行して構成を確認します。

  2. シャード・ディレクタのホストに接続します。
    $ ssh os_user@shard_director1_host
    
  3. 現在のセッションのグローバル・サービス・マネージャを設定し、それを管理するための資格証明を指定します。
    $ gdsctl
    GDSCTL> set gsm -gsm sharddirector1
    GDSCTL> connect mysdbadmin/mysdbadmin_password
  4. ビジネスに必要なカスタマイズされた各シャード・グループ用のシャード領域をシャード・データベース構成に追加します。

    シャード領域には、プライマリ・シャード・データベースと1つ以上のアクティブ・スタンバイが含まれています。

    この例では、シャード領域にshspace1とshspace2という名前が付けられています。名前は自分で選択できます。

    GDSCTL> add shardspace -shardspace shspace1 -protectmode maxavailability
    GDSCTL> add shardspace -shardspace shspace2 -protectmode maxavailability
  5. 各シャードのホスト・アドレスをカタログ内の登録に関する有効ノード・チェック(VNCR)リストに追加してから、次の例に示すように、プライマリまたはスタンバイ・シャードグループにシャードを追加します。

    ノート:

    登録に関する有効ノード・チェック(VNCR)機能では、シャード・ディレクタによって許可された登録リクエストのIPアドレス、ホスト名またはサブネットのセットの構成や動的な更新が可能になります。シャード・ディレクタへのデータベース・インスタンスの登録は、リクエスト元が有効なノードである場合にのみ成功します。デフォルトでは、create shardまたはadd shardが実行されるたびに、シャード管理層(Oracle Global Data Servicesフレームワークに基づく)は、リモート・データベースが実行されているホストのVNCRエントリを自動的に追加します。自動化(自動VNCRと呼ばれます)によってターゲット・ホストのパブリックIPアドレスが検索され、そのIPアドレスのVNCRエントリが自動的に追加されます。ホストに複数のパブリックIPアドレスがある場合は、データベースに登録されたアドレスが自動VNCRを使用して追加されたアドレスと同じではないことがあり、登録が拒否されることがあります。ターゲット・データベースのホストに複数のパブリックIPアドレスがある場合は、GDSCTLでadd invitednodeコマンドまたはadd invitedsubnetコマンドを使用して、このホストのVNCRを手動で構成することをお薦めします。

    複数のネットカードがターゲット・ホストにある(/sbin/ifconfigで複数のパブリック・インタフェースが返されます)場合は、安全のためにadd invitednodeを使用します(パケットをルーティングするために使用されるインタフェースを確認してから)。

    登録になんらかの疑念がある場合は、必要に応じてconfig vncrおよびadd invitednodeを使用します。これを行っても問題はありません。ノードがすでに追加されている場合、自動VNCRはそれを無視し、自動VNCRによってすでに追加された後にノードを追加しようとすると、すでに存在しているという警告を受け取るからです。

    次の例は、ADD SHARDコマンドを使用して4つのシャードを作成する方法を示しています。最初の2つはシャード領域shspace1のプライマリおよびアクティブ・スタンバイ・シャードであり、後の2つはシャード領域shspace2のプライマリおよびアクティブ・スタンバイです。リージョンとしてプライマリにはregion1が指定され、スタンバイにはregion2が指定されていることに注意してください。

    GDSCTL> add invitednode shard_host_1 
    GDSCTL> add shard -connect shard_host_1:1521/shard_database_name
     -shardspace shspace1 -deploy_as primary -pwd GSMUSER_password -region region1
    
    GDSCTL> add invitednode shard_host_2
    GDSCTL> add shard -connect shard_host_2:1521/shard_database_name
     -shardspace shspace1 -deploy_as active_standby -pwd GSMUSER_password
     -region region2
    
    GDSCTL> add invitednode shard_host_3 
    GDSCTL> add shard -connect shard_host_3:1521/shard_database_name
     -shardspace shspace2 -deploy_as primary -pwd GSMUSER_password -region region1
    
    GDSCTL> add invitednode shard_host_4
    GDSCTL> add shard -connect shard_host_4:1521/shard_database_name
     -shardspace shspace2 -deploy_as active_standby -pwd GSMUSER_password
     -region region2

    追加されるシャード・データベースがプラガブル・データベース(PDB)である場合は、ADD SHARD-cdbオプションを使用して、PDBシャードが含まれているコンテナ・データベース(CDB)を指定する必要があります。また、ADD SHARDコマンドの前にADD CDBを使用してカタログにCDBを追加する必要があります。ADD CDBおよびADD SHARDの構文は、Oracle Database Global Data Services概要および管理ガイドを参照してください。Oracle Database 18cでは、各CDB内の1つのPDBのみをシャードにすることができます。

  6. シャード・ディレクタから構成を確認します。
    GDSCTL> config
    Regions
    -----------------------
    region1
    region2
    
    GSMs
    -----------------------
    sharddirector1
    sharddirector2
    
    Sharded Database
    -----------------------
    udef_shpool
    
    Databases
    -----------------------
    sh1
    sh2
    sh3
    sh4
    
    Shard spaces
    -----------------------
    shspace1
    shspace2
    
    Services
    -----------------------
    
    GDSCTL pending requests
    -----------------------
    Command          Object          Status
    -------          ------          ------
    
    Global properties
    -----------------------
    Name: oradbcloud
    Master GSM: sharddirector1
    DDL sequence #: 0
    
    
    GDSCTL> config vncr
    Name                    Group ID 
    ----                    --------
    shard_host_1 
    shard_host_2
    shard_host_3
    shard_host_4
    shard_catalog_host_IP
    
    
    GDSCTL> config shard
    Name     Shard space          Status    State    Region    Availability
    ----     -----------          ------    -----    ------    ------------
    sh1      shspace1             U         none     region1   -
    sh2      shspace1             U         none     region2   -
    sh3      shspace2             U         none     region1   -
    sh4      shspace2             U         none     region2   -
  7. DEPLOYコマンドを実行して、シャードとレプリカを作成します。

    DEPLOYコマンドは実行に約15-30分かかります。

    GDSCTL> deploy

    プライマリ・シャードおよびスタンバイ・シャードが作成されると、DEPLOYコマンドはファスト・スタート・フェイルオーバーを有効にしてData Guard Brokerを構成します。ファスト・スタート・フェイルオーバー・オブザーバは、スタンバイ・グループのシャード・ディレクタ(この例ではsharddirector2)で自動的に起動されます。

  8. すべてのシャードがデプロイされたことを確認します。
    GDSCTL> config shard
    Name    Shard space           Status    State        Region    Availability
    ----    -----------           ------    -----        ------    ------------
    sh1      shspace1             Ok        Deployed     region1   ONLINE
    sh2      shspace1             Ok        Deployed     region2   READ_ONLY
    sh3      shspace2             Ok        Deployed     region1   ONLINE
    sh4      shspace2             Ok        Deployed     region2   READ_ONLY
  9. すべてのシャードが登録されたことを確認します。
    GDSCTL> databases
    Database: "sh1" Registered: Y State: Ok ONS: N. Role: PRIMARY
    Instances: 1 Region: region1
       Registered instances: 
         udef_shpool%1
    Database: "sh2" Registered: Y State: Ok ONS: N. Role: PH_STNDBY
    Instances: 1 Region: region2
       Registered instances: 
         udef_shpool%11
    Database: "sh3" Registered: Y State: Ok ONS: N. Role: PRIMARY
    Instances: 1 Region: region1
       Registered instances: 
         udef_shpool%21
    Database: "sh4" Registered: Y State: Ok ONS: N. Role: PH_STNDBY
    Instances: 1 Region: region2
       Registered instances: 
         udef_shpool%31
  10. シャードの構成を確認します。
    GDSCTL> config shard -shard sh1
    Name: sh1
    Shard space: shspace1
    Status: Ok
    State: Deployed
    Region: region1
    Connection string: shard_host_1:1521/sh1:dedicated
    SCAN address:
    ONS remote port: 0
    Disk Threshold, ms: 20
    CPU Threshold, %: 75
    Version: 18.0.0.0
    Last Failed DDL: 
    DDL Error: ---
    Failed DDL id:
    Availability: ONLINE
    
    Supported services
    -----------------------
    Name                Preferred Status
    ----                --------- ------
  11. すべてのプライマリ・シャードで実行されるグローバル・サービスを追加します。

    oltp_rw_srvcグローバル・サービスは、クライアントがシャード・データベースに接続するために使用できるグローバル・データ・サービスです。oltp_rw_srvcサービスはプライマリ・シャードでトランザクションを実行します。同様に、スタンバイ・シャードで読取り専用のワークロードを実行するために、oltp_ro_srvcグローバル・サービスが作成されます。

    GDSCTL> add service -service oltp_rw_srvc -role primary 
    
    GDSCTL> config service 
    
    Name          Network name                      Pool         Started Preferred all
    ----          ------------                      ----         ------- -------------
    oltp_rw_srvc  oltp_rw_srvc.cust_sdb.oracdbcloud udef_shpool  No      Yes
  12. oltp_rw_srvcグローバル・サービスを開始します。
    GDSCTL> start service -service oltp_rw_srvc
    
    GDSCTL> status service
    Service "oltp_rw_srvc.cust_sdb.oradbcloud" has 2 instance(s). Affinity: ANYWHERE
       Instance "udef_shpool%1", name: "sh1", db: "sh1", region: "region1",
       status: ready.
       Instance "udef_shpool%21", name: "sh3", db: "sh3", region: "region1",
       status: ready.
  13. スタンバイ・シャードで実行する読取り専用のワークロードのためのグローバル・サービスを追加します。
    GDSCTL> add service -service oltp_ro_srvc -role physical_standby
    
    GDSCTL> config service 
    
    Name          Network name                      Pool         Started Preferred all
    ----          ------------                      ----         ------- -------------
    oltp_rw_srvc  oltp_rw_srvc.cust_sdb.oracdbcloud cust_sdb     Yes     Yes
    oltp_ro_srvc  oltp_ro_srvc.cust_sdb.oracdbcloud cust_sdb     No      Yes
    
  14. 読取り専用サービスを開始し、そのグローバル・サービスのステータスを確認します。
    GDSCTL> start service -service oltp_ro_srvc
    
    GDSCTL> status service
    Service "oltp_ro_srvc.cust_sdb.oradbcloud" has 2 instance(s). Affinity: ANYWHERE
       Instance "udef_shpool%11", name: "sh2", db: "sh2", region: "region2",
     status: ready.
       Instance "udef_shpool%31", name: "sh4", db: "sh4", region: "region2",
     status: ready.
    Service "oltp_rw_srvc.cust_sdb.oradbcloud" has 2 instance(s). Affinity: ANYWHERE
       Instance "udef_shpool%1", name: "sh1", db: "sh1", region: "region1",
     status: ready.
       Instance "udef_shpool%21", name: "sh3", db: "sh3", region: "region1",
     status: ready.

関連項目:

GDSCTLコマンドの使用方法については、Oracle Database Global Data Services概要および管理ガイドを参照してください

ユーザー定義のSDBのスキーマ作成

SDBのスキーマ・ユーザー、表領域セット、シャード表および重複表を作成します。DDLがすべてのシャードに伝播されたことを確認し、シャードに接続されている状態で、ファスト・スタート・フェイルオーバーを使用した自動Data Guard Broker構成を検証します。

  1. シャード・カタログ・データベースに接続し、アプリケーション・スキーマのユーザーを作成して、そのユーザーに権限とロールを付与します。

    この例では、アプリケーション・スキーマのユーザーはapp_schemaという名前です。

    $ sqlplus / as sysdba
    
    SQL> alter session enable shard ddl;
    SQL> create user app_schema identified by app_schema_password;
    SQL> grant all privileges to app_schema;
    SQL> grant gsmadmin_role to app_schema;
    SQL> grant select_catalog_role to app_schema;
    SQL> grant connect, resource to app_schema;
    SQL> grant dba to app_schema;
    SQL> grant execute on dbms_crypto to app_schema;
  2. シャード表の表領域を作成します。
    SQL> CREATE TABLESPACE c1_tsp DATAFILE SIZE 100M autoextend on next 10M maxsize 
    unlimited extent management local segment space management auto in
     shardspace shspace1;
    
    SQL> CREATE TABLESPACE c2_tsp DATAFILE SIZE 100M autoextend on next 10M maxsize 
    unlimited extent management local segment space management auto in
     shardspace shspace2;
  3. 列にLOBを使用する場合は、LOBの表領域を指定できます。
    SQL> CREATE TABLESPACE lobts1 ... in shardspace shspace1;
    
    SQL> CREATE TABLESPACE lobts2 ... in shardspace shspace2;
  4. 重複表の表領域を作成します。

    この例では、重複表はサンプルのCustomers-Orders-ProductsスキーマのProducts表です。

    SQL> CREATE TABLESPACE products_tsp datafile size 100m autoextend
     on next 10M maxsize unlimited extent management local uniform size 1m; 
    
  5. ルート表のシャード表を作成します。

    この例では、ルート表はサンプルのCustomers-Orders-ProductsスキーマのCustomers表です。

    SQL> CONNECT app_schema/app_schema_password
    
    SQL> ALTER SESSION ENABLE SHARD DDL;
    
    SQL> CREATE SHARDED TABLE Customers
      (
        CustId      VARCHAR2(60) NOT NULL,
        CustProfile VARCHAR2(4000),
        Passwd      RAW(60),
        CONSTRAINT pk_customers PRIMARY KEY (CustId),
        CONSTRAINT json_customers CHECK (CustProfile IS JSON)
      ) PARTITION BY RANGE (CustId)
      ( PARTITION ck1 values less than ('m') tablespace ck1_tsp,
        PARTITION ck2 values less than (MAXVALUE) tablespace ck2_tsp
      );

    ノート:

    シャード表の列にLOBが含まれる場合は、次に示すようにCREATE SHARDED TABLE文にLOB表領域を含めることができます。

    SQL> CREATE SHARDED TABLE Customers
      (
        CustId      VARCHAR2(60) NOT NULL,
        CustProfile VARCHAR2(4000),
        Passwd      RAW(60),
        image       BLOB,
        CONSTRAINT pk_customers PRIMARY KEY (CustId),
        CONSTRAINT json_customers CHECK (CustProfile IS JSON)
      ) PARTITION BY RANGE (CustId)
      ( PARTITION ck1 values less than ('m') tablespace ck1_tsp
         lob(image) store as (tablespace lobts1),
        PARTITION ck2 values less than (MAXVALUE) tablespace ck2_tsp
         lob(image) store as (tablespace lobts2)
      );
  6. 表ファミリの他の表のシャード表を作成します。

    この例では、シャード表はサンプルのCustomers-Orders-ProductsスキーマのOrders表およびLineItems表として作成されます。

    Ordersシャード表を最初に作成します。

    SQL> CREATE SHARDED TABLE Orders
      (
        OrderId     INTEGER NOT NULL,
        CustId      VARCHAR2(60) NOT NULL,
        OrderDate   TIMESTAMP NOT NULL,
        SumTotal    NUMBER(19,4),
        Status      CHAR(4),
        CONSTRAINT  pk_orders PRIMARY KEY (CustId, OrderId),
        CONSTRAINT  fk_orders_parent FOREIGN KEY (CustId) 
        REFERENCES Customers ON DELETE CASCADE
      ) PARTITION BY REFERENCE (fk_orders_parent);
    

    OrderId列に使用される順序を作成します。

    SQL> CREATE SEQUENCE Orders_Seq;

    LineItemsのシャード表を作成します。

    SQL> CREATE SHARDED TABLE LineItems
      (
        OrderId     INTEGER NOT NULL,
        CustId      VARCHAR2(60) NOT NULL,
        ProductId   INTEGER NOT NULL,
        Price       NUMBER(19,4),
        Qty         NUMBER,
        CONSTRAINT  pk_items PRIMARY KEY (CustId, OrderId, ProductId),
        CONSTRAINT  fk_items_parent FOREIGN KEY (CustId, OrderId)
        REFERENCES Orders ON DELETE CASCADE
      ) PARTITION BY REFERENCE (fk_items_parent);
  7. 必要な重複表を作成します。

    この例では、Products表は重複しているオブジェクトです。

    SQL> CREATE DUPLICATED TABLE Products
      (
        ProductId  INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
        Name       VARCHAR2(128),
        DescrUri   VARCHAR2(128),
        LastPrice  NUMBER(19,4)
      ) TABLESPACE products_tsp;
  8. シャード・ディレクタのホストから、表領域の作成中に障害が発生しなかったことを確認します。
    GDSCTL> show ddl
    id    DDL Text                                  Failed shards
    --    --------                                  -------------
    
    3       grant create table, create procedure,...               
    4       grant unlimited tablespace to app_schema               
    5       grant select_catalog_role to app_schema                
    6       create tablespace c1_tsp DATAFILE SIZ...               
    7       Create tablespace c2_tsp DATAFILE SIZ...               
    8       CREATE SHARDED TABLE Customers (   Cu...               
    9       CREATE SHARDED TABLE Orders (   Order...               
    10      CREATE SHARDED TABLE LineItems (   Or...               
    11      create tablespace products_tsp datafi... 
    12      CREATE MATERIALIZED VIEW "APP_SCHEMA"...      

    ノート:

    show ddlコマンドの出力は切り捨てられることがあります。出力内容の完全なテキストを表示するには、カタログでSELECT ddl_text FROM gsmadmin_internal.ddl_requestsを実行します。
  9. 各シャードにDDLエラーがないことを確認します。

    構成の各シャードでconfig shardコマンドおよびconfig chunksコマンドを実行します。

    GDSCTL> config shard -shard sh1
    
    Name: sh1
    Shard space: shspace1
    Status: Ok
    State: Deployed
    Region: region1
    Connection string: shard_host_1:1521/sh1:dedicated
    SCAN address: 
    ONS remote port: 0
    Disk Threshold, ms: 20
    CPU Threshold, %: 75
    Version: 18.0.0.0
    Last Failed DDL: 
    DDL Error: ---
    Failed DDL id: 
    Availability: ONLINE
    Rack:
    
    Supported services
    ------------------------
    Name                                          Preferred Status    
    ----                                          --------- ------    
    oltp_ro_srvc                                  Yes       Enabled   
    oltp_rw_srvc                                  Yes       Enabled  
    
    GDSCTL> config chunks
    Chunks
    ------------------------
    Database                      From      To        
    --------                      ----      --        
    sh1                           1         1         
    sh2                           1         1         
    sh3                           2         2        
    sh4                           2         2 
  10. シャード表ファミリのために作成した表領域、および重複表のために作成した表領域が、すべてのシャードに作成されたことを確認します。

    表領域セットの表領域の数は、create shardcatalogコマンドで指定したチャンク数に基づいています。

    シャード・カタログの作成例で指定した12個のチャンクのうちの最初の6個のチャンクを持つ表領域セット、および複製されたProductsの表領域を次の例に示します。

    $ sqlplus / as sysdba
    
    SQL> select TABLESPACE_NAME, BYTES/1024/1024 MB
     from sys.dba_data_files
     order by tablespace_name;
    
    TABLESPACE_NAME 		    MB
    ----------------------- ----------
    C1_TSP                     100
    PRODUCTS_TSP                    10
    SYSAUX                    722.1875
    SYSEXT                          39
    SYSTEM                  782.203125
    SYS_SHARD_TS                   100
    UD1                            470
    
    7 rows selected.
    

    構成のすべてのシャードでこのステップを繰り返します。

  11. チャンクおよびチャンク表領域がすべてのシャードに作成されたことを確認します。
    SQL> set linesize 140
    SQL> column table_name format a20
    SQL> column tablespace_name format a20
    SQL> column partition_name format a20
    SQL> show parameter db_unique_name
    
    NAME             TYPE        VALUE
    ---------------- ----------- ------------------------------
    db_unique_name   string      sh1
    
    SQL> select table_name, partition_name, tablespace_name
     from dba_tab_partitions
     where tablespace_name like 'C%TSP_SET_1'
     order by tablespace_name;
    
    
    TABLE_NAME       PARTITION_NAME   TABLESPACE_NAME
    ---------------- ---------------- --------------------
    CUSTOMERS            CK1                  C1_TSP
    ORDERS               CK1                  C1_TSP
    LINEITEMS            CK1                  C1_TSP
    

    構成のすべてのシャードでこのステップを繰り返します。

  12. シャード表および重複表が作成されたことを確認します。

    シャード・カタログ・データベースおよび各シャードで、アプリケーション・スキーマのユーザーとしてログインします。

    次の例は、app_schemaユーザーとしてデータベース・シャード上の表に問い合せています。

    $ sqlplus app_schema/app_schema_password
    Connected.
    
    SQL> select table_name from user_tables;
    
    TABLE_NAME
    -----------------------------------------------------------------------
    CUSTOMERS
    ORDERS
    LINEITEMS
    PRODUCTS
    USLOG$_PRODUCTS
    
  13. Data Guard Brokerの自動ファスト・スタート・フェイルオーバー構成が設定されたことを確認します。
    $ ssh os_username@shard_host_1
    $ dgmgrl
    
    DGMGRL> connect sys/password
    Connected to "sh1"
    Connected as SYSDG.
    DGMGRL> show configuration
    
    Configuration - sh1
    
      Protection Mode: MaxPerformance
      Members:
      sh1 - Primary database
        sh2 - (*) Physical standby database 
    
    Fast-Start Failover: ENABLED
    
    Configuration Status:
    SUCCESS   (status updated 15 seconds ago)
    
    DGMGRL> show database sh1
    
    Database - sh1
    
      Role:               PRIMARY
      Intended State:     TRANSPORT-ON
      Instance(s):
        sh1
    
    Database Status:
    SUCCESS
    
    DGMGRL> show database sh2
    
    Database - sh2
    
      Role:               PHYSICAL STANDBY
      Intended State:     APPLY-ON
      Transport Lag:      0 seconds (computed 0 seconds ago)
      Apply Lag:          0 seconds (computed 0 seconds ago)
      Average Apply Rate: 2.00 KByte/s
      Real Time Query:    ON
      Instance(s):
        sh2
    
    Database Status:
    SUCCESS
    
    DGMGRL> show fast_start failover
    
    Fast-Start Failover: ENABLED
    
      Threshold:          30 seconds
      Target:             sh2
      Observer:           shard_director_host
      Lag Limit:          30 seconds
      Shutdown Primary:   TRUE
      Auto-reinstate:     TRUE
      Observer Reconnect: (none)
      Observer Override:  FALSE
    
    Configurable Failover Conditions
      Health Conditions:
        Corrupted Controlfile          YES
        Corrupted Dictionary           YES
        Inaccessible Logfile            NO
        Stuck Archiver                  NO
        Datafile Write Errors          YES
    
      Oracle Error Conditions:
        (none)
  14. ファスト・スタート・フェイルオーバーのオブザーバを見つけます。

    シャード・カタログ・データベースに接続して、次のコマンドを実行します。

    $ ssh oracle@shard6
    
    $ ps -ef |grep dgmgrl
    oracle    8210  8089  0 22:18 pts/4    00:00:00 grep dgmgrl
    oracle   20189     1  0 02:57 ?        00:02:40 dgmgrl -delete_script
     @/u01/app/oracle/product/18.0.0/gsmhome_1/network/admin/gsm_observer_1.cfg
    oracle   20193     1  0 02:57 ?        00:02:43 dgmgrl -delete_script
     @/u01/app/oracle/product/18.0.0/gsmhome_1/network/admin/gsm_observer_2.cfg

関連項目:

GDSCTLコマンドの使用方法については、Oracle Database Global Data Services概要および管理ガイドを参照してください

コンポジットSDBの作成およびデプロイ

コンポジットSDBをデプロイするには、必要なOracle Shardingソフトウェア・コンポーネントをインストールし、コンポジットSDBにオブジェクトを構成して、スキーマを作成する必要があります。

コンポジット・シャーディング方法では、コンシステント・ハッシュによりパーティション化された表のデータの異なるサブセットについて、複数のシャード領域を作成できます。シャード領域はシャードのセットで、キーの値の範囲またはリストに対応するデータが格納されます。

次の項は、コンポジットSDBをデプロイするためのタスクについて説明しています。

コンポジットSDBのデプロイ

コンポジットSDBをデプロイするには、シャードグループとシャードを作成し、DEPLOYコマンドを実行して、ロールベースのグローバル・サービスを作成します。

このデプロイメント手順で使用される例は、アメリカとヨーロッパの個別のシャード領域およびシャードグループが作成されるグローバル分散シナリオに基づいています。
  1. シャード・ディレクタのホストに接続して、環境変数を確認します。
    $ ssh os_user@shard_director_home
    $ env |grep ORA
    ORACLE_BASE=/u01/app/oracle
    ORACLE_HOME=/u01/app/oracle/product/18.0.0/gsmhome_1
  2. 現在のセッションのグローバル・サービス・マネージャを設定し、それを管理するための資格証明を指定します。
    $ gdsctl
    GDSCTL> set gsm -gsm sharddirector1
    GDSCTL> connect mysdbadmin/mysdbadmin_password
  3. ビジネスで必要なカスタマイズされたシャードの各グループのためのシャード領域とシャードグループを追加します。

    この例では、アメリカとヨーロッパの顧客のためのシャード領域とシャードグループが作成されます。名前は自分で選択できます。

    GDSCTL> add shardspace -shardspace cust_america
    GDSCTL> add shardgroup -shardspace cust_america -shardgroup america_shgrp1
     -deploy_as primary -region region1
    
    GDSCTL> add shardspace -shardspace cust_europe
    GDSCTL> add shardgroup -shardspace cust_europe -shardgroup europe_shgrp1
     -deploy_as primary -region region2

    ノート:

    本番デプロイメントの場合は、高可用性のためにadd shardgroupコマンドを使用して追加のシャードグループを作成する必要があります

  4. シャード領域およびシャードグループの構成を確認します。
    GDSCTL> config shardspace
    SHARDSPACE                    Chunks                        
    ----------                    ------                        
    cust_america                  12                            
    cust_europe                   12                            
    shardspaceora                 12   
     
    GDSCTL>config shardgroup
    Shard Group         Chunks Region              SHARDSPACE          
    -----------         ------ ------              ----------          
    america_shgrp1      12     region1             cust_america        
    europe_shgrp1       12     region2             cust_europe         
    
  5. シャード・データベースの構成を確認します。
    GDSCTL> config
    
    Regions
    ------------------------
    region1 
    region2   
    
    GSMs
    ------------------------
    sharddirector1    
    sharddirector2 
    
    Sharded Database
    ------------------------
    cust_sdb_comp 
    
    Databases
    ------------------------
    
    Shard Groups
    ------------------------
    america_shgrp1  
    europe_shgrp1 
    
    Shard spaces
    ------------------------
    cust_america 
    cust_europe 
    shardspaceora
    
    Services
    ------------------------
    
    GDSCTL pending requests
    ------------------------
    Command              Object               Status
    -------              ------               ------
    
    Global properties
    ------------------------
    Name: oradbcloud
    Master GSM: sharddirector1
    DDL sequence #: 0
    
  6. 各シャードのホスト・アドレスをカタログ内の登録に関する有効ノード・チェック(VNCR)リストに追加し、次の例に示すように、プライマリまたはスタンバイのシャードグループにシャードを作成します。

    ノート:

    登録に関する有効ノード・チェック(VNCR)機能では、シャード・ディレクタによって許可された登録リクエストのIPアドレス、ホスト名またはサブネットのセットの構成や動的な更新が可能になります。シャード・ディレクタへのデータベース・インスタンスの登録は、リクエスト元が有効なノードである場合にのみ成功します。デフォルトでは、create shardまたはadd shardが実行されるたびに、シャード管理層(Oracle Global Data Servicesフレームワークに基づく)は、リモート・データベースが実行されているホストのVNCRエントリを自動的に追加します。自動化(自動VNCRと呼ばれます)によってターゲット・ホストのパブリックIPアドレスが検索され、そのIPアドレスのVNCRエントリが自動的に追加されます。ホストに複数のパブリックIPアドレスがある場合は、データベースに登録されたアドレスが自動VNCRを使用して追加されたアドレスと同じではないことがあり、登録が拒否されることがあります。ターゲット・データベースのホストに複数のパブリックIPアドレスがある場合は、GDSCTLでadd invitednodeコマンドまたはadd invitedsubnetコマンドを使用して、このホストのVNCRを手動で構成することをお薦めします。

    複数のネットカードがターゲット・ホストにある(/sbin/ifconfigで複数のパブリック・インタフェースが返されます)場合は、安全のためにadd invitednodeを使用します(パケットをルーティングするために使用されるインタフェースを確認してから)。

    登録になんらかの疑念がある場合は、必要に応じてconfig vncrおよびadd invitednodeを使用します。これを行っても問題はありません。ノードがすでに追加されている場合、自動VNCRはそれを無視し、自動VNCRによってすでに追加された後にノードを追加しようとすると、すでに存在しているという警告を受け取るからです。

    この例は、4つのシャードを作成する方法を示しています。そのうちの2つはアメリカ・シャードグループにあり、他の2つはヨーロッパ・シャードグループにあります。os_credentialは、各ホストに作成したオペレーティング・システムの資格証明です。

    シャードを作成するときに、次の例に示すようにCREATE SHARD-sys_passwordを使用してSYSのパスワードを設定することもできます。これにより、シャードが作成されてDEPLOYを実行したときに、SYSのパスワードが設定されます。CREATE SHARDには、他にもデータベース・パラメータ、記憶域とファイルの場所、リスナー・ポート番号などをカスタマイズできるオプションのパラメータがあります。詳細は、Oracle Database Global Data Services概要および管理ガイドの付録を参照してください。

    GDSCTL> add invitednode shard_host_1 
    GDSCTL> create shard -shardgroup america_shgrp1 -destination shard_host_1
     -credential os_credential-sys_password
    
    GDSCTL> add invitednode shard_host_2
    GDSCTL> create shard -shardgroup america_shgrp1 -destination shard_host_2
     -credential os_credential-sys_password
    
    GDSCTL> add invitednode shard_host_3 
    GDSCTL> create shard -shardgroup europe_shgrp1 -destination shard_host_3
     -credential os_credential-sys_password
    
    GDSCTL> add invitednode shard_host_4
    GDSCTL> create shard -shardgroup europe_shgrp1 -destination shard_host_4
     -credential os_credential-sys_password

    シャード・データベースのデプロイの概要で説明されているADD SHARD方法を使用している場合は、前述の例のCREATE SHARDコマンドのかわりに次のコマンドを使用します。追加されるシャード・データベースがプラガブル・データベース(PDB)である場合は、ADD SHARD-cdbオプションを使用して、PDBシャードが含まれているコンテナ・データベース(CDB)を指定する必要があります。また、ADD SHARDコマンドの前にADD CDBを使用してカタログにCDBを追加する必要があります。ADD CDBおよびADD SHARDの構文は、Oracle Database Global Data Services概要および管理ガイドを参照してください。Oracle Database 18cでは、各CDB内の1つのPDBのみをシャードにすることができます。

    GDSCTL> add shard –shardgroup america_shgrp1
     –connect shard_host:TNS_listener_port/shard_database_name
     –pwd GSMUSER_password
  7. シャード・ディレクタから構成を確認します。

    シャード名sh1、sh2、sh3およびsh4はシステムによって生成されたシャード名です。

    GDSCTL> config shard
    Name           Shard Group         Status    State       Region    Availability
    ----           -----------         ------    -----       ------    ------------
    sh1            america_shgrp1      U         none        region1   -         
    sh2            america_shgrp1      U         none        region1   -         
    sh3            europe_shgrp1       U         none        region2   -         
    sh4            europe_shgrp1       U         none        region2   -         
    
    GDSCTL> config vncr
    Name    Group ID 
    ----    --------
    shard_host_1
    shard_host_2
    shard_host_3
    shard_host_4
    shard_catalog_host_IP
    
  8. DEPLOYコマンドを実行して、シャードを作成します。
    GDSCTL> deploy

    DEPLOYコマンドは実行に約15-30分かかります。DEPLOYコマンドはDBCAを使用してシャードを作成します。

  9. すべてのシャードがデプロイされたことを確認します。
    GDSCTL> config shard
    Name        Shard Group         Status    State       Region    Availability 
    ----        -----------         ------    -----       ------    ------------ 
    sh1         america_shgrp1      Ok        Deployed    region1   ONLINE  
    sh2         america_shgrp1      Ok        Deployed    region1   ONLINE 
    sh3         europe_shgrp1       Ok        Deployed    region2   ONLINE 
    sh4         europe_shgrp1       Ok        Deployed    region2   ONLINE
  10. すべてのシャードが登録されたことを確認します。
    GDSCTL> databases
    Database: "sh1" Registered: Y State: Ok ONS: N. Role: PRIMARY Instances: 1
     Region: region1
       Registered instances:
         cust_sdb_comp%1
    Database: "sh2" Registered: Y State: Ok ONS: N. Role: PRIMARY Instances: 1
     Region: region1
       Registered instances:
         cust_sdb_comp%11
    Database: "sh3" Registered: Y State: Ok ONS: N. Role: PRIMARY Instances: 1
     Region: region2
       Registered instances:
         cust_sdb_comp%21
    Database: "sh4" Registered: Y State: Ok ONS: N. Role: PRIMARY Instances: 1
     Region: region2
       Registered instances:
         cust_sdb_comp%31
    
  11. シャードの構成を確認します。
    GDSCTL> config shard -shard sh1
    
    Name: sh1
    Shard Group: america_shgrp1
    Status: Ok
    State: Deployed
    Region: region1
    Connection string: shard1:1521/sh1:dedicated
    SCAN address: 
    ONS remote port: 0
    Disk Threshold, ms: 20
    CPU Threshold, %: 75
    Version: 18.0.0.0
    Last Failed DDL: 
    DDL Error: ---
    Failed DDL id: 
    Availability: ONLINE
    
    
    Supported services
    ------------------------
    Name                                                            Preferred Status    
    ----                                                            --------- ------
    
  12. すべてのプライマリ・シャードで実行されるグローバル・サービスを追加します。

    oltp_rw_srvcグローバル・サービスは、クライアントからの接続を実際のデータベースにルーティングするために使用されるグローバル・データ・サービスのリスナーです。oltp_rw_srvcサービスはプライマリ・シャードでトランザクションを実行します。

    GDSCTL> add service -service oltp_rw_srvc
    GDSCTL> config service 
    
    Name           Network name                  Pool           Started Preferred all 
    ----           ------------                  ----           ------- ------------- 
    oltp_rw_srvc   oltp_rw_srvc.cust_sdb_comp.or cust_sdb_comp  No      Yes           
                   adbcloud   
    
  13. oltp_rw_srvcグローバル・サービスを開始します。
    GDSCTL> start service -service oltp_rw_srvc
    
    GDSCTL> status service
    Service "oltp_rw_srvc.cust_sdb_comp.oradbcloud" has 4 instance(s). 
     Affinity: ANYWHERE
       Instance "cust_sdb_comp%1", name: "sh1", db: "sh1", region: "region1",
     status: ready.
       Instance "cust_sdb_comp%11", name: "sh2", db: "sh2", region: "region1",
     status: ready.
       Instance "cust_sdb_comp%21", name: "sh3", db: "sh3", region: "region2",
     status: ready.
       Instance "cust_sdb_comp%31", name: "sh4", db: "sh4", region: "region2",
     status: ready. 
    

コンポジットSDBのスキーマ作成

SDBのスキーマ・ユーザー、表領域セット、シャード表および重複表を作成します。DDLがすべてのシャードに伝播されたことを確認し、シャードに接続されている状態で、ファスト・スタート・フェイルオーバーを使用した自動Data Guard Broker構成を検証します。

  1. シャード・カタログのホストに接続し、ORACLE_SIDにシャード・カタログ名を設定します。
  2. シャード・カタログ・データベースに接続し、アプリケーション・スキーマのユーザーを作成して、そのユーザーに権限とロールを付与します。

    この例では、アプリケーション・スキーマのユーザーはapp_schemaという名前です。

    $ sqlplus / as sysdba
    
    SQL> connect / as sysdba
    SQL> alter session enable shard ddl;
    SQL> create user app_schema identified by app_schema_password;
    SQL> grant connect, resource, alter session to app_schema;
    SQL> grant execute on dbms_crypto to app_schema;
    SQL> grant create table, create procedure, create tablespace,
     create materialized view to app_schema;
    SQL> grant unlimited tablespace to app_schema;
    SQL> grant select_catalog_role to app_schema;
    SQL> grant all privileges to app_schema;
    SQL> grant gsmadmin_role to app_schema;
    SQL> grant dba to app_schema;
    
  3. シャード表の表領域セットを作成します。
    SQL> CREATE TABLESPACE SET  
      TSP_SET_1 in shardspace cust_america using template
      (datafile size 100m autoextend on next 10M maxsize
       unlimited extent management
       local segment space management auto );
    
    SQL> CREATE TABLESPACE SET
      TSP_SET_2 in shardspace cust_europe using template
      (datafile size 100m autoextend on next 10M maxsize
       unlimited extent management
       local segment space management auto );

    表領域セットを作成する場合、シャード領域の指定はオプションです。コマンドにシャード領域を指定しない場合は、デフォルトのシャード領域が使用されます。

  4. 列にLOBを使用する場合は、LOBの表領域セットを指定できます。
    SQL> CREATE TABLESPACE SET LOBTS1 in shardspace cust_america ... ;
    
    SQL> CREATE TABLESPACE SET LOBTS2 in shardspace cust_europe ... ;

    ノート:

    コンポジット・シャーディングでは、LOBの表領域セットをサブパーティション・レベルで指定できません。

  5. 重複表の表領域を作成します。

    この例では、重複表はサンプルのCustomers-Orders-ProductsスキーマのProducts表です。

    CREATE TABLESPACE products_tsp datafile size 100m autoextend on next 10M
     maxsize unlimited extent management local uniform size 1m;
  6. ルート表のシャード表を作成します。

    この例では、ルート表はサンプルのCustomers-Orders-ProductsスキーマのCustomers表です。

    connect app_schema/app_schema_password
    alter session enable shard ddl;
    
    CREATE SHARDED TABLE Customers
    (
      CustId      VARCHAR2(60) NOT NULL,
      FirstName   VARCHAR2(60),
      LastName    VARCHAR2(60),
      Class       VARCHAR2(10),
      Geo         VARCHAR2(8),
      CustProfile VARCHAR2(4000),
      Passwd      RAW(60),
      CONSTRAINT pk_customers PRIMARY KEY (CustId),
      CONSTRAINT json_customers CHECK (CustProfile IS JSON)
    ) partitionset by list(GEO)
    partition by consistent hash(CustId)
    partitions auto
    (partitionset america values ('AMERICA') tablespace set tsp_set_1,
    partitionset europe values ('EUROPE') tablespace set tsp_set_2
    );
    

    ノート:

    シャード表の列にLOBが含まれる場合は、次に示すようにCREATE SHARDED TABLE文にLOB表領域セットを含めることができます。

    CREATE SHARDED TABLE Customers
    (
      CustId      VARCHAR2(60)  NOT NULL,
      FirstName   VARCHAR2(60),
      LastName    VARCHAR2(60),
      Class       VARCHAR2(10),
      Geo         VARCHAR2(8)   NOT NULL,
      CustProfile VARCHAR2(4000),
      Passwd      RAW(60),
      image       BLOB,
      CONSTRAINT pk_customers PRIMARY KEY (CustId),
      CONSTRAINT json_customers CHECK (CustProfile IS JSON)
    ) partitionset by list(GEO)
    partition by consistent hash(CustId)
    partitions auto
    (partitionset america values ('AMERICA') tablespace set tsp_set_1
     lob(image) store as (tablespace set lobts1),
    partitionset europe values ('EUROPE') tablespace set tsp_set_2
     lob(image) store as (tablespace set lobts2));
    
  7. 表ファミリの他の表のシャード表を作成します。

    この例では、シャード表はサンプルのCustomers-Orders-ProductsスキーマのOrders表およびLineItems表として作成されます。

    OrderId列に使用される順序を作成します。

    CREATE SEQUENCE Orders_Seq;
    

    Ordersシャード表を最初に作成します。

    CREATE SHARDED TABLE Orders
    (
      OrderId     INTEGER NOT NULL,
      CustId      VARCHAR2(60) NOT NULL,
      OrderDate   TIMESTAMP NOT NULL,
      SumTotal    NUMBER(19,4),
      Status      CHAR(4),
      constraint  pk_orders primary key (CustId, OrderId),
      constraint  fk_orders_parent foreign key (CustId) 
        references Customers on delete cascade
    ) partition by reference (fk_orders_parent);
    

    LineItemsのシャード表を作成します。

    CREATE SHARDED TABLE LineItems
    (
      OrderId     INTEGER NOT NULL,
      CustId      VARCHAR2(60) NOT NULL,
      ProductId   INTEGER NOT NULL,
      Price       NUMBER(19,4),
      Qty         NUMBER,
      constraint  pk_items primary key (CustId, OrderId, ProductId),
      constraint  fk_items_parent foreign key (CustId, OrderId)
        references Orders on delete cascade
    ) partition by reference (fk_items_parent);
  8. 必要な重複表を作成します。

    この例では、Products表は重複しているオブジェクトです。

    CREATE DUPLICATED TABLE Products
    (
      ProductId  INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
      Name       VARCHAR2(128),
      DescrUri   VARCHAR2(128),
      LastPrice  NUMBER(19,4)
    ) tablespace products_tsp;
  9. シャード・ディレクタのホストから、表領域の作成中に障害が発生しなかったことを確認します。
    GDSCTL> show ddl
    id      DDL Text                                 Failed shards 
    --      --------                                 ------------- 
    11      CREATE TABLESPACE SET  TSP_SET_2 in s...               
    12      CREATE TABLESPACE products_tsp datafi...               
    13      CREATE SHARDED TABLE Customers (   Cu...               
    14      CREATE SEQUENCE Orders_Seq;                            
    15      CREATE SHARDED TABLE Orders (   Order...               
    16      CREATE SHARDED TABLE LineItems (   Or...               
    17      create database link "PRODUCTSDBLINK@...               
    18      CREATE MATERIALIZED VIEW "PRODUCTS"  ...               
    19      CREATE OR REPLACE FUNCTION PasswCreat...               
    20      CREATE OR REPLACE FUNCTION PasswCheck...     
    
  10. 各シャードにDDLエラーがないことを確認します。

    構成の各シャードでconfig shardコマンドおよびconfig chunksコマンドを実行します。

    GDSCTL> config shard -shard sh1
    
    Name: sh1
    Shard Group: america_shgrp1
    Status: Ok
    State: Deployed
    Region: region1
    Connection string: shard1:1521/sh1:dedicated
    SCAN address: 
    ONS remote port: 0
    Disk Threshold, ms: 20
    CPU Threshold, %: 75
    Version: 18.0.0.0
    Last Failed DDL: 
    DDL Error: ---
    Failed DDL id: 
    Availability: ONLINE
    
    
    Supported services
    ------------------------
    Name                                                            Preferred Status    
    ----                                                            --------- ------    
    oltp_rw_srvc                                                    Yes       Enabled  
    
    GDSCTL> config chunks
    Chunks
    ------------------------
    Database                      From      To        
    --------                      ----      --        
    sh1                           1         6         
    sh2                           7         12        
    sh3                           1         6         
    sh4                           7         12
    
  11. シャード表ファミリのために作成した表領域セットの表領域、および重複表のために作成した表領域が、すべてのシャードに作成されたことを確認します。

    表領域セットの表領域の数は、create shardcatalogコマンドで指定したチャンク数に基づいています。

    シャード・カタログの作成例で指定した12個のチャンクのうちの最初の6個のチャンクを持つ表領域セット、および複製されたProductsの表領域を次のshard_host_1の例に示します。

    $ sqlplus / as sysdba
    
    SQL> select TABLESPACE_NAME, BYTES/1024/1024 MB
     from sys.dba_data_files
     order by tablespace_name;
    
    TABLESPACE_NAME 		       MB
    ------------------------------ ----------
    C001TSP_SET_1			      100
    C002TSP_SET_1			      100
    C003TSP_SET_1			      100
    C004TSP_SET_1			      100
    C005TSP_SET_1			      100
    C006TSP_SET_1			      100
    PRODUCTS_TSP			      100
    SYSAUX				      650
    SYSTEM				      890
    SYS_SHARD_TS			      100
    TSP_SET_1			      100
    
    TABLESPACE_NAME 		       MB
    ------------------------------ ----------
    TSP_SET_2			      100
    UNDOTBS1			      110
    USERS					5
    
    14 rows selected.
    

    構成のすべてのシャードでこのステップを繰り返します。

  12. チャンクおよびチャンク表領域がすべてのシャードに作成されたことを確認します。
    SQL> set linesize 140
    SQL> column table_name format a20
    SQL> column tablespace_name format a20
    SQL> column partition_name format a20
    SQL> show parameter db_unique_name
    NAME				     TYPE	 VALUE
    ------------------------------------ ----------- ------------------------------
    db_unique_name			     string	 sh2
    
    
    SQL> select table_name, partition_name, tablespace_name
     from dba_tab_partitions
     where tablespace_name like 'C%TSP_SET_1'
     order by tablespace_name;
    
    TABLE_NAME	     PARTITION_NAME	  TABLESPACE_NAME
    -------------------- -------------------- --------------------
    LINEITEMS	     CUSTOMERS_P7	  C007TSP_SET_1
    CUSTOMERS	     CUSTOMERS_P7	  C007TSP_SET_1
    ORDERS		     CUSTOMERS_P7	  C007TSP_SET_1
    CUSTOMERS	     CUSTOMERS_P8	  C008TSP_SET_1
    LINEITEMS	     CUSTOMERS_P8	  C008TSP_SET_1
    ORDERS		     CUSTOMERS_P8	  C008TSP_SET_1
    LINEITEMS	     CUSTOMERS_P9	  C009TSP_SET_1
    CUSTOMERS	     CUSTOMERS_P9	  C009TSP_SET_1
    ORDERS		     CUSTOMERS_P9	  C009TSP_SET_1
    CUSTOMERS	     CUSTOMERS_P10	  C00ATSP_SET_1
    LINEITEMS	     CUSTOMERS_P10	  C00ATSP_SET_1
    
    TABLE_NAME	     PARTITION_NAME	  TABLESPACE_NAME
    -------------------- -------------------- --------------------
    ORDERS		     CUSTOMERS_P10	  C00ATSP_SET_1
    CUSTOMERS	     CUSTOMERS_P11	  C00BTSP_SET_1
    LINEITEMS	     CUSTOMERS_P11	  C00BTSP_SET_1
    ORDERS		     CUSTOMERS_P11	  C00BTSP_SET_1
    CUSTOMERS	     CUSTOMERS_P12	  C00CTSP_SET_1
    LINEITEMS	     CUSTOMERS_P12	  C00CTSP_SET_1
    ORDERS		     CUSTOMERS_P12	  C00CTSP_SET_1
    
    18 rows selected.
    

    構成のすべてのシャードでこのステップを繰り返します。

  13. シャード・カタログ・データベースに接続して、チャンクが均等に配分されていることを確認します。
    $ sqlplus / as sysdba
    
    SQL> set echo off
    SQL> select a.name Shard,  count( b.chunk_number) Number_of_Chunks
     from gsmadmin_internal.database a, gsmadmin_internal.chunk_loc b
     where a.database_num=b.database_num  group by a.name;
    
    SHARD			       NUMBER_OF_CHUNKS
    ------------------------------ ----------------
    sh1					      6
    sh2					      6
    sh3					      6
    sh4					      6
    
  14. シャード表および重複表が作成されたことを確認します。

    シャード・カタログ・データベースおよび各シャードで、アプリケーション・スキーマのユーザーとしてログインします。

    次の例は、app_schemaユーザーとしてデータベース・シャード上の表に問い合せています。

    $ sqlplus app_schema/app_schema_password
    Connected.
    SQL> select table_name from user_tables;
    
    TABLE_NAME
    -----------------------------------------------------------------------
    CUSTOMERS
    ORDERS
    LINEITEMS
    PRODUCTS
    
    4 rows selected.

Oracle Shardingでの透過的データ暗号化の使用

Oracle Shardingでは透過的データ暗号化(TDE)がサポートされますが、TDEを有効にした状態でシャード・データベース内のチャンクを正常に移行できるように、すべてのシャードが暗号化された表領域に対する同じ暗号化キーを共有して使用する必要があります。

シャード・データベースは、複数の独立したデータベースと1つのカタログ・データベースで構成されます。特にシャード間でデータを移動するときにTDEが正しく機能するように、一定の制限が適用されます。データが暗号化されているときにシャード間のチャンク移動が正常に機能するためには、すべてのシャードで同じ暗号化キーを使用する必要があります。

これを実現するには、次の2つの方法があります。

  • シャード・カタログから暗号化キーを作成してエクスポートし、すべてのシャードに個々にキーをインポートしてアクティブ化します。

  • ウォレットを共有の場所に格納し、シャード・カタログおよびすべてのシャードで同じウォレットを使用します。

シャードDDLを有効にしたシャード・カタログで次のTDE文を実行すると、その操作がシャードに自動的に伝播されます。

  • alter system set encryption wallet open/close identified by password

  • alter system set encryption key

  • administer key management set keystore [open|close] identified by password

  • administer key management set key identified by password

  • administer key management use key identified by password

  • administer key management create key store identified by password

制限事項

Oracle ShardingでのTDEの使用には、次の制限事項が適用されます。

  • MOVE CHUNKが正常に機能するには、すべてのシャード・データベース・ホストが同じプラットフォームに存在する必要があります。

  • MOVE CHUNKでは、データ転送中にパフォーマンスに影響を及ぼす可能性がある圧縮を使用できません。

  • 表領域レベルでの暗号化のみがサポートされます。特定の列に対する暗号化はサポートされません。

関連項目:

TDEの詳細は、『Oracle Database Advanced Securityガイド』を参照してください。

すべてのシャードに対する単一の暗号化キーの作成

シャード・データベース構成内のすべてのデータベースに単一の暗号化キーを伝播するには、シャード・カタログでマスター暗号化キーを作成し、ウォレットをエクスポートしてシャードにインポートし、キーをアクティブ化する必要があります。

ノート:

この手順は、キーストア・パスワードとウォレット・ディレクトリ・パスがシャード・カタログおよびすべてのシャードで同じであることを前提としています。異なるパスワードとディレクトリ・パスが必要な場合は、各シャードとシャード・カタログで、シャードDDLを無効化し、シャードの独自のパスワードとパスを使用して、すべてのコマンドを個別に発行する必要があります。

次のステップは、データの暗号化を実行する前に行う必要があります。

  1. シャード・カタログで暗号化キーを作成します。

    シャードDDLを有効にして、次の文を発行します。

    ADMINISTER KEY MANAGEMENT CREATE KEYSTORE wallet_directory_path IDENTIFIED BY
     keystore_password;
    ADMINISTER KEY MANAGEMENT SET KEYSTORE OPEN IDENTIFIED BY keystore_password;

    ウォレットのオープンおよびクローズ・コマンドをカタログから一元的に発行する場合は、keystore_passwordが同じである必要があります。

    ノート:

    ウォレット・ディレクトリ・パスは、対応するsqlnet.oraのENCRYPTION_WALLET_LOCATIONと一致する必要があります。

    シャードDDLを無効にして、次の文を発行します。

    ADMINISTER KEY MANAGEMENT SET KEY IDENTIFIED BY keystore_password WITH BACKUP;

    シャード・カタログ・データベースのウォレットに暗号化キーが作成され、アクティブ化されます。

    DDLを有効にしてこの文を発行すると、各シャードのウォレットにもカタログのキーとは異なる暗号化キーが作成されます。データ移動を正常に実行するには、各シャード上の異なる暗号化キーを使用しないでください。

  2. シャード・カタログのキーストアからマスター・キーのIDを取得します。
    SELECT KEY_ID  FROM V$ENCRYPTION_KEYS 
    WHERE ACTIVATION_TIME =
     (SELECT MAX(ACTIVATION_TIME) FROM V$ENCRYPTION_KEYS
      WHERE ACTIVATING_DBID = (SELECT DBID FROM V$DATABASE));
  3. シャードDDLを無効にして、カタログの暗号化キーを含むウォレットをエクスポートします。
    ADMINISTER KEY MANAGEMENT EXPORT ENCRYPTION KEYS WITH SECRET secret_phrase TO
     wallet_export_file IDENTIFIED BY keystore_password;
    (オプション)ここでステップの結果を入力します。
  4. ウォレット・ファイルを各シャード・ホストの対応するウォレット・エクスポート・ファイルの場所に物理的にコピーするか、すべてのシャードがアクセスできる共有ディスクに格納します。
  5. シャードDDLを無効にして、各シャードにログオンし、キーを含むウォレットをインポートします。
    ADMINISTER KEY MANAGEMENT SET KEYSTORE OPEN IDENTIFIED BY keystore_password;
    ADMINISTER KEY MANAGEMENT IMPORT ENCRYPTION KEYS WITH SECRET secret_phrase FROM
     wallet_export_file IDENTIFIED BY keystore_password WITH BACKUP;
  6. シャード・データベースを再起動します。
  7. すべてのシャード上のキーをアクティブ化します。

    カタログでシャードDDLを有効にして、次のコマンドを実行します。

    ADMINISTER KEY MANAGEMENT SET KEYSTORE OPEN IDENTIFIED BY keystore_password;
    ADMINISTER KEY MANAGEMENT USE KEY master_key_id IDENTIFIED BY keystore_password
     WITH BACKUP;

これで、すべてのシャードとシャード・カタログ・データベースで同じ暗号化キーがアクティブ化され、データの暗号化に使用する準備が完了しました。シャード・カタログで、(シャードDDLを有効にして)次のようなTDE DDLを発行できます。

  • 暗号化された表領域および表領域セットを作成します。

  • 暗号化された表領域を使用してシャード表を作成します。

  • 暗号化された列を含むシャード表を作成します(制限があります)。

すべてのシャード上のキーIDがシャード・カタログ上のIDと一致していることを検証します。

SELECT KEY_ID  FROM V$ENCRYPTION_KEYS 
WHERE ACTIVATION_TIME =
 (SELECT MAX(ACTIVATION_TIME) FROM V$ENCRYPTION_KEYS
  WHERE ACTIVATING_DBID = (SELECT DBID FROM V$DATABASE));