web-dev-qa-db-ja.com

Oracle DBFファイルが作成されるデフォルトの場所を見つける方法は?

Oracle Databaseで新しい表領域を作成する際、ユーザーは使用するDBFファイル名を入力する必要があります。次に、DBFファイルが特定の場所に作成されます。

ユーザーは、DBFファイルを作成するパスを指定することもできます。

DBFファイルのデフォルトの場所を取得する方法を見つける必要があります。

私はSQLクエリを使用してMSSqlでそれを行う方法を知っています:

select substring(physical_name, 1, charindex(N'master.mdf', lower(physical_name)) - 1) from master.sys.master_files where database_id = 1 and file_id = 1;

しかし、Oracleでそれを行う方法がわかりません。私はいくつかのことを試しました:

  • all_directoriesでクエリを実行しました-そこに情報が見つかりませんでした
  • v$datafileビューを見てください-このビューと他のビューはデータベース管理者のみがアクセスできることがわかりました

また、いくつかの制限があります。

  • Oracle Databaseは、オペレーティングシステムが異なる別のマシンにインストールされている可能性があります。
  • 私のアプリケーションは、管理者ではないユーザーでデータベースに接続する場合があります。
  • できればSQLクエリを使用して実行する必要があります。

どんな助けでも大歓迎です。

4
Michael

DB_CREATE_FILE_DESTは、Oracleが管理するデータファイルのデフォルトの場所を指定します(データベースリファレンスの そのエントリ を参照)。

次のSQLクエリを使用してその値を取得できます。

select value from v$parameter where name = 'db_create_file_dest'

v$parameterビューにアクセスするには、ユーザーは少なくともSELECT_CATALOG_ROLEロールを必要とします。

2
Marco Baldelli

デフォルトでは、.dbfファイルは次のような場所に保存されます。

/u01/app/Oracle/product/__VERSION__/__DB_NAME__/dbs

ここで、__VERSION__は「11.0.1.1」のようなもので、__DB_NAME__はDBです。

4
daniele daniele

デフォルトのデータファイルの場所を決定するために、次のクエリを使用しています。

SELECT DISTINCT SUBSTR (file_name,
                        1,
                        INSTR (file_name,
                               '/',
                               -1,
                               1))
  FROM DBA_DATA_FILES
 WHERE tablespace_name = 'SYSTEM'

すべてのデータファイルが同じディレクトリにインストールされているため、MEで機能します。

4
Cyryl1972

システムユーザーでこの文を使用します。

  Select * from dba_data_files ;

enter image description here

3
nekperu15739

Oracleにはデータファイルの実際のデフォルトの場所はありません。最も近いのはOracle_HOMEの下のディレクトリです。思い出すと(現時点では、これを確認するためのOracle DBにアクセスできません)、ディレクトリ構造はOSとバージョンによってわずかに異なります。

デフォルトがない理由は、通常、競合を避けるためにデータを物理ドライブ全体に分散させたいためです。多くの場合、ほとんどの場合ヒットするテーブルもあれば、アクセス頻度がはるかに低いテーブルもあります。少なくとも、一時的なものとやり直し/やり直しをデータから分離しておく必要があります。

1
Mark Wagoner

表領域のデフォルトの場所は、

show parameter DB_CREATE_FILE_DEST;

パラメータは次のように変更できます

alter system set DB_CREATE_FILE_DEST='/ORCL/u02/app/Oracle/oradata/ORCL';
0
arve0

これを試して:

select substr(name, 1, instr(name, 'USER') - 1) prefix from v$datafile where name like '%USER%'; 
0
Andrei Z