Oracleのデータベースのリストを表示する方法は?


33

MySQL SHOW DATABASESステートメントに相当するものはありますか?

クラスタ内のデータベースを見つけることは可能ですか?つまり、他のシステムのネットワーク上にデータベースが存在しますか?

Oracleインストールに存在するファイルを分析して同じものを見つけることはできますか?

Oracleシステムへの完全なアクセス資格情報がある場合、存在するすべてのデータベースを列挙するにはどうしますか?


4
また、MySQLとOracle Databaseには用語の不一致があることに注意してください。アーキテクチャの観点から見ると、Oracleにはtable-> schema-> databaseがあり、同時にtable-> tablespace-> databaseもあります。MySQLには単純にテーブル->データベースがあります。したがって、実際にはOracleスキーマリスト(テーブルの場合はSQL名前空間)またはOracleテーブルスペースリスト(テーブルの場合はOSファイルのグループ)を実際に検索しています。
クバンチク

回答:


22

MySQL SHOW DATABASESステートメントに相当するものはありますか?

そのようなことはない。マシンのリスナー(lsnrctl status)にクエリを実行して、そこに登録されているサービスを確認できますが、データベースに1対1でマッピングされません(同じマシンに複数のリスナーが存在する場合があります)。それ以外の場合、一般的に使用されるツールは1つのデータベースインスタンスに接続し、インスタンスは1つのデータベースに属します。

Oracle RACクラスタについて説明している場合、各インスタンスはそのピア(同じデータベースにサービスを提供する他のインスタンス)を認識しており、gv$instanceビューを使用してそのデータベースに対して現在開始されている他のインスタンスを見つけることができます。
このcrsctlユーティリティを使用して、クラスターに登録されているサービス(データベースを含む)とそのステータスを一覧表示することもできます。
別のベンダーのクラスタリングソフトウェアについて話している場合、これらすべての種類のリソース管理ユーティリティがクエリを実行できると確信しています。

マシンの束だけについて話している場合、いいえ、ネットワーク上のすべてのデータベースを列挙する100%信頼できる方法はありません。

アクティブな(つまり、開始された)データベースを見つけるには*_pmon_*、UNIX(データベースインスタンスごとに1つ)でプロセスを探し、WindowsでOracleサービスを探します。

Oracleデータベースソフトウェアのインストールを見つけるには/etc/oratab、Unixをご覧ください。これには、ORACLE_HOMEインストールされているすべてのが含まれている必要があります。$ORACLE_HOME/dbsfor spfile<SID>.oraおよび/またはinit<SID>.orafilesの中のそれらのそれぞれの中を見ることができます-データベースごとに一つがあります。

oratab以下のWindowsレジストリキーにある情報と同等のものを見つけることができると思いますが、HKEY_LOCAL_MACHINE\SOFTWARE\ORACLEその構造はわかりません。)

もちろん、インストール時にすべてのデータベースをOEM(Enterprise Manager)サーバーに登録している場合は、そこに完全なリストを見つけることができます。


12

Oracleにはスキーマ以外のデータベースはありません。

SELECT USERNAME FROM ALL_USERS ORDER BY USERNAME; 

またはこのようなもの:

SELECT TABLESPACE_NAME FROM USER_TABLESPACES;

2
一般に、表領域はスキーマにリンクされていません。
マット

2
全てのユーザー?USER_TABLESPACES?
クバンチク

「MySQL SHOW DATABASESステートメントに相当するものはありますか?」その質問に答えようとしています。知らないと言ってはいけない
DevYudh

1
@DevYudh:Oracleのテーブルスペースは、MySQLの「データベース」とはまったく異なるものです。正しい、2番目のクエリは平野間違っている場合は、最初のクエリ
a_horse_with_no_name

11

簡単に言えば、MySQLの「データベース」またはOracleの「クラスター」に直接的な類似性はありません。最も近い一致は「スキーマ」ですが、それでも非常に異なります。

これは明らか、プラグ可能なデータベースの導入により12c変更される予定です。

データベース操作をユーザーのコンテンツから完全に分離することは、従来のデータベースアーキテクチャからの大きな変化です。Oracle 11gとそのすべての先行モデルは、一度に1つのデータベースしか実行できませんでした、とKyteは言いました。組織が単一のサーバーで複数のデータベースを実行する場合、データベースごとに1つずつ、Oracle 11gの複数のインスタンスを実行する必要があります。名前が示すように、プラガブルデータベースでは、複数のテナントデータベースをOracle 12cの1つのコピーの下で実行できます。


素晴らしい、より複雑、より多くの仕事のセキュリティ
...-クバンチク

6

* nixの将来のブラウザに対する答えは次のようになると思います。

猫/ etc / oratab


3

ASMに接続して、データベースクライアントを確認するだけです。

set pages 999 lines 120
col SOFTWARE_VERSION for A15
col INSTANCE_NAME for A20
col DB_NAME for A20 trunc
select INSTANCE_NAME, DB_NAME, STATUS, SOFTWARE_VERSION as "version"
from  V$ASM_CLIENT;

1
これは、ASMが使用されていることを前提としています!ファイルシステムまたはSANに保存されているデータベースはどうですか?
コリン 'ハート

3

Oracle 12にPluggable Databases(推奨)がある場合、次のことができます。

SELECT PDB_ID, PDB_NAME, STATUS FROM DBA_PDBS ORDER BY PDB_ID;

0

ホストの再起動後に自動的に開始されるデータベースのリストを取得するスタンドアロンデータベースの場合:

cat /etc/oratab | grep -i ":y" | grep -v "^#"

または、すべてのデータベースのリストを取得するには:

cat /etc/oratab | grep -v "^#"

RACデータベースの場合、次の方法が役立ちます。

crsctl stat res -t | grep "\.db"

また、既に述べたように、MySQLのデータベースはOracleのデータベースと同じではありません。Oracleでは、よりスキーマに近くなります。つまり、ユーザーのオブジェクトのコンテナという名前です。スキームリストを取得するには、次のSQLステートメントを使用できます。

select username from dba_users order by 1;

または、システム関連のスキームではないリストを取得するには(バージョン12c以降のOracle RDBMSで利用可能):

select username from dba_users where ORACLE_MAINTAINED='N' order by 1;
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.