DB筐体内での確認事項
サービスが動いているか確認
そもそもOracleサービスが起動しているか確認します。
Windowsの場合の手順になりますが、サービス画面を開き(OSの検索窓でサービスで検索するか、Windowsキー+Rで出てきた検索窓でsc.mscと検索する)、下記のOracleサービスが動いているか確認します。
もし起動中になっていなかったらサービスを右クリックして起動させてください。
DBがオープンしているか確認
コマンドプロンプトを開き、sqlplusでDBにつなぎます。
DBの起動状態を確認します。
11g以前の手順
起動状態を確認します
sqlplus / as sysdba もしくは sqlplus sys/{syspassword} as sysdba
select host_name, instance_name, status from v$instance;
HOST_NAME INSTANCE_NAME STATUS
---------- ---------------- ------------
db01 orcl MOUNTED
もしSTATUSがOPENになっていなかったら、DBをOpenします。
STARTUP
12c以降の手順
起動状態を確認します
show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 CDB$SEED READ ONLY NO
3 PDB01 MOUNTED
もしSTATUSがOPENになっていなかったら、DBをOpenします。
alter pluggable database all open;
tnsnames.ora、lisner.oraの記載内容を確認
12c以降でPDBにつなごうとしても次のようなエラーでつながらない場合はtnsnames.oraとlisner.oraを確認します。
ORA-12514: TNS: リスナーは現在、接続識別子でリクエストされているサービスを認識していません(TNS-12514)
tnsnames.oraは下記のような形式で書かれています。hostnameが正しいか、PDB名が正しいか確認してください。
場所:{ORACLE_HOME}\network\admin\tnsnames.ora
{接続したいサービス名} =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST ={hostname})(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME ={PDB名/SID})
)
)
lisner.oraは下記のような形式で書かれています。hostnameが正しいか確認してください。
場所:{ORACLE_HOME}\network\admin\lisner.ora
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = {hostname})(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
DBが別筐体にある場合の確認事項
DBインスタンスが起動しているか確認
そもそもDBインスタンスが起動しているかを確認します。
また上記の手順のようにcが動いていて、DB筐体内ではDBが使える状態かも確認します。
DBへのアクセスが許可されているか確認
pingが通るか、telnetができるか、セキュリティグループやFWで遮断されていないか確認します。
tnsnames.oraの記載内容を確認
まず、下記のsqlで接続できるか確認します。
sqlplus system/{system_password}@{db_ip}:1521/{pdb_name}
例) sqlplus system/password@192.168.145.25:1521/PDB
できなければDBでLisnerが起動していないなどの原因が考えられるので、上記のようにDB筐体でOracleサービスが動いてるか確認してください。
これを下記のようにサービス名だけで接続したい場合、tnsnames.oraへの記載が必要になります。
tnsnames.oraは{ORACLE_HOME}/network/admin/tnsnames.oraにあります。
次のような記載を追加してください。
{接続したいサービス名} =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST ={dbのip})(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME ={PDB名/SID})
)
)
例:
REMOTEPDB =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.129.12.24)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = PDB01)
)
)
そうすると、下記のようにつなぐことができます。
sqlplus system/{system_password}@REMOTEPDB
Windows向けに書いていますがLinuxでもやること自体そんなに変わらないはず
(ファイルの場所とかコマンドは違いますが)