私はSQL Serverユーザーです。
私はOracle(ほとんど使用しない)を使用しているプロジェクトにいます。ODBC接続を作成して、MS Accessを介していくつかのデータにアクセスできるようにする必要があります。 「ネット構成ユーティリティ」でリスナーと呼ばれるものの構成を許可するようです。「ローカルネットサービス名の構成」も行う必要があると思います。 ITサポートからODBC接続をセットアップするための情報が提供されました。考えられるすべての組み合わせを試しました。 Oracleサーバーデータベースへの「ログイン」にテストを正常に渡すテストを通過できます。 ODBC接続を作成しようとすると、次のエラーが表示されます。ORA-12154:TNS:サービス名を解決できませんでした。
私がゼロから始めたいと仮定し、次の情報がデータベースに接続できるようになっていると仮定します…..何か提案やコメントはありますか?注:最終的に、プロジェクトにはデータを照会するWebサイト.ASPページがありますが、最初にMS Access経由のODBC接続を使用してデータを表示できることを証明する必要があります
Service name: SERVICENAME
Host = Host.XYZi.com
User Id: MYUSERID
Password: MYPASSWORD
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
'Oracle Connection
Dim ocst
Dim oconn
ocst = "Provider=OraOLEDB.Oracle;" & _
"Data Source=DATASOURCE;" & _
"User ID=CHIJXL;" & _
"Password=password;"
set oconn = CreateObject("ADODB.Connection")
from http://ora-12154.ora-code.com
ORA-12154:TNS:指定された接続識別子を解決できませんでした
Cause:接続識別子を使用してデータベースまたは他のサービスへの接続が要求されましたが、指定された接続識別子は、次のいずれかを使用して接続記述子に解決できませんでした構成された命名方法。たとえば、使用する接続識別子のタイプがネットサービス名である場合、ネットサービス名がネーミングメソッドリポジトリで見つからなかったか、リポジトリが見つからなかったか、到達できませんでした。
アクション:
ローカル命名(TNSNAMES.ORAファイル)を使用している場合:
「TNSNAMES」がOracle Netプロファイル(SQLNET.ORA)のNAMES.DIRECTORY_PATHパラメータの値の1つとしてリストされていることを確認します
TNSNAMES.ORAファイルが存在し、適切なディレクトリにあり、アクセス可能であることを確認します。
接続識別子として使用されるネットサービス名がTNSNAMES.ORAファイルに存在することを確認します。
TNSNAMES.ORAファイルのどこにも構文エラーがないことを確認してください。一致しない括弧または迷子の文字を探します。 TNSNAMES.ORAファイルのエラーにより、使用できなくなる場合があります。
ディレクトリの命名を使用している場合:
「LDAP」がOracle Netプロファイル(SQLNET.ORA)のNAMES.DIRETORY_PATHパラメータの値の1つとしてリストされていることを確認します。
LDAPディレクトリサーバーが起動し、アクセス可能であることを確認します。
接続識別子として使用されるネットサービス名またはデータベース名がディレクトリで構成されていることを確認します。
接続識別子として完全修飾ネットサービス名または完全LDAP DNを指定して、使用されているデフォルトコンテキストが正しいことを確認します。
簡易接続命名を使用している場合:
「EZCONNECT」が、Oracle Netプロファイル(SQLNET.ORA)のNAMES.DIRETORY_PATHパラメータの値の1つとしてリストされていることを確認します。
指定されたホスト、ポート、およびサービス名が正しいことを確認してください。
接続識別子を引用符で囲んでみてください。ネーミングの詳細は、 『Oracle Net Services管理者ガイド』またはOracleオペレーティング・システム固有のガイドを参照してください。
TNSNAMESネーミングを使用しているという前提で、次の2つのことを行います。
> SERVICENAME_alias = > (DESCRIPTION = > (ADDRESS = (PROTOCOL = TCP)(Host = Host.XYZi.com)(PORT = 1521)) > (CONNECT_DATA = (SERVICE_NAME = SERVICENAME))
これは、標準のOracleポート1521を使用していることを前提としています。servicename_aliasには、ローカルシステムで使用する任意の名前を指定できます。 (SERVICENAME = SERVICENAME)の代わりに(SID = SERVICENAME)を指定する必要がある場合もあります。
この MSDN POST の#7を参照して、レジストリエントリを追加するとうまくいきました。 Vs2010とOracle 11.0をインストールしました。
HKEY_LOCAL_MACHINE\SOFTWARE\Oracleでレジストリキー「TNS_ADMIN」を確認します。存在する場合は、「Dir:\ app\product\11.1.0\client_1\network\admin」として正しい値が設定されていることを確認してください。キーが表示されない場合は、キーを作成し、次のように適切な値を設定します。 Regedit-> HKEY_LOCAL_MACHINE-> Software-> Oracle-> RightClick NEW-> StringValueにTNS_ADMINという名前を付け、値「X:\ app\product\11.1.0\client_1\network\admin」を指定します。
My Computer => Properties => Advanced => Environment Variables => TNS_ADMINというエントリのシステム変数を見て、TNS_ADMINという環境変数が見つかるまで、この問題を何時間も解決するのに苦労しました。 Tnsnames.oraエントリのデフォルトパスを変更するためにTNS_ADMINが追加されました。これは、一般的なtnsnames.oraエントリをすべてのネットワークコンピューターに対してセットアップできるネットワーク環境で使用する場合に役立ちます。 tnsnames.oraのデフォルトパスを確認するには、TNS_ADMINにデフォルトパスを追加します。
Tns名の先頭にスペースがある場合、ファイルtnsnames.ora
、その後、odbcのようないくつかのコネクタはこのエラーを与えるかもしれません。先頭のスペース文字を削除します。
@Warrenと@DCookieがソリューションをカバーしましたが、強調すべきことの1つはtnsping
の使用です。これを使用して、接続を試みる前にTNSNamesが正しいことを証明できます。
Tnsnamesを正しく設定したら、ODBCを使用するか、ネイティブOracle接続を使用する TOra を試すことができます。TOraまたは類似のもの(TOAD、SQL * Plusなど) SQLのデバッグと改善に非常に貴重であることが証明されます。
最後になりましたが、最終的にASP.netに接続するときは、Oracleデータ接続ライブラリを使用できることを覚えておいてください。リソースのホストについては、 Oracle.com を参照してください。
フォルダ構造に埋め込まれたスペースとは関係ありません。
同じ問題がありました。しかし、TNS_HOMEという環境変数(システムレベルとユーザーレベルの両方で定義)を作成し、TNSNAMES.ORAが存在するフォルダーを指すようにすると、問題は解決しました。出来上がり!
ヴェンキ
C:\ Oracle\ora92\network\ADMINパスからsqlnet.oraを削除して、この問題を解決しました。
これは コメント で別の回答に言及されましたが、これも私の場合の問題であり、回答だった場合はそれを支持していたので、実際の回答に移動したかったです。
私はLinuxを使用していますが、tnsnames.oraファイルは誰でも読み取り可能に設定されていません。ローカルで動作するtnsを介した接続を読み取り可能にした後。
$ chmod +r tnsnames.ora
同じ問題が発生し、同じエラーが表示されました。 TNSNAMES:ORAファイルも問題ありませんでしたが、ファイアウォールによるアクセスのブロックが原因で問題が発生したようです。 SO良いヒントは、ファイアウォールがデータソースへのアクセスをブロックしていないことを確認することです。
私もこの問題を経験しました。問題は、Oracle DBがC:program files(x86)\ Toad ......のスペースを好まないためであることがわかったので、C:App\Toadという名前の新しいディレクトリを作成し、その中に再インストールしてToadをOracleに接続します。動いた。
ああ!!私はこれに再び走りました!!!
ToadForOracleをC:\またはパスに括弧のない任意のディレクトリにインストールするだけです。
私の場合、x64 PCを使用していて、32ビットドライバーで古いOracle 9iを使用していました。
Oracle DatabaseでSQL Reporting Servicesを使用しています。問題は、Visual Studio(BIDS)へのパスの括弧です。 Oracleは、括弧で囲まれたパスで始まるアプリを好みません。
そこで、「Program Files(x86)」の短いパス名としてProgra〜2を使用してVisual Studioを開くためのBATファイルを作成しました。
BATファイルの内容は次のとおりです。
rem Progra~2 is short path name for "Program Files (x86)" and works around an Oracle client bug that doesn't like the ()'s in the path
start /B "C:\Progra~2\Microsoft Visual Studio 9.0\Common7\IDE" "C:\Progra~2\Microsoft Visual Studio 9.0\Common7\IDE\devenv.exe"
このBATファイルにStartBIDS.BATという名前を付けて、ディレクトリに配置します。
「C:\ Program Files\Microsoft SQL Server\Start BIDS.bat」
次に、デスクトップ上のBATファイルと[スタート]メニューにショートカットを作成し、ShortCutsアイコンを変更します。これにより、Oracleと連携するために使用するTOAD、Visual Studio、BIDSなどのアプリを開くことができます。
更新:
または、ジャンクションを作成します。
mklink /J "C:\Program Files (x86)\" "C:\Program Files x86\"
次に、ショートカットの角かっこを削除します。
Oracle Database Clientを再インストールすることで問題を解決しました。何らかの理由で、1つのワークステーションでのインストールが成功しませんでした(ロギングはありませんでした)が、Oracleディレクトリのサイズ/ファイル/フォルダーを動作中のクライアントワークステーションと比較すると、かなりの量のファイルが欠落していました。クリーンインストールを実行すると、すべてが完全に機能しました。
私の場合、エラーは2つのOracleクライアントがあるためです、それは解決策です:
私はこれに1時間を費やしますが、Oracleが初めてなので、完全に混乱していました。
状況:
visual Studio 2012 Oracle開発者ツールをインストールしました。これを行うと、ドロップダウンで、TOADのTNSエントリを含むアイテムが失われました。 Visual Studio AND TOADからこのエラーが発生していました!! WTH!そのため、「すべてのユーザー」の下に環境変数TNS_ADMINを.oraファイルへのパスとともに追加しました(これは、壊れるまで機能していたため、今ではうまく機能しています)。ヒキガエルはその変化を拾いました。それでもVisual Studioは私に愛を与えません...まだ同じエラーが発生します。次に、環境変数をユーザー変数に追加しました。
環境変数がシステムとユーザーに設定されていることを確認してください
問題の時間は解決しました。 Oracle用のBeta Entity Frameworkをインストールし、Visual Studio 2010 MVC 3プロジェクトで.NETタブでOracle.DataAccessを参照していました...これにより、「Oracle ORA-12154:TNS:できませんでした。 。 "エラー。最後に、古い10.2.0.100バージョンのdllを使用して、c:\ Oracle\product ....の下にある以前のOracleインストールを参照しました。最後に、今すぐ動作します。それが他の誰かを助けることを願っています。
SIDサービスのみを再起動します。たとえば、SID name = orclの場合、orclに関連するすべてのサービスを再起動する必要があり、問題は解決します
Tnsnames.oraの代わりにファイル名tnsnames.oraにタイプミスがあるため、この問題が発生しました。
同様の問題もありました。 tnsnames.oraの接続文字列に複数のエイリアスを提供したことがわかりました。次のようなものです。
svc01、svc02 =(DESCRIPTION =(ADDRESS =(PROTOCOL = TCP)(Host = xxxx)(port = 50))(CONNECT_DATA =(SERVER = DEDICATED)(service_name = yyyysvc.world)))
したがって、ODBCを使用して接続を作成するとき、TNSサービス名の値を選択すると、自動入力には「svc01」が表示されていました(余分なコンマに注意してください)。コンマを削除すると、すぐに機能し始めました。