こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Oracle12cでユーザのSQLPLUSログイン

基本的な質問ですみません。Oracle 12cを初めて使うのですが、すごく単純に、ユーザを作成し、そのユーザでデータベースオブジェクト(テーブルなど)を作成する拡張子が.sqlのスクリプトを流したいです。

11gまでの場合、システムユーザでCREATE USERしたのちに、コマンドプロンプトを立ち上げて
C:\Scripts> SQLPLUS <USER>/<PASSWORD> @createtables.sql
とするだけで良かったと思います。

今回、12cではユーザの考え方が変わっており、CDBとPDBを作成しました。
> SQLPLUS /NOLOG
SQL> CONN SYS AS SYSDBA
(上記のようにローカル接続するとCDBに接続される)

SQL> ALTER SESSION SET CONTAINER=PDB1; // PDBへ移動
SQL> SHOW CON_NAME // 念のため現在接続中のPDBの名前確認
SQL> STARTUP;
(これでマウント状態だったPDB1がOPENしてREAD WRITEになる)

この状態でCREATE USER文を実行してPDB1上でユーザを作成。

ここからなんですが、PDBやCDBへのログイン方法はわかたのですが、PDB上で作成したユーザにはどのようにしてログインするのでしょうか? ログインしてテーブル作成をしたいです。また、テーブル作成のスクリプト文(.sql)があるのでそれを流したい場合は、コマンドプロンプトからどのように実行すればよいでしょうか?

基本的な質問で恐縮ですが、宜しくお願いします。

投稿日時 - 2014-05-19 15:57:52

QNo.8601840

困ってます

質問者が選んだベストアンサー

こんにちわ。

> ORA-01017: ユーザー名/パスワードが無効です。ログオンは拒否されました。
上のtnsnames.ora の設定は、CDB に接続するためのものです。
新しい接続文字列で、SERVICE_NAME にPDB名を指定したものを作成して
試してみて下さい。

投稿日時 - 2014-05-20 21:29:53

お礼

すみません、tnsnames.oraに以下のように追記しました。
LISTENER_ORCL =
(ADDRESS = (PROTOCOL = TCP)(HOST = myhost.myCo.com)(PORT = 1521))


ORACLR_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
(CONNECT_DATA =
(SID = CLRExtProc)
(PRESENTATION = RO)
)
)

ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = myhos.myCo.com)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)

PDB1 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = myhos.myCo.com)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = pdb1)
)
)

上記のPDB1 = のところから追記しています。これで合っていますでしょうか?

次に、どのようにしてSQLPlusで接続できるのでしょうか?コマンドプロンプトから
C:\Users\Test> sqlplus user1/user1
C:\Users\Test> sqlplus user1/user1@PDB1
など試していますがエラーになります。。

投稿日時 - 2014-05-26 17:35:50

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

こんにちわ。

> 上記のPDB1 = のところから追記しています。これで合っていますでしょうか?
VMware 上のLinux 環境に、Oracle12c をセットアップした環境があるので
確認してみました。
特にtnsnames.ora の設定は問題無いようです。

接続文字列を指定してSQL*Plus を実行した時のエラーも、ORA-1017 でしょうか?
であれば、PDB に作成したユーザのパスワードが違っている事が考えられます。
Oracle11g 以降では、sec_case_sensitive_logon がDefault でTrue となっています。
このパラメータがTrue に設定されていると、パスワードの大文字/小文字を厳密に区別します。
ユーザのパスワードを再設定して確認してみてはどうでしょうか?

投稿日時 - 2014-05-27 10:03:37

お礼

すみません。

一回Oracleをシャットダウンした場合、CDBを起動後に(自分で自動起動にしておかない限り)PDBを起動しないと、マウント状態のままでした。大変失礼しました。

起動後に接続を試したところ、問題なく接続できました。ちなみに大文字、小文字のどちらでも成功しました。

C:\Users\Test> sqlplus user1/user1@PDB1
C:\Users\Test> sqlplus user1/user1@pdb1

有難うございました。

投稿日時 - 2014-05-27 15:05:57

ANo.1

こんにちわ。

> PDBやCDBへのログイン方法はわかたのですが、PDB上で作成したユーザにはどのようにしてログインするのでしょうか?

tnsnames.ora に接続文字列を書いてSQL*Net 経由で接続すれば、普通に接続できますょ。

投稿日時 - 2014-05-19 21:51:44

補足

tnsnames.oraには既に接続文字列が以下のようにあるのですが、接続方法が間違っているのでしょうか?

LISTENER_ORCL =
(ADDRESS = (PROTOCOL = TCP)(HOST = myhost.myCo.com)(PORT = 1521))


ORACLR_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
(CONNECT_DATA =
(SID = CLRExtProc)
(PRESENTATION = RO)
)
)

ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = myhos.myCo.com)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)

この状態で、コマンドプロンプトを起動し、
C:\Users\Test> sqlplus user1/user1@ORCL
と実行すると、

ERROR:
ORA-01017: ユーザー名/パスワードが無効です。ログオンは拒否されました。

となります。user1はPDB上で作成したユーザです。パスワードもここではuser1としています。

投稿日時 - 2014-05-20 16:35:59

あなたにオススメの質問