web-dev-qa-db-ja.com

SQLPLUSエラー:ORA-12504:TNS:リスナーにCONNECT_DATAのSERVICE_NAMEが与えられませんでした

OracleからSQLPLUSをダウンロードしました。

http://www.Oracle.com/technetwork/topics/winx64soft-089540.html

Basic LiteおよびSQL * Plus

次に、SQL * Plusを起動しました。

c:\Program Files\Oracle\instantclient_12_1>sqlplus /nolog

SQL*Plus: Release 12.1.0.2.0 Production on Wed Apr 15 15:25:36 2015

Copyright (c) 1982, 2014, Oracle.  All rights reserved.

データベースに接続しようとしました:

connect user\password@hostname

エラーメッセージを受け取りました:

ERROR:
ORA-12504: TNS:listener was not given the SERVICE_NAME in CONNECT_DATA

私は何が欠けていますか?

Jakubによって提案されたクエリを実行しました。

SQL> select sys_context('USERENV','SERVICE_NAME') from dual;

SYS_CONTEXT('USERENV','SERVICE_NAME')
--------------------------------------------------------------------------------

SYS$USERS

SQL> select sys_context('USERENV','SID') from dual;

SYS_CONTEXT('USERENV','SID')
--------------------------------------------------------------------------------

877

SQL>
17
gbritton

サービス名がありません:

 SQL> connect username/password@hostname:port/SERVICENAME

[〜#〜] edit [〜#〜]

他のコンピューターからデータベースに接続できる場合は、そこで実行してみてください。

select sys_context('USERENV','SERVICE_NAME') from dual

そして

select sys_context('USERENV','SID') from dual
18
jakub.petr

同じ状況でまったく同じ問題に遭遇しました。 tnsnames.oraファイルがないため、コマンドラインでEasy Connection Identifier形式のSQL * Plusを使用したかった。この問題を次のように解決しました。

SQL *Plus®ユーザーズガイドおよびリファレンス に例を示します。

sqlplus hr @\"sales-server:1521/sales.us.acme.com \"

次の2つの重要な点に注意してください。

  1. 接続識別子が引用されます。次の2つのオプションがあります。
    1. SQL * Plus CONNECTコマンドを使用して、引用符付き文字列を渡すことができます。
    2. コマンドラインで接続パラメーターを指定する場合は、引用符の前にバックスラッシュをシールドとして追加する必要があります。 SQL * Plusに引用符を渡すようにbashに指示します。
  2. サービス名は、DBAが設定したとおりにFQDN形式で指定する必要があります。

既存の接続を介してサービス名を検出するためのこれらの良い質問を見つけました: 12 。たとえば、次のクエリを試してください。

SELECT value FROM V$SYSTEM_PARAMETER WHERE UPPER(name) = 'SERVICE_NAMES'
14
alexeionin

ちょっとした観察:conn usr\passについて言及し続けていますが、これはタイプミスですよね?それはconn usr/passでなければなりません。それとも、UnixベースのOSでは違いますか?

さらに、念のため:tnsnamesを使用する場合、ログイン文字列は、このトピックを開始したログインメソッドを使用する場合とは異なります。

tnsnames.oraは$ Oracle_HOME $\network\adminにある必要があります。これは、接続しようとしているマシン上のOracleホームであるため、この場合はPCです。複数のOracle_homeがあり、1つのtnsnames.oraのみを使用する場合は、環境変数tns_adminを設定し(たとえば、TNS_ADMIN = c:\ Oracle\tnsを設定)、そのディレクトリにtnsnames.oraを配置できます。

元のログオン方法(usr/[email protected]:port/servicename)は常に機能するはずです。これまでのところ、ポート番号を除くすべての情報を持っていると思います。ポート番号は、DBAが提供できると確信しています。それでもこの方法が機能しない場合は、クライアントからサーバーのIPアドレスが利用できないか、ファイアウォールの問題(特定のポートのブロック)、またはOracleまたはSQL * Plusに(直接)関係のない何かがあります。

えっ!よろしく、Remco

0
Remco