sql server与oracle链接问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql server与oracle链接问题相关的知识,希望对你有一定的参考价值。
通过执行
select * from openquery(XXXX,'select * from YYYYY.abc')
where year_month='201405'
时出现
“ora-01652:无法通过256(在表空间temp中)扩展temp段”
请问大神们如何解决?
SQL Server Management Studio Express(简写SSMS)
SQL Server配置管理器:SQL Server Configuration Manager(简写SSCM)
一、 开启SQL Server 2008远程连接---如果已经开启,则可以跳过
1. 打开SSMS,用Windows身份连接数据库后,右键点击数据库引擎,选择“属性”
2. 左侧选择“安全性”,选中右侧的“SQL Server和Windows身份验证模式”以启用混合登录模式
3. 左侧选择“连接”,勾选“允许远程连接此服务器”,然后点“确定”
4. 打开SSCM,选中左侧的“SQL Server服务”,确保右侧的“SQL Server”以及“SQL Server Browser”正在运行
5. 选中左侧“SQL Server网络配置”下的“MSSQLSERVER的协议”,右侧的TCP/IP默认是“Disabled”,双击或右键点击选“属性”,在“协议”选项卡中将其修改为“Enabled”,在“IP Address”选项卡,设置端口“1433”
6. 选中左侧“SQL Native Client 10.0配置”下的“客户端协议”,将“TCP/IP”也修改为“Enabled”
7. 重新启动SQL Server 2008
8. 此时应该可以使用了,但还是要确认一下防火墙。将SQLServr.exe(C:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\Binn\sqlservr.exe)添加到允许的列表中
二、 安装Oracle客户端软件
可以去Oracle官网下载,比如“10201_client_win32”
安装成功后,在Oracle客户端安装目录下的/network/admin/tnsnames.ora配置所要连接的服务器的相关信息,比如:
TEST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.1.11.90)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = orcl)
)
)
如果admin目录下没有“tnsnames.ora”,新建一个文本文件,改名为“tnsnames.ora”
三、 添加Windows的ODBC数据源
1. 开始->管理工具->数据源(ODBC),有些“开始”菜单中没有放“管理工具”连接,则可以先到“控制面板”中,然后选择“性能和维护”,就可以找到“管理工具”了
2. 在“用户DSN”选项卡或者“系统DSN”选项卡下,点击“添加”,选择“Microsoft ODBC for Oracle”后点击“完成”
3. 填写相关信息
数据源名称、服务器名称与“tnsnames.ora”中配置的一样,其他两项可以忽略
填好后,点击“确定”
四、 在SSMS中创建链接服务器
1. 在SSMS中,展开已经连接上的某数据库引擎,依次选择服务器对象->链接服务器,在“链接服务器”上点右键,选择“新建链接服务器”
2. 在“常规”选项卡上按照如下填写:
“链接服务器”,随便取个名字
“访问接口”和“产品名称”如上图所示,不要做任何改变,包括大小写
“数据源”与“tnsnames.ora”中配置的一样,也即与“添加Windows的ODBC数据源”步骤中填写的一样
“访问接口字符串”,按照“uid=username;PWD=userpasswd”格式来填写,或者“ID=username;Password=userpasswd”也行,这里的username和userpasswd为登录所要连接的Oracle数据库所使用的用户名和密码;这里一定要填写,虽然在“安全性”选项卡中也会填写
3. 切换到“安全性”选项卡,填写用户名和密码,与上一步所填的用户名和密码一致
点击“确定”,完成
4. 查看Oracle中的数据
此时,在“链接服务器”下面,会出现刚刚创建的链接服务器,展开,可以看到所有的表和视图,但是只能看到表名,不能查看字段
要查询可以右键点击某表,选择:编写脚本为->Select 到->新查询编辑器窗口
五、 查询或更新Oracle数据库中的数据
亲测,我空间的日志
求采纳为满意回答。追问
离题了
参考技术A错误提示的意思是该查询需要使用临时表空间,但是临时表空间满了且无法扩展,所以查询执行不下去了,报错。造成这一错误的原因基本上是: 查询所涉及的数据较大,临时空间较小且不能扩展。
所以,解决方法是:
1) 修改查询语句,将openquery的结果限制在有限范围内(没有实测过,想想应该是这样的吧)
2) 修改Oracle数据库设置,扩大临时表空间
SQL Server中execute可以传入参数调用连接数据库的查询,格式如下:
execute ('select * from table_name where field_1 = ? and field_2 = ?', parameter_value_1, parameter_value_2) at linked_database其中,execute的第一个参数是连接数据库中查询语句,必须是目标数据库的语法,这里就是Oracle数据库的查询;field_1 = ?中的问号则是代表需要使用一个传入参数,必须在查询语句之后的参数中填写此参数值,就是parameter_value_1; 最后, at linked_database则指定在哪个连接数据库上执行。
所以,可以这样查询:
execute ('select * from YYYY.abc where year_month = ?', '201405') at XXXX'201405'可以换成SQL Server的变量,如@yearMonth.
追问谢谢大神,大神有办法把日期条件放在openquery么
你可以直接将条件year_month放到openquery的查询语句中去的,但是无法将此查询条件参数化(指的是用SQL Server变量, 如此例中只能固定写成201405)。
select * from openquery(XXXX, 'select * from YYYY.abc where year_month=''201405''')查询字符串中的单引号需要用两个单引号表示。
本回答被提问者和网友采纳 参考技术B 把where放到openquery里面吧追问那样语法错误了
SQL Server 2008 R2 链接 Oracle
参考网站:
SP_addlinkedserver 小结 (oracle,sql server,access,excel)
64位SqlServer通过链接服务器与32位oracle通讯
以下为正文
1. 服务器上需要安装Oracle 64位的客户端或者服务端,
安装完成后SQL Server的访问接口上会新增”OraOLEDB.Oracle” ,如下图
2. 配置”OraOLEDB.Oracle”属性->启用项“允许进程内”
3. 新建链接服务器
4. 填写链接服务器名称->选择访问接口”Oracle Provider for OLE DB”
5. 填写产品名称->Oracle
6. 数据源填写Oracle客户端/服务端配置的连接地址的服务名
(可用Oracle的Net Manager
或者直接在查看配置文件
“安装路径\\product\\11.2.0\\dbhome_1\\NETWORK\\ADMIN\\tnsnames.ora”)
7. 填写Oracle的登陆账号密码:选择项->安全性->选择”使用此安全上下文建立连接”
并填入Oracle登录名与登陆密码
8. 测试连接,测试是否能连通Oracle数据库
9. 实际使用链接
在SQL Server上查询Oracle,SQL 写法有多种,
常用的语法为:
SELECT * FROM OPENQUERY(ORA_LINK,\'SELECT * FROM USERNAME.TABLE\');
ORA_LINK:链接服务器名称
USERNAME:Oracle登陆名
转载请注明出处,by lazyneal 2017
以上是关于sql server与oracle链接问题的主要内容,如果未能解决你的问题,请参考以下文章
[ORACE] Oracle trace 之二10046事件
[ORACE] Oracle trace 之二10046事件