在Oracle数据库的使用过程中,通常需要一个名为tnsnames.ora的配置文件来定义数据库实例的别名。然而,本文将介绍一种不需要这个文件即可连接到Oracle实例的方法。这种方法特别适用于需要在多个数据库实例上进行临时脚本编写,或者不确定用户计算机上是否有正确配置的tnsnames.ora文件的情况。
在VBScript中,标准的Oracle连接字符串如下所示:
Dim strCon
strCon = "Driver={Microsoft ODBC for Oracle}; " & _
"CONNECTSTRING=MYDB; uid=read;pwd=read;"
在这段代码中,首先指定了驱动程序名称(Microsoft ODBC for Oracle),然后是实例的别名,最后是Oracle的用户名和密码。别名MYDB也需要在tnsnames.ora文件中有相应的条目。
tnsnames.ora文件通常位于以下目录:
在该文件中,需要定义别名:
MYDB.WORLD = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = mysrv)(PORT = 7001)) (CONNECT_DATA = (SERVICE_NAME = MYDB)))
Oracle使用这个定义来确定哪个物理数据库实例与给定的别名MYDB相关联。这就是为什么在访问Oracle实例时需要tnsnames.ora文件的原因。但是,这真的必要吗?答案是不,只需要在连接字符串中包含物理连接数据(如主机和端口)。以下是修改后的连接字符串:
Dim strCon
strCon = "Driver={Microsoft ODBC for Oracle}; " & _
"CONNECTSTRING=(DESCRIPTION=" & _
"(ADDRESS=(PROTOCOL=TCP)" & _
"(HOST=mysrv)(PORT=7001))" & _
"(CONNECT_DATA=(SERVICE_NAME=MYDB))); uid=read;pwd=read;"
现在,将能够访问任何Oracle实例,而不需要在客户端计算机上有正确的tnsnames.ora文件。
Dim strCon
strCon = "Driver={Microsoft ODBC for Oracle}; " & _
"CONNECTSTRING=(DESCRIPTION=" & _
"(ADDRESS=(PROTOCOL=TCP)" & _
"(HOST=mysrv)(PORT=7001))" & _
"(CONNECT_DATA=(SERVICE_NAME=MYDB))); uid=read;pwd=read;"
Dim oCon
Set oCon = WScript.CreateObject("ADODB.Connection")
Dim oRs
Set oRs = WScript.CreateObject("ADODB.Recordset")
oCon.Open strCon
Set oRs = oCon.Execute("SELECT myfield FROM mytable")
While Not oRs.EOF
WScript.Echo oRs.Fields(0).Value
oRs.MoveNext
Wend
oCon.Close
Set oRs = Nothing
Set oCon = Nothing