source

ASP.NET / Oracle 문제:TNS에서 지정한 연결 식별자를 확인할 수 없습니다.

factcode 2023. 9. 26. 22:35
반응형

ASP.NET / Oracle 문제:TNS에서 지정한 연결 식별자를 확인할 수 없습니다.

ASP의 로컬 복사본을 가지고 있습니다.Visual Studio 2010에서 실행되는 NET 웹 애플리케이션.그 코드는 내 개발 환경에서 실행되는 코드와 정확히 복제된 것입니다.

ASP를 통해 Oracle 데이터베이스에 연결하려고 할 때NET, "TNS에서 지정한 연결 식별자를 확인할 수 없습니다."라는 메시지를 던집니다.이상한 것은 이 데이터베이스가 제 TNSNAME에 있다는 것입니다.ORA 파일과 TNSPING 또는 Microsoft Data Link를 사용하여 연결하면 잘 작동합니다.

Oracle 디렉토리의 권한을 수정하려고 했지만 도움이 되지 않는 것 같습니다.

오라클 데이터베이스 클라이언트(x86 또는 x64)를 설치했는지 확인합니다.

Oracle bin 폴더를 사용하도록 PATH를 구성했는지 확인합니다.

PATH=C:\Oracle\product\11.2.0\client_1\bin

tnsnames.or 파일이 디렉토리에 있는지 확인합니다.

C:\Oracle\product\11.2.0\client_1\network\admin

다음 연결 문자열을 사용해 볼 수 있습니다.

Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.1)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=MYDATABASE)));User ID=myusername;Password=mypassword;

업데이트:

(확장 연결 문자열을 사용하기 때문에) 이 환경 변수는 없지만 여기 있는 누군가가 TNS_ADMIN을 추가할 것을 제안합니다.

TNS 사용:

(ASP의 경우).NET Core tnsnames.ora가 위치한 디렉토리를 가리키는 TNS_ADMIN 환경 변수가 필요합니다.)

Data Source = TORCL; User Id = myUsername; Password = myPassword;

TNS 미사용:

Data Source = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP) (HOST = MyHost) (PORT = MyPort))) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = MyOracleSID));
User Id = myUsername; Password = myPassword;

위의 모든 유효성 검사에 실패할 경우 다음을 시도합니다.이것이 제 문제를 해결해 준 것입니다.tnsnames.또는 파일의 TNS 항목 이름입니다.

예:abc.xyz = (Description = (ADDESCription = (PROTOCOL = tcp)(HOST = MyHost)(PORT = MyPort)(CONNECT_DATA = (SERVICE_NAME = MyOracle SID))가 있었습니다.

ORA-12154: TNS: 지정한 연결 식별자를 확인할 수 없습니다.

그리고 abcxyz = ()로 바꿨더니 잘 되더군요.

기본적으로 TNS 엔트리 이름의 . 및 _와 같은 특수 문자를 제거했습니다.

  1. VirtualBox 5.0.20 설치
  2. 설치된 센트버추얼 박스(VirtualBox
  3. Oracle 11g R2 설치(11.0.2)
  4. 데이터베이스 만들기
  5. VirtualBox에 Windows 10 설치
  6. VisualStudio Professional 2012 설치 및 SP1에서 SP5로 단계별 업데이트
  7. Nuget Package Manager 업데이트
  8. Nuget Package Manager 콘솔에서 실행:설치-패키지 오라클.관리 데이터 액세스
  9. 웹 프로젝트를 만듭니다.
  10. 에 tnsname에 합니다.또는 파일 보관

    TNS NAMES.ORA

MYDB= (Description=(ADDRESSION=(ADDESS=(PROTOCTocoltcp))(HOST=192.168.56.2)(PORT=1521)(CONNECT_DATA=(SERVICE_NAME=SID_NAME));

다음과 같이 연결 문자열을 제외한 12단계의 소스 코드를 사용합니다.

string constr = "user id=test;password=test;data source=MYDB";

또는 12단계를 따릅니다.

  1. Oracle을 사용하는 코드에서 다음 네임스페이스를 사용했습니다.관리되는 데이터 액세스.클라이언트, Oracle 사용.관리되는 데이터 액세스.유형;
  2. Oracle Database를 연결하기 위해 다음 문장을 사용했습니다.

    string constr = "user id= test; password= test; data source= (DESCription= (ADDRESSION= (PROTOROCOL= tcp))(HOST=192.168.56.2)(PORT=1521)(CONNECT_DATA=(SERVICE_NAME=SID_NAME))";

    Oracle Connection con = 새 Oracle Connection(constr)을(를) 실행하십시오. {con}을(를) 시도하십시오.Open(); ViewData["Message"] = "Connected"; con.폐기(); } 캐치(예외) {

    데이터 보기 ["메시지"] = ex.메시지; }

  3. 바로 그겁니다.됐습니다.

동일한 오류가 발생했습니다. ORA-12154: TNS: 지정한 연결 식별자를 확인할 수 없습니다.

비주얼 스튜디오에서 Oracle Data 소스를 연결하려고 할 때

이 문제를 해결하기 위한 단계입니다.

시스템에 Oracle 클라이언트가 설치되어 있는지, Oracle Wallet Manager가 설치되어 있는지 확인합니다.

  1. Oracle Wallet Manager를 열고 조직에서 제공한 인증서를 추가합니다.

  2. 'C:\APP\ORACLE\product\11.2.0\client_1\network\admin'(또는 데스크톱의 유사한 폴더 구조) 폴더로 이동하여 'tnsnames.ora' 및 'sqlnet.ora' 파일을 첨부 파일로 바꿉니다.

  3. C:\ORACLE\product\11.2.0.3\network\admin --> SQL.net .ora 및 tnsnames.ora 파일을 추가합니다.

  4. SQL.net .또는 파일에서 1단계에서 만든 지갑 경로를 수정합니다.

시스템을 다시 시작하고 공유 데이터 원본 만들기를 시작합니다.

이 오류가 발생할 수 있는 또 다른 시나리오는 IIS Express를 로컬로 사용하여 테스트하는 경우입니다.

TNS 항목이 추가/수정되면 IIS Express를 재시작해야 새 값이 유지됩니다.

저의 경우, 어플리케이션 디버깅을 하다가 TNS 엔트리를 수정하기 위해 어플리케이션을 정지시켰으나, 어플리케이션을 다시 실행시켰으나 동일한 IISExpress 인스턴스를 사용하여 API를 실행하였습니다.

앱을 중지하고 수동으로 II Express를 닫으면 다음 실행 시 TNSNAME에 대한 수정 사항이 제대로 작동하도록 할 수 있었습니다.

언급URL : https://stackoverflow.com/questions/12178218/asp-net-oracle-issue-tns-could-not-resolve-the-connect-identifier-specified

반응형