C# コードからオラクルの oradata フォルダを取得または推測することは可能ですか?
例: D:\oracle\product\10.2.0\oradata
私の目的は、テーブルスペースを自動的に作成するインストーラーを作成することですが、テーブルスペースの場所をユーザーに尋ねる必要があります。しかし、推測が正しい場合にユーザーが何もする必要がないように、テキスト フィールドに「推測された」値を事前に入力できると便利です。
C# コードからオラクルの oradata フォルダを取得または推測することは可能ですか?
例: D:\oracle\product\10.2.0\oradata
私の目的は、テーブルスペースを自動的に作成するインストーラーを作成することですが、テーブルスペースの場所をユーザーに尋ねる必要があります。しかし、推測が正しい場合にユーザーが何もする必要がないように、テキスト フィールドに「推測された」値を事前に入力できると便利です。
環境変数 ORA_HOME は信頼できません (とにかくサーバー上でのみ有効です)。
明確な値を取得する唯一の方法は、V$PARAMETER ビューを使用することです。
select value
from v$parameter
where name = 'db_create_file_dest';
これを設定する必要がある場合、私は100%ではありませんが。
V$PARAMETER は通常、通常のユーザーには読み取れません。しかし、テーブルスペースを作成しようとしているので、その権限をユーザーに付与することは問題ではないと思います。
ただし、データファイルのディレクトリを指定せずに表領域を作成できます。その場合、テーブルスペースは db_create_file_dest で指定された場所に作成されます。
マニュアルから:
ファイル名には、パスのプレフィックスを含めることができます。このようなパス接頭辞を指定しない場合、データベースは、プラットフォームに依存するデフォルトの格納場所のパス接頭辞を追加します。
(私のものを強調)
これは、Oracle データ ディクショナリでデータ ファイルの場所をクエリすることで実行できますが、異なるテーブルスペースが異なる場所に格納されている場合があります。
また:
データベースが ASM または Oracle Managed Files (私の個人的な好み) を使用するように構成されている可能性があることを忘れないでください。その場合、データファイルの作成場所を Oracle に伝えることがより困難または不要になります。
表領域の使用は多くの場合 DBA ポリシーによって管理されるため、表領域の作成はインストーラの外で行うことを強くお勧めします。