この章では、リモートでデータベースおよびセル・ノードを管理できるExaCLIユーティリティについて説明します。
この章のトピックは、次のとおりです:
ExaCLIは、データベースおよびセル・ノードで実行されるコマンドライン管理ツールで、リモートでノードを管理できます。
ExaCLIを使用して、リモート・ノードの環境でセルとデータベース・ノードの構成およびオブジェクトを管理できます。ExaCLIは、セルまたはデータベース・ノードのイメージ化の際にインストールされます。ExaCLIでは、DBMCLIおよびCellCLIと同じコマンド構文がサポートされます。主な違いは、ExaCLIではリモート・ホストからセルおよびデータベース・ノードを管理するのに対し、DBMCLIはデータベース・ノード上で直接実行され、CellCLIはセル・ノード上で直接実行されることです。
ExaCLIを使用する主な理由には、次の2つがあります。
多くの企業、特に政府機関では、コンプライアンス要件の一部としてセルおよびデータベース・ノード上のrootアクセスまたはSSHサービスを無効にする必要があります。
Exadataマシンをホストするサービス・プロバイダは、セルおよびデータベース・ノード上で実行されている仮想マシンへのアクセスを提供します。お客様が、ノードを管理するために、CellCLIまたはDBMCLIを使用して、セルまたはデータベース・ノードに対するSSHを実行することは、許可されません。
そのような場合、セルまたはデータベース・ノードを管理する方法は、リモート・ノードで実行されるExaCLIを使用することのみとなります。
ExaCLIユーティリティには、Javaバージョン1.8以上が必要です。Javaのバージョンは、"java -version
"コマンドを実行して確認できます。また、適切なJavaバージョンのインストール・ディレクトリを指すようにJAVA_HOME環境変数を設定する必要があります。
次の手順では、一般的なExaCLIの使用方法について説明します。
DBMCLI (データベース・ノードの場合)またはCellCLI (セル・ノードの場合)を使用して、リモート・ノードでユーザーとロールを作成します。これは、ExaCLIを使用してリモート・ノードに接続することを許可されるユーザーです。ロールを使用してユーザーに権限を割り当てます。
セル・ノードの例:
次の例では、administrator
ロールを作成して、そのロールにすべての権限を付与します。その後、celladministrator
というユーザーを作成して、そのユーザーにadministrator
ロールを付与します。
cellcli> create role administrator cellcli> grant privilege all actions on all objects all attributes with all options to role administrator cellcli> create user celladministrator password=* cellcli> grant role administrator to user celladministrator
次の例では、グリッド・ディスクの名前属性とサイズ属性をリストする権限を持つロールを作成して、そのロールをuser1
というユーザーに付与します。
cellcli> create user user1 password:************ cellcli> create role role1 Role role1 successfully created. cellcli> GRANT PRIVILEGE list ON griddisk ATTRIBUTES name,size WITH OPTIONS detail TO ROLE role1 Privilege [object=griddisk, verb=list, attributes=name,size, options=detail] has been granted to role role1. cellcli> grant role role1 to user user1
データベース・ノードの例:
次の例では、administrator
ロールを作成して、そのロールにすべての権限を付与します。その後、dbnodeadministrator
というユーザーを作成して、そのユーザーにadministrator
ロールを付与します。
dbmcli> create role administrator dbmcli> grant privilege all actions on all objects all attributes with all options to role administrator dbmcli> create user dbnodeadministrator password=* dbmcli> grant role administrator to user dbnodeadministrator
次の例では、データベース・サーバーの名前属性をリストする権限を持つロールを作成して、そのロールをuser1
というユーザーに付与します。
dbmcli> create user user1 password:************ dbmcli> create role role1 Role role1 successfully created. dbmcli> GRANT PRIVILEGE list ON dbserver ATTRIBUTES name WITH OPTIONS detail TO ROLE role1 Privilege [object=dbserver, verb=list, attributes=name, options=detail] has been granted to role role1. dbmcli> grant role role1 to user user1
ExaCLIを実行し、前の手順で作成したユーザーとしてリモート・ノードに接続し、リモート・ノード上でコマンドを実行します。
セル・ノードの例:
次の例では、ExaCLIでcellnode01
ノードにcelladministrator
ユーザーとして接続してlist cell detail
コマンドを実行します。
$ exacli -l celladministrator -c cellnode01 --cookie-jar -e list cell detail Password=*******
ログインおよびパスワードは、認証のためセル・ノードに送信されます。認証に成功すると、セル・ノードにより、ExaCLIが実行されているマシン上のCookie jarに格納されるログイン資格証明付きのCookieが返されます。
後続のコマンド実行では、以前のコマンドからのCookie jarに格納されたCookieを使用するため、ExaCLIからパスワードの入力は要求されません。
$ exacli -l celladministrator -c cellnode01 -e list griddisk detail
データベース・ノードの例:
次の例では、ExaCLIでdbnode01
ノードにdbnodeadministrator
ユーザーとして接続してlist dbserver detail
コマンドを実行します。
$ exacli -l dbnodeadministrator -c dbnode01 --cookie-jar -e list dbserver detail Password=*******
ログインおよびパスワードは、認証のためデータベース・ノードに送信されます。認証に成功すると、データベース・ノードにより、ExaCLIが実行されているマシン上のCookie jarに格納されるログイン資格証明付きのCookieが返されます。
後続のコマンド実行では、以前のコマンドからのCookie jarに格納されたCookieを使用するため、ExaCLIからパスワードの入力は要求されません。
$ exacli -l dbnodeadministrator -c dbnode01 -e list alerthistory detail
ExaCLIは、オペレーティング・システムのコマンドラインから実行します。コマンドラインの構文は、次のとおりです。
exacli -c [username@]remotehost [-l username] [--xml] [--cookie-jar [filename]] [-e command]
表7-1 ExaCLIのオプション
オプション | 説明 |
---|---|
-c [username@]remotehost --connect [username@]remotehost |
接続先のリモート・ノードを指定します。ユーザー名を省略した場合は、ExaCLIから入力を要求されます。 |
-l username --login-name username |
リモート・ノードにログインするユーザー名を指定します。 |
--xml |
出力をXML形式で表示します。 |
--cookie-jar [filename]
|
使用するCookie jarのファイル名を指定します。 ユーザー名およびパスワードは、認証のためリモート・ノードに送信されます。認証に成功すると、リモート・ノードにより、データベース・ノードの
Cookie jarファイルの権限は、
Cookie jarには、パラレル・セッションで複数のノード上の複数のユーザーからの複数のCookieを格納できます。 Cookieは、24時間後に無効化されます。 有効なCookieが存在することで、exacliユーザーは、後続のExaCLIセッションでログインを要求されることなく、コマンドの実行が許可されます。 Cookieが見つからないかまたは有効期限切れの場合は、
|
-e command[; command] -e @batchFile |
実行するExaCLIコマンドまたはバッチ・ファイルのいずれかを指定します。ExaCLIはコマンドの実行後に終了します。インタラクティブなExaCLIセッションを開始するには、このオプションを省略します。 実行する複数のコマンドを指定する場合、コマンドを一重引用符で囲んで、シェルがセミコロンを解釈しないようにします。 バッチ・ファイルは、実行する1つ以上のExaCLIコマンドが含まれているテキスト・ファイルです。 |
--cert-proxy proxy[:port] |
証明書をダウンロードするときに使用するプロキシ・サーバーを指定します。ポートを省略した場合、デフォルトはポート80です。 |
-n --no-prompt |
ユーザー入力を求めるメッセージを抑制します。ExaCLIがユーザーから追加情報を必要とする場合、たとえばExaCLIがユーザーにパスワードの入力を求めたり(たとえば、Cookie-jarに有効なCookieがないため)、リモート・ノードのアイデンティティを確認するよう求める必要がある場合、ExaCLIはエラー・メッセージを出力して終了します。 |
セル・ノードの例1: セル・ノードcellnode01にcelladministratorユーザーとして接続します。デフォルトのCookie jarに「celladministrator」ユーザーの有効なCookieが含まれない場合、ExaCLIによりパスワードの入力が求められます。--cookie-jar
オプションが指定されていないため、CookieはCookie jarには格納されません。次のコマンドは同等です。
$ exacli -l celladministrator -c cellnode01 $ exacli -c celladministrator@cellnode01
セル・ノードの例2: 認証のため、ユーザーcelladministratorおよびパスワードがcellnode01に送信されます。認証に成功すると、セル・ノードにより、デフォルトのCookie jarに格納されるCookieが送り返されます。指定されたコマンドがセル・ノードで実行されます。複数のコマンドは一重引用符で囲む必要があります。
$ exacli -l celladministrator -c cellnode01 --cookie-jar -e 'list cell; list celldisk' Password=************
セル・ノードの例3: デフォルトのCookie jarのCookieを使用するため、ExaCLIにより、celladministratorユーザーの後続のExaCLIセッションにパスワードの入力を要求されることはありません。
$ exacli -l celladministrator -c cellnode01 -e list griddisk detail
セル・ノードの例4: ExaCLIはcellnode01ノードにcelladministratorユーザーとして接続し、認証に成功すると、commandFile
でコマンドを実行します。
$ exacli -l celladministrator -c cellnode01 -e @commandFile
データベース・ノードの例1: データベース・ノードdbnode01にdbnodeadministratorユーザーとして接続します。デフォルトのCookie jarにdbnodeadministratorユーザーの有効なCookieが含まれない場合、ExaCLIによりパスワードの入力が求められます。--cookie-jar
オプションが指定されていないため、CookieはCookie jarには格納されません。次のコマンドは同等です。
$ exacli -l dbnodeadministrator -c dbnode01 $ exacli -c dbnodeadministrator@dbnode01
データベース・ノードの例2: 認証のため、ユーザーdbnodeadministratorおよびパスワードがdbnode01に送信されます。認証に成功すると、データベース・ノードにより、デフォルトのCookie jarに格納されるCookieが送り返されます。指定されたコマンドがデータベース・ノードで実行されます。複数のコマンドは一重引用符で囲む必要があります。
$ exacli -l dbnodeadministrator -c dbnode01 --cookie-jar -e 'list dbserver; list alerthistory' Password=************
データベース・ノードの例3: デフォルトのCookie jarのCookieを使用するため、ExaCLIにより、dbnodeadministratorユーザーの後続のExaCLIセッションにパスワードの入力を要求されることはありません。
$ exacli -l dbnodeadministrator -c dbnode01 -e list alerthistory
データベース・ノードの例4: ExaCLIはdbnode01ノードにdbnodeadministratorユーザーとして接続し、認証に成功すると、commandFile
でコマンドを実行します。
$ exacli -l dbnodeadministrator -c dbnode01 -e @commandFile
ExaCLIではリモート・ノード上でDBMCLIおよびCellCLIコマンドを実行するため、ユーザーは、コマンドを実行する前に認証される必要があります。認証プロセスは、各ExaCLIセッションで実行されます。
有効なCookieが存在することで、ExaCLIユーザーは、各セッションでログインを要求されることなく、コマンドの実行が許可されます。Cookieは、リモート・ノードにより発行され、ExaCLIが実行されているホスト・マシンに格納される、ログイン資格証明を含むトークンです。リモート・ノードにより発行されたCookieは、24時間後に無効化されます。Cookieリポジトリは、Cookie jarと呼ばれます。
同じCookie jarを複数のリモート・ノードに接続する複数の同時ExaCLIセッションで使用でき、異なるログイン名を使用している場合でも可能です。たとえば、exadcliでは複数のExaCLIセッションを使用して複数のリモート・ノードに接続しますが、それらはすべて同じCookie jarを使用します。
Cookie jarは、OSユーザーの読取りおよび書込み権限付きで構成されています。その他の誰も、このファイルの読取り、書込みまたは実行ができません。
ExaCLIを使用するには、リモート・ノード上でユーザーを作成する必要があり、そのユーザーに対してそのユーザーにふさわしい権限を持つロールを割り当てる必要があります。
ユーザーおよびロールの作成は、DBMCLIまたはCellCLIを使用して直接リモート・ノード上でのみ実行できます。
セル・ノードの例: 次の例では、すべての権限を持つcelladministrator
というユーザーを作成します。
cellcli> create role administrator cellcli> grant privilege all actions on all objects all attributes with all options to role administrator cellcli> create user celladministrator password=* cellcli> grant role administrator to user celladministrator
セル・ノードの例: 次の例では、オブジェクトの詳細を表示する権限を持つcellmon
というユーザーを作成します。
cellcli> create role monitor cellcli> grant privilege list on all objects all attributes with all options to role monitor cellcli> create user cellmon password=* cellcli> grant role monitor to user cellmon
データベース・ノードの例: 次の例では、すべての権限を持つdbnodeadministrator
というユーザーを作成します。
dbmcli> create role administrator dbmcli> grant privilege all actions on all objects all attributes with all options to role administrator dbmcli> create user dbnodeadministrator password=* dbmcli> grant role administrator to user dbnodeadministrator
データベース・ノードの例: 次の例では、オブジェクトの詳細を表示する権限を持つdbnodemon
というユーザーを作成します。
dbmcli> create role monitor dbmcli> grant privilege list on all objects all attributes with all options to role monitor dbmcli> create user dbnodemon password=* dbmcli> grant role monitor to user dbnodemon
関連項目:
ユーザーおよびロールの管理の詳細は、『Oracle Exadata Storage Server Softwareユーザーズ・ガイド』を参照してください。
ExaCLIでは、DBMCLIおよびCellCLIと完全に同じコマンド構文がサポートされます。
すべてCellCLIコマンドがExaCLIを介して実行できるわけではありません。ExaCLIでは、次のコマンドはサポートされていません。
セル・サービスの再起動(ALTER CELLコマンドの「restart」オプション)
セル・サービスの起動(ALTER CELLコマンドの「startup」オプション)
セル・サービスの停止(ALTER CELLコマンドの「shutdown」オプション)
ユーザー管理コマンド(CREATE USER、ALTER USER、DROP USER)
ロール管理コマンド(CREATE ROLE、DROP ROLE、GRANT ROLE、REVOKE ROLE)
権限管理コマンド(GRANT PRIVILEGE、REVOKE PRIVILEGE)
CALIBRATE
DESCRIBE
HELP
次のセル属性の取得: LIST CELLコマンドの使用によるrsStatus
、cellsrvStatus
、msStatus
SET
SPOOL
START
ExaCLIとリモート・ノード上で動作している管理サーバー(MS)間のすべての通信は、httpsを介して行われます。セキュリティ証明書により、リモート・ノードはExaCLIに対して自身のアイデンティティを確認できます。管理サーバーは、httpsアクセス用のデフォルトの自己署名セキュリティ証明書とともにデプロイされます。オプションで、認証局(CA)により発行された別のセキュリティ証明書をアップロードできます。
信頼性のあるCA証明書は、ExaCLIが実行されているマシン上で次のコマンドを実行することでリストできます。最初の$
は、シェルのプロンプトです。
$ $JAVA_HOME/bin/keytool -list -v -keystore $JAVA_HOME/jre/lib/security/cacerts -storepass changeit
セキュリティ証明書がExaCLIによって警告なしで受け入れられるには、それが信頼できる認証局(CA)によって署名されている必要があります。
ExaCLIが信頼性のあるCAによって署名されたセキュリティ証明書を持っていないリモート・ノードに接続した場合、証明書を検証するようにユーザーに要求する警告メッセージが生成されます。検証されると、ExaCLIによりセキュリティ証明書が記憶され、後続のコマンドでユーザーが証明書の再検証を求められることはありません。すべてのセルは、インストール中または管理サーバー(MS)のデプロイメント中に、自己署名証明書を使用して自動的に構成されます。
自己署名セキュリティ証明書(非CA証明書)を受け入れる例:
$ exacli -l celladministrator --cookie-jar -c cellnode01 This connection is unsecure. You have asked ExaCLI to connect to cell cellnode01 securely. The identity of cellnode01 cannot be verified. Got certificate from server: CN=cellnode01,OU=Oracle Exadata,O=Oracle Corporation,L=Redwood City,ST=California,C=US Do you want to accept and store this certificate? (Press y/n)
データベース・ノードの自己署名セキュリティ証明書(非CA証明書)を受け入れる例:
$ exacli -l dbadministrator --cookie-jar -c dbnode01 This connection is unsecure. You have asked ExaCLI to connect to dbserver dbnode01 securely. The identity of dbnode01 cannot be verified. Got certificate from server: CN=dbnode01,OU=Oracle Exadata,O=Oracle Corporation,L=Redwood City,ST=California,C=US Do you want to accept and store this certificate? (Press y/n)
リモート・ノードでコマンドを実行するには、ExaCLIを使用する以外に、URLを使用することもできます。この場合も、「ExaCLIの概要」の説明に従って、ユーザー、ロールおよび権限を設定する必要があります。
URLの形式は次のとおりです。
https://remotenode:port/MS/RESTService/?cmd=command_to_run
リモート・ノードがセル・ノードの場合、ポートは443です。
リモート・ノードがデータベース・ノードの場合、ポートは7879です。
ブラウザでURLを送信すると、ブラウザによって、証明書に関する警告が表示されます。新しい証明書に関する警告である場合は、通常、その警告を許容できます。変更された証明書に関する警告である場合は、証明書が許容可能であることを確認する必要があります。
その後、ブラウザによって、ユーザー名およびパスワードが要求されます。
コマンドの結果は、プレーン・テキストで返されます。
同じセッションでさらにリクエストを送信した場合、セッションCookieの期限が切れないかぎり、ブラウザに証明書に関する警告が表示されることや、ユーザー名およびパスワードが要求されることはありません。
次の例では、list dbserver detailコマンドを実行します。
https://dbnode:7879/MS/RESTService/?cmd=list+dbserver+detail
次の例では、list cell detailコマンドを実行します。
https://cellnode:443/MS/RESTService/?cmd=list+cell+detail
RESTful形式でURLを指定することもできます。次に例を示します。
https://cellnode:443/MS/RESTService/celldisk/list?where=size>1g
curl
を使用してURLを実行することもできます。手順は次のとおりです。
サーバーの証明書をダウンロードして格納します。
( openssl s_client -showcerts -connect remote_node:port < /dev/null | openssl x509 -outform PEM > mycertfile.pem ) >& /dev/null
これは1回のみ行う必要があります。有効な証明書が指定されないかぎり、curl
は続行されません。
ユーザー名とパスワードを指定します。
curl -u username:password -c cookiejar --cacert mycertfile.pem 'https://remote_node:port /MS/RESTService/login'
コマンドを実行します。
データベース・ノードの例:
curl -b cookiejar --cacert mycertfile.pem 'https://remote_node:port/MS/RESTService/?cmd=list+dbserver+detail'
セル・ノードの例:
curl -b cookiejar --cacert mycertfile.pem 'https://remote_node:port/MS/RESTService/?cmd=list+cell+detail'