統合データベースをメッセージサーバとして使用することは可能ですが、このチュートリアルでは、別のデータベースサーバを使用してメッセージサーバを実行します。こうすることにより、この 2 つのデータベースサーバ間でメッセージを処理するために実行される作業の量が分散されます。また、統合データベースへの HTTP アクセスを開放していないため、セキュリティのレベルが上がります。
前提条件
SYS_REPLICATION_ADMIN_ROLE システムロールが必要です。
c:\tutorial\msgsrv ディレクトリから次のコマンドを実行して、メッセージサーバデータベース (msgsrv) を作成します。
dbinit -dba DBA,sql msgsrv.db |
メッセージサーバを起動します。
dbeng16 -n msgsrv c:\tutorial\msgsrv\msgsrv.db -xs http(port=8033) |
これは、リモートデータベースからの HTTP 要求を受信し、c:\tutorial\messages ディレクトリに存在するメッセージファイルにアクセスするデータベースサーバであるため、コマンドラインには -xs http(8033) が必要です。データベースサーバが起動した時点では Web サービスは定義されていませんが、このレッスンで作成されます。その上、パーソナルデータベースサーバだけが起動しているため、このコンピュータ上の SQL Remote プロセスだけが HTTP を使用してメッセージサーバと通信できます。生産環境では通常、他のコンピュータ上の SQL Remote プロセスも Web サービスにアクセスできるよう、ネットワークサーバを使用するはずです。 -xs の使用の詳細については、-xs データベースサーバオプションを参照してください。
別のメッセージサーバを作成する場合、統合データベースのスキーマの多くをそのメッセージサーバにコピーする必要があります。とりわけ定義されたリモートユーザとアドレスについての情報などのコピーが必要です。これは手動で行うことができますが、このタスクを行うもっとも簡単な方法は、dbunload ユーティリティを使用して、統合データベースと同じスキーマで新しいデータベースを作成することです。
dbunload -n -xx -ac "SERVER=msgsrv;DBN=msgsrv;UID=DBA;PWD=sql" -c "SERVER=cons;DBN=cons;UID=DBA;PWD=sql" |
dbunload コマンドで使用されるオプションは、次のことを行います。
-n スキーマだけがアンロードされ、統合データベースのデータはまったくメッセージサーバに追加されないことを示します。
-xx 外部アンロードと再ロードを実行します。これは、両方の関連するデータベースがすでに稼働している場合に必要です。
-ac "SERVER=msgsrv;DBN=msgsrv;UID=DBA;PWD=sql" アンロードの送信先接続を定義します。このレッスンでは、メッセージサーバです。
-c "SERVER=cons;DBN=cons;UID=DBA;PWD=sql" アンロードの送信元接続を定義します。このレッスンでは、統合データベースです。
Interactive SQL を使用して、SYS_REPLICATION_ADMIN_ROLE システムロールを持つユーザとしてメッセージサーバデータベース (msgsrv) に接続します。
dbisql -c "SERVER=msgsrv;DBN=msgsrv;UID=DBA;PWD=sql" |
レッスン 1 では、パブリッシャ (cons) とリモートユーザ (rem) のパスワードを作成しませんでした。そのため、これらのユーザはいずれも統合データベースにはアクセスできません。メッセージサーバではこれらのユーザにパスワードが必要です。なぜなら、リモートユーザからの HTTP 要求では、リモートデータベースのパブリッシャおよびメッセージサーバでの認証用に提供されたパスワードが使用されるためです。メッセージサーバデータベース (msgsrv) で次の文を実行して、パブリッシャとリモートユーザのパスワードを定義します。
GRANT CONNECT TO cons IDENTIFIED BY cons; GRANT CONNECT TO rem IDENTIFIED BY rem; |
データベースが最初に初期化されたとき、リモートユーザからの HTTP 要求を受け付けるのに必要な Web サービスはどれも定義されておらず、メッセージファイルが格納されているディレクトリにデータベースサーバがアクセスするのを許可する定義はありません。これらのオブジェクトの作成は、誰がすべてのオブジェクトを所有するのかを指定するオプションのパラメータを持つ sr_add_message_server ストアドプロシージャの使用により自動化されています。メッセージサーバデータベース (msgsrv) に次の文を実行して、メッセージサーバに必要なすべてのオブジェクトを定義し、すべてのオブジェクトが cons ユーザによって所有されていることを指定します。
CREATE ROLE FOR USER cons; SET REMOTE http OPTION cons.root_directory='c:\\tutorial\\messages'; CALL sr_add_message_server( 'cons' ); COMMIT; |
詳細については、sr_add_message_server システムプロシージャを参照してください。
Interactive SQL との接続を切断します。
![]() |
DocCommentXchange で意見交換できます
|
Copyright © 2013, SAP AG or an SAP affiliate company. - SAP Sybase SQL Anywhere 16.0 |