データベース・ファイルのヘッダ・ページ内にあるユーザ指定の情報を保存します。
文字列 (最大 128 バイト)
空の文字列
PUBLIC グループのみに設定できます。すぐに有効になります。DBA 権限が必要です。
データベース・ファイルのヘッダ・ページ内の情報を保存しておき、アプリケーションから直接ファイルを読み込んで情報を抽出できます。このページはシステム DB 領域ファイルのヘッダに保存されます。OEM 文字列に対して 128 バイトを超える値を指定すると、エラーが返されます。
スキーマ・バージョン、アプリケーション名、アプリケーションのバージョンなどの情報は、保存しておくと役に立つことがあります。また、アプリケーションがデータベース・ファイルを使用する前に検証のために読み込む文字列を保存することによって、アプリケーションはデータベースを起動しなくても OEM 文字列によってデータベース・ファイルがそのアプリケーションに関連付けられているかどうかを確認できます。つまり、アプリケーションを設計するときに、OEM 文字列を使用してデータベース・ファイルがそのアプリケーション用であることを検証するプロセスを組み込むことができます。さらに、ユーザに表示するメタデータを抽出することもできます。
oem_string をシステム DB 領域ファイルのヘッダ内に設定するには、次の文を実行します。
SET OPTION PUBLIC.oem_string=user-specified-string; |
user-specified-string の値は、ISYSOPTIONS システム・テーブルとシステム DB 領域ファイルのヘッダの両方に保存されます。この文字列が SET OPTION 文に渡されるときには変換が行われないため、文字列を必要な文字セットで定義してから SET OPTION 文に指定する必要があります。文字列を必要な文字セットに変換するには、CSCONVERT 関数を使用します。
oem_string の値を問い合わせるには、以下の方法があります。
oem_string 接続プロパティを使用する。
SELECT CONNECTION_PROPERTY( 'oem_string' ); |
SYSOPTION システム・ビューを使用する。
SELECT setting FROM SYSOPTION WHERE "option" = 'oem_string'; |
データベース・システム DB 領域ファイルを開きます。
このファイルの最初のページをバッファに読み込みます。
バッファから OEM 文字列の前後にある 2 バイトのプレフィクスとサフィックスを検索します。
プレフィクスとサフィックスは、sqldef.h にそれぞれ DB_OEM_STRING_PREFIX と DB_OEM_STRING_SUFFIX として定義されています。これら 2 つの文字列に囲まれたすべてのバイトがデータベースに定義された OEM 文字列です。
SQL Anywhere には 2 つのサンプル・プログラムが付属しており、oem_string ディレクトリに保存されています。
dboem.cpp は、OEM 文字列を抽出してデータベース・サーバ・メッセージ・ウィンドウに出力する方法を示す C プログラムです。
dboem.pl は、OEM 文字列を抽出して PERL スクリプト内 の stdout に出力する方法を示します。
アプリケーションからデータベース内の OEM 文字列に直接書き込みを行うことはできません。そのようにすると、データベースのヘッダ・ページが破損します。
Windows では、サーバがこのデータベース・ファイルをロードした場合、アプリケーションからこのファイルを直接読み込むことはできません。データベース・サーバは、このファイルに排他ロックを設定します。これに対し、サポートされる UNIX プラットフォームでは、読み込みパーミッションのあるアプリケーションであれば、このファイルをいつでも直接読み込むことができます。ただし、OEM 文字列に対する変更は、直ちにファイルに反映されないことがあります。チェックポイントを発行すると、データベース・サーバがページ 0 をディスクにフラッシュするため、現在の OEM 文字列値がファイルに反映されます。
OEM 文字列を変更してから次のチェックポイントまでの間にデータベース・サーバで障害が発生すると、ファイルのヘッダに新しい OEM 文字列値が反映されないことがあります。新しい OEM 文字列値は、データベースのリカバリが完了した後で正しく設定されます。
次の例は、データベース・ファイルに関する情報を示す OEM 文字列を暗号化し、データベース・ヘッダ・ファイルに保存します。
BEGIN DECLARE @v VARCHAR(100); SET @v = BASE64_ENCODE( ENCRYPT( 'database version 10', 'abc' ) ); EXECUTE IMMEDIATE 'SET OPTION PUBLIC.oem_string = ''' || @v || ''''; END; |
OEM 文字列の値を取得するには、次の文を使用します。
SELECT DECRYPT( BASE64_DECODE( CONNECTION_PROPERTY( 'oem_string' ) ),'abc' ) |
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |