Oracle DBへの接続でエラーになることが多いので覚書。12c対象
##データベースの名前
###名前の整理
名前に関する項目 | 説明 |
---|---|
データベース識別子(DBID) | RMANでDBの識別に利用。スタンバイDBはプライマリDBと同じID。 |
DB名(DB_NAME) | RACの各インスタンスは同じデータベース名 |
DB_UNIQUE_NAME | 通常DB_NAMEと同じ。プライマリDBとスタンバイDBはDB_NAMEを変えずこれを変更。 |
ドメイン名(DB_DOMAIN) | RACの場合必須(と書いてあるが構築すると空)。 |
インスタンス名(INSTANCE_NAME) | シングルDBの場合通常DB名と同じ。RACの場合DB_NAMEと異なる。 |
システム識別子(SID) | 通常はインスタンス名と同じだが別にすることも可能。ローカル接続で利用。サーバ内でユニーク。 |
ORACLE_SID | ローカルDB接続時のSIDを設定しておく環境変更。(但し「. oraenv」コマンドではデータベース名を入力するため、接続時はインスタンス名に変更する必要がある。また、PDB名は設定不可) |
サービス名(SERVICE_NAMES) | リスナ経由接続先を指定する名前。デフォルト(通常変更しない)はDB_UNIQUE_NAME.DB_DOMAIN。PDBはPDB名.DB_DOMAIN。(複数登録可能で、例えば、RACでサービス名により稼働インスタンスを制限可能) |
NET_SERVICE_NAME | ネットサービス名、TNSサービス名、接続識別子 |
GLOBAL_NAME | グローバル・データベース名。DBLINKで利用。(使ったことないので下記参照先) |
###名前の調べ方
SQL> select DBID from v$database;
SQL> show parameter db_name
SQL> show parameter db_unique_name
SQL> show parameter db_domain
SQL> show parameter instance_name
-- SIDは/etc/oratab参照。SERVICE_NAMESはリスナに登録
SQL> SELECT * FROM GLOBAL_NAME;
##接続方法
###sqlplus
接続タイプ | コマンド形式 | 説明 |
---|---|---|
ローカル | ORACLE_SID=システム識別子 sqlplus / as sysdba | OS認証によるsys接続 |
〃 | ORACLE_SID=システム識別子 ユーザ名/パスワード[ as sysdba] | パスワード認証による接続 |
リモート | sqlplus ユーザ名/パスワード@ネットサービス名 | tnsnames.oraに登録された名前で接続 |
〃 | sqlplus ユーザ名/パスワード@ホスト[:ポート][/サービス名] | listenerに登録されているサービス名で接続。 |
###JDBC thin接続
接続タイプ | コマンド形式 | 説明 |
---|---|---|
リモート | jdbc:oracle:thin:@ホスト:ポート:インスタンス名 | インスタンス名で接続 |
〃 | jdbc:oracle:thin:@//ホスト:ポート/サービス名 | サービス名で接続。(//は省略可だがエラーになるケースもあるのでつけておく) |
###補足
- 接続タイプ
- ローカル接続はリスナを経由せずDBに接続する。内部接続、BEQ接続とも言う。
- リモート接続はリスナを経由する。ホスト、ポートは(SCAN)リスナが待機している場所を指定。ホストはIPも可。ポート省略時1521
- RACの場合
- サービス名にはDB_UNIQUE_NAME,DB_UNIQUE_NAME.DB_DOMAINの両方が動的に登録
- SCANリスナは生きているインスタンスにバランスして接続するため通常こちらに接続
- インスタンスを固定して接続したい場合、(ローカル)リスナに接続する
- クライアントのtnsnames.oraで接続先インスタンスを制御したい場合も(ローカル)リスナを設定
###参照
###更新履歴
- 2020/02/13 SID、ORACLE_SID、ローカル接続の説明を修正