오라클이 왜?Oracle에서는 ManagedDataAccess가 작동하지 않습니다.Data Access는 무엇을 합니까?
몇 대의 머신에서 발생하고 있는 문제의 트러블 슈팅에 사용하는 매우 간단한 애플리케이션을 개발하고 있습니다만, 그 전에 CPU 아키텍처의 차이와 Oracle 데이터베이스 라이브러리 등 몇 가지 문제가 발생했습니다.
는 에 .tnsnames.ora 방에 있다C:\oracle\11g\network\admin디렉토리로 이동합니다.이 서버에 접속하면 원하는 응답을 얻을 수 있습니다.Oracle을 사용하여 이 서버에 접속하기 위해 C# 프로그램을 코드화한 경우. 합니다.라이언,,,작작작
string connectionString = "Data Source=DSDSDS;User Id=UNUNUN;Password=PWPWPW;";
DataTable dataTable = new DataTable();
using (var connection = new OracleConnection(connectionString)) {
connection.Open();
using (var command = new OracleCommand()) {
command.Connection = connection;
command.CommandText = sql;
command.CommandType = CommandType.Text;
using (var oda = new OracleDataAdapter(command)) {
oda.Fill(dataTable);
}
}
}
Oracle. ,, Oracle.Data Access(데이터 액세스) Data Access(데이터 액세스)나는 다른 도서관 오라클이 있는 것을 보았다.「Managed Data Access(관리 데이터 액세스)」.이 라이브러리를 사용하면 서버에 접속할 수 없게 됩니다. 안ORA-12545: Network Transport: Unable to resolve connect hostname집니니다
왜 그럴까?이 두 라이브러리의 차이점은 지금까지 읽은 내용에 따르면 이것은 문제가 되지 않을 것이기 때문입니다.
추가 정보:
- %ORACLE_HOME% 및 %TNS_ADMIN%는 정의되어 있지 않습니다(tnsping 및 Oracle에 유의하십시오).Data Access 작업)
- 에는 PATH가 있습니다.
C:\oracle\11g\BIN정의되어 있습니다. - .
tnsnames.ora
파일과 .tnsnames.ora .exe는 합니다.오라클 ★★★★★★★★★★★★★★★★★★★★?는 Data Access의 합니다.C:\oracle\11g\network\admin오라클Managed Access ( Managed Access ) 。
ODP에서 TNS 이름을 해결하기 위한 우선순위.NET, Managed Driver는 다음과 같습니다(여기를 참조).
- 데이터 소스 에일리어스는 의 섹션 아래에 있는 'dataSources' 섹션에 있습니다.NET 컨피규레이션파일
- 'TNS_ADM'에 의해 지정된 위치에 있는 tnsnames.ora 파일의 데이터 소스 별칭안에 있습니다.NET 컨피규레이션파일
- .exe와 같은 디렉토리에 있는 tnsnames.ora 파일의 데이터 소스 에일리어스.
- tnsnames.ora 파일의 데이터 소스 에일리어스가 %TNS_ADMIN%에 존재합니다(여기서 %TNS_ADM).IN%는 환경변수 설정입니다).
- %ORACLE_HOME%\network\admin에 있는 tnsnames.ora 파일의 데이터 소스 에일리어스(%ORACLE_HOME%는 환경 변수 설정).
저는 당신의 샘플이 오라클과 함께 작동하는 이유를 믿습니다.Data Access(Oracle에서는 사용 안 함).Managed Data Access는 Windows 레지스트리 기반 구성이 ODP에서 지원되지 않습니다(문서 참조).NET 설치에서는 관리되지 않는 부분에서만 인식되는ORACLE_HOME 레지스트리 키(HLKM\SOFTWARE\ORACLE\Key_NAME\ORACLE_HOME)가 설정됩니다.
tnsnames.ora로의 경로를 설정 파일에 추가해 보겠습니다.
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<oracle.manageddataaccess.client>
<version number="4.112.3.60">
<settings>
<setting name="TNS_ADMIN" value="C:\oracle\product\10.2.0\client_1\NETWORK\ADMIN\" />
</settings>
</version>
</oracle.manageddataaccess.client>
</configuration>
TNSNAMES(여러 비트의 할 수 .ORA(여러 Oracle 버전과 32/64 비트의 혼동이 추가됨)는 기존 TNSNAMES에서 설정을 복사할 수 있습니다.【설정】【ORA】【ORA】【ORA】【ORA】
TNSNAMES의 'DSDS'입니다.ORA로 하다
DSDSDS=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=RESS)(호스트=DSDSDSDSHost)(포트=4521))(CONNECT_DATA=(SERVICE_NAME=DSSService)))))
You can take the text after the first '=' and use that wherever you are using 'DSDSDS' and it won't need to find TNSNAMES.ORA to know how to connect.
Now your connection string would look like this:
string connectionString = "Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(Host=DSDSDSHost)(Port=4521)))(CONNECT_DATA=(SERVICE_NAME=DSDSDSService)));User Id=UNUNUN;Password=PWPWPW;";
접속 문자열에서 원하는 포맷을 찾았을 때 Oracle에서는 이와 같이 정상적으로 동작했습니다.Managed Data Access.따로 가지고 놀 필요 없이.
DATA SOURCE=DSDSDS:1521/ORCL;
나도 비슷한 문제가 있었어... 이 문제를 해결하기 위해 ODP를 제거한 거야.oracle 서버와 같은 디렉토리에 넷으로 재설치...서버 옵션을 사용하면 대부분의 제품이 이미 설치되어 있다는 것을 알 수 있습니다(12c 데이터베이스 설치 중).다른 기능을 선택하고 최종적으로 설치를 완료합니다.
이 회피책은, 같은 머신에 12 c를 인스톨 하고 있는 경우(노트북에 12 c 를 인스톨 하고 있는 경우)에만 유효합니다.
데이터베이스가 노트북이 아닌 서버 머신에 있는 경우 서버가 아닌 클라이언트 옵션을 선택한 후 TNS_ADMIN을 app.config에 포함시키고 버전 지정을 잊지 마십시오.
노트북에 설치가 되어 있기 때문에 App.config는 다음과 같습니다.
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
</startup>
</configuration>
/////////the below code is a sample from oracle company////////////////
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.Common;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Oracle.ManagedDataAccess.Client;
///copy these lines in a button click event
string constr = "User Id=system; Password=manager; Data Source=orcl;";
// Click here and then press F9 to insert a breakpoint
DbProviderFactory factory =
DbProviderFactories.GetFactory("Oracle.ManagedDataAccess.Client");
using (DbConnection conn = factory.CreateConnection())
{
conn.ConnectionString = constr;
try
{
conn.Open();
OracleCommand cmd = (OracleCommand)factory.CreateCommand();
cmd.Connection = (OracleConnection)conn;
//to gain access to ROWIDs of the table
//cmd.AddRowid = true;
cmd.CommandText = "select * from all_users";
OracleDataReader reader = cmd.ExecuteReader();
int visFC = reader.VisibleFieldCount; //Results in 2
int hidFC = reader.HiddenFieldCount; // Results in 1
MessageBox.Show(" Visible field count: " + visFC);
MessageBox.Show(" Hidden field count: " + hidFC);
reader.Dispose();
cmd.Dispose();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
MessageBox.Show(ex.StackTrace);
}
}
에는 ' 늦었지만은 '조금'입니다Oracle.ManagedDataAccess에서는 ODP와 같은 .NET 프로바이더에서는, 다음과 같은 것은 잊어 주세요.network\admin,Oracle client,Oracle_Home 등등.
여기 당신이 필요한 것이 있습니다.
- VS 또는 ODAC용 Oracle Developer Tools를 다운로드하여 설치합니다.참고 - 개발 도구가 ODAC을 설치합니다.이것에 의해, 비교적 소규모의 인스톨이 작성됩니다.
C:\Program Files (x86)풀도구 시 미만. - 프로젝트에서는 Nuget 패키지와 대응하는 버전의 ODP.net(Oracle)을 설치합니다.참조하는 Managed Data Access.dll)
이 시점에서 접속할 수 있는 옵션은 2가지가 있습니다.
a) 를 설정합니다.
datasource다음과 같은 형식으로DataSource=ServerName:Port/SID . . .또는DataSource=IP:Port/SID . . .b) 작성
tnsnames.ora파일(이전 경험과는 다릅니다)을 참조해 주세요.엔트리가 있습니다.AAA = (설명 =)
(주소 = (PROTOCOL = TCP)(HOST = ServerNameOr)IP)(PORT = 1521)
(CONNECT_DATA = (서버 = 전용)(SERVICE_NAME = SIDNAME))그리고 이 파일을 응용 프로그램이 실행되는 bin 폴더에 넣습니다.이제 연결 이름을 사용하여 연결할 수 있습니다.
DataSource=AAA . . .따라서 tnsnames.ora를 가지고 있어도 ODP.net에서 관리하면 조금 다르게 동작합니다.로컬 TNS 파일을 만듭니다.그리고 이제 관리가 쉬워졌습니다.
요약하자면, 관리 대상이기 때문에 무거운 Oracle Client가 필요하지 않습니다.Oracle_home오라클모든 것을 .net 어플리케이션 구조 내에서 실행할 수 있습니다.
Oracle을 제거하는 중입니다.Managed Data Access는 Oracle만 남습니다.Managed Data Access.코어는 나한테 효과가 있어.
에는 위의 , 까지는 '아예'라는 문구를 .ORA-12545: Network Transport: Unable to resolve connect hostname
Oracle 머신에 ping을 실행하려고 했는데 표시되지 않아 호스트 파일에 추가했습니다. 또 .ORA-12541: TNS:no listener조사 결과, 다른 머신으로부터 같은 호스트명을 ping 하면, 다른 IP 주소가 취득되는 것을 알게 되어(이유는 알 수 없습니다), 호스트 파일의 IP 주소를 변경해, 100%로 문제가 해결되었습니다.
제 경험을 적는 것은 당연한 일이지만, 문제가 위의 설정에 있는 것은 확실합니다만, 정말로 리모트 DB 머신을 볼 수 있는지 확인하는 것을 완전히 잊고 있었습니다.무슨 일이 일어나고 있는지 모를 때는 기억해 두세요.
이러한 링크가 큰 도움이 되었습니다.
http://www.moreajays.com/2013/03/ora-12545-connect-failed-because-target.html http://www.orafaq.com/wiki/ORA-12541
같은 에러 메시지를 받았습니다. 저는 '이것'을 '이것'으로 했습니다.Oracle.ManagedDataAccess '와의 조합Oracle.DataAccess새로운 이하지 않을 수 .새 어셈블리에서 발견된 새 기능이 필요한 경우 이 솔루션이 작동하지 않을 수 있습니다. 설정을 보다 우선순위가 가 더 .Oracle어셈블리
언급URL : https://stackoverflow.com/questions/17456024/why-would-oracle-manageddataaccess-not-work-when-oracle-dataaccess-does
'programing' 카테고리의 다른 글
| Wordpress에서 쿠키를 설정하는 방법 (0) | 2023.03.22 |
|---|---|
| 아무것도 반환되지 않은 경우의 JSON 디코드 오류 처리 (0) | 2023.03.22 |
| 스프링 부트 - 로그 파일이 기록되지 않았습니다(로그).파일이 존중되지 않음) (0) | 2023.03.22 |
| 리액트 상태를 변환하기 위해 선호하는 방법은 무엇입니까? (0) | 2023.03.22 |
| 병렬 요구와 체인 요구를 $http와 조합한 각도입니다.() 및 $q.all()을 지정합니다. (0) | 2023.03.12 |