|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
这些过程被存储和运行在数据库服务器上,以减少在客户端的处理过程,从而最大限度地提高了处理能力,因为通常情况下数据库服务器会运行地更快。存储过程并不是MySQL独有的功能,但是这个最近新增加的功能使得这个数据库比以前更具吸引力了。oracle
ORACLE8i的一般毗连手艺的先容
====================================
接待人人同我交换:小白enhydra_boy@tom.com
接待转载,请保存本声明,感谢!
====================================
Oracle8.1.6中引进一般毗连手艺的观点(Genericconnectivity),这连续接办理计划满意了对很多异种数据库存储的数据会见需求,同时其实不必要安装ORACLE的通明网关(ORACLETransparentGateway)。该特征同意利用业界尺度ODBC和OLEDB创建通明毗连。
甚么是一般毗连(Genericconnectivity)
一般毗连是ORACLE的一个低端数据集成办理计划,方针是供应ORACLE8i能够毗连到非oracle数据库的才能。它的完成,是经由过程异种服务代办署理(HeterogeneousServices)来完成的。
异种服务代办署理的范例:
ODBCagentforaccessingODBCdataprovidersOLEDBagentforaccessingOLEDBdataprovidersthatsupportSQLprocessing--sometimesreferredtoasOLEDB(SQL)ODBCagentforaccengOLEDBdataproviderswithoutSQLprocessingsupport--sometimesreferredtoasOLEDB(FS)
一般毗连的体系布局图
ORACLE客户端程序会见非ORACLE数据库的历程:客户端程序是经由过程SQL*NET毗连ORACLE服务器,关于异种数据库的会见,交给HS代办署理完成。
HS代办署理经由过程上面的功效组件完成:ODBC办理器->ODBC驱动程序->数据库的收集客户端->方针数据库。
假如异种库和ORACLE数据库位于统一台服务器上,一样平常来讲驱动程序是能够间接和本机的数据库通信,就能够省往数据库的收集客户端这一层。
数据范例的转换
ORACLE主动完成ODBC和OLEDB数据范例到ORACLE数据范例的转换,详细的对应转换能够参考ORACLE的联机匡助http://download-west.oracle.com/docs/cd/A87860_01/doc/server.817/a76960/datatype.htm。
一般毗连的限定
1含有BLOB列的表必需要有一个主键字段;
2BLOB/CLOB数据不间接经由过程pass-through的查询体例;
3在WHERE子句中包含了函数的Updates或deletes语句不被同意;
4不撑持存储历程的挪用;
HS代办署理(odbc/oledb)不撑持散布式事件(distributedtransactions),只撑持单点的事件(single-sitetransactions)。
一般毗连代办署理的设置
上面,我先容一下,使用一般毗连的ODBC设置。使用HSodbc代办署理毗连SQLSERVER2000。
第一步d初始化文件的创建
起首,你必需要创立初始化文件。ORACLE供应了样例初始化文件,名字是init<agent>.ora,<agent>多是hsodbc,hsoledb,hsolefs,分离代表了三品种型的代办署理,位于$ORACLE_HOME/HS/ADMIN下。
把对应的文件复制一份出来,而且更名为init<HS_SID>.ora,<HS_SID>是你SQLSERVERODBC代办署理起的别号。
复制并创立了一个inithssql2k.ora文件,编纂inithssql2k.ora文件。参数有:
#ThisisasampleagentinitfilethatcontainstheHSparametersthatare
#neededforanODBCAgent.
#
#HSinitparameters
#
#HS_FDS_CONNECT_INFO=<odbcdata_source_name>
#HS_FDS_TRACE_LEVEL=<trace_level>
HS_FDS_CONNECT_INFO=SQL2K
HS_FDS_TRACE_LEVEL=ON
HS_AUTOREGISTER=TRUE
#
#Environmentvariablesrequiredforthenon-Oraclesystem
#
#set<envvar>=<value>
第二步创立异种服务代办署理的数据字典
实行$ORACLE_HOME/rdbms/admin/caths.sql,创立相干的体系表和视图。
第三步创立异种服务代办署理的事情情况
增加hssql2k的侦听服务,$ORACLE_HOME/NETWORK/ADMIN/listener.ora
SID_DESC=
(SID_NAME=hssql2k)
(ORACLE_HOME=d:oracleora81)
(PROGRAM=hsodbc)
)
修正$ORACLE_HOME/NETWORK/ADMIN/tnsnames.ora,增加一个收集服务名
sql2k,将在前面创立数据库连接时用到。
sql2k=
(DESCRIPTION=
(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521))
(CONNECT_DATA=(SID=hssql2k))
(HS=OK)
)
从头启动侦听,而且观察服务形态
LSNRCTLfor32-bitWindows:Version8.1.7.0.0-Productionon02-JUL-200312:49:
30
(c)Copyright1998OracleCorporation.Allrightsreserved.
WelcometoLSNRCTL,type"help"forinformation.
LSNRCTL>status
Connectingto(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=SAM)(PORT=1521)))
STATUSoftheLISTENER
------------------------
AliasLISTENER
VersionTNSLSNRfor32-bitWindows:Version8.1.7.0.0-Produ
tion
StartDate02-JUL-200311:08:31
Uptime0days1hr.41min.2sec
TraceLeveloff
SecurityOFF
SNMPOFF
ListenerParameterFiled:oracleora81
etworkadminlistener.ora
ListenerLogFiled:oracleora81
etworkloglistener.log
ServicesSummary...
ORCLhas1servicehandler(s)
ORCLhas3servicehandler(s)
PLSExtProchas1servicehandler(s)
hssql2khas1servicehandler(s)
Thecommandcompletedsuccessfully
LSNRCTL>
Hssql2k的侦听服务已一般运转了。
第四步修正数据库启动参数文件
修正数据库启动参数文件,设置global_names=false,假如设置为true(缺省),那末数据库毗连名和全局数据库名一样,这将会招致ORA-02085的毛病。
第五步创立会见non-oracle数据库的毗连(DatabaseLink)
在sqlplus中,实行createdatabaselink命令。Connectto指定了毗连到SQLSERVER的用户名和暗码。
SQL>createpublicdatabaselinksql2kconnecttosaidentifiedbymanagerusing‘sql2k’;
Databaselinkcreated.
第六步测试
Oracle8iEnterpriseEditionRelease8.1.7.0.0-Production
WiththePartitioningoption
JServerRelease8.1.7.0.0-Production
SQL>connectscott/tiger;
Connected.
SQL>selectcount(*)fromsysobjects@sql2k;
COUNT(*)
----------
135
如今,oracle已能够会见sqlserver数据库了。以上都是,笔者参考了oracle的联机匡助,而且实践测试的经由。笔者同时也发明,接纳hsodbc实在也并非很不乱,有的sql语句会引发hsodbagent的致命毛病,同时有良多限定,接纳通明网关应当就能够取得很好的效果。
可是,oracle8i的这个特征,能够不安装分外的TransparentGateway产物。因而,只需可以满意使用的数据会见请求,接纳Genericconnectivity也不掉为一个疾速,经济的办法。
笔者的测试情况:Windows2000Server+ORACLE8i(8.1.7)
表里面的记录数量越多,这个操作的代价就越高。如果作为搜索条件的列上已经创建了索引,MySQL无需扫描任何记录即可迅速得到目标记录所在的位置。 |
|