要建立一个连接远程DB的物化试图,sqlServer2012支持吗?
本地数据库为DB_LOCAL,远程数据库假设为DB_REMOTE。2个DB都是sqlServer。
现在要在本地的DB_LOCAL上建立一个物化视图,假设为VW_CLIENT,但是该视图的数据来自
远程的DB_REMOTE。
我试着建了一下。总是提示说不支持远程访问。有无大侠有类似经验,还请赐教啊。
注意是SqlServer啊,不要拿Oracle的东西给我说。
本地数据库为DB_LOCAL,远程数据库假设为DB_REMOTE。2个DB都是sqlServer。
现在要在本地的DB_LOCAL上建立一个物化视图,假设为VW_CLIENT,但是该视图的数据来自
远程的DB_REMOTE。
我试着建了一下。总是提示说不支持远程访问。有无大侠有类似经验,还请赐教啊。
注意是SqlServer啊,不要拿Oracle的东西给我说。
解决方案 »
- 请sql语句,三个表联合
- sql2000中except语法错误
- 在关键字'user'附近有语法错误。第13行:','附近有语法错误。怎么改呢?请高手帮忙!
- sql sever 2000
- Help!修改一个200万条记录的表结构时,发现速度非常之慢,有什么办法?(4个小时了修改还没有完成)(高分,不够再给)
- 库设计:采购表:采购单号,采购日期,经办人,批准人,物品表:采购单号,物品号,价格。这两个表是什么关系?
- 如何生成如:"ABC20030906001"这样的流水号?
- 关于pro*c的配置问题
- vfp图标怎样改变?
- 多台服务器共享一个数据库,为了防止两台服务器同时访问一个数据(数据同步),该怎么设计?
- 请教关于count(*)与like的查询语句
- 视图查询速度优化
EXEC SP_ADDLINKEDSERVER 'SXYLINK', ' ', 'SQLOLEDB', 'XYZAPP\VVV_SQLSERVER2012'; --远程DB
EXEC SP_ADDLINKEDSRVLOGIN 'SXYLINK', 'false ',null, 'sa', 'sa_12345678';
--远程DB数据检索(可以正常执行)
--SELECT * FROM SXYLINK.SABU.DBO.MST_CLIENT;--物化视图建立(这一步出错了)
CREATE VIEW VW_CLIENT
WITH SCHEMABINDING
AS
SELECT CLIENT_CODE
,NAME
FROM SXYLINK.SABU.DBO.MST_CLIENT;
--建立索引
CREATE UNIQUE CLUSTERED INDEX IDX_VWCLIENT ON VW_CLIENT(CLIENT_CODE);远程能连上,因为第3行的远程DB检索可以正常执行,问题是物化视图的创建,出现如下错误:
Remote access is not allowed from within a schema-bound object.(似乎SqlServer不支持跨数据库的物化视图)
你说的物化视图是oracle的概念把,在sql server中成为“索引视图”,这个不仅仅是视图,而且是包含实体的数据。
我做了一个实验,在sql server 2008R2上的,也是报了和你一样的错误,在sql server上应该还不支持远程的索引视图(物化视图):
--在本地机器上执行
--1.建立链接服务器,通过@datasrc指定数据源,适合链接其他多种数据库
EXEC master.dbo.sp_addlinkedserver @server = N'remote_Link',
@srvproduct='ms',
@provider=N'SQLNCLI',
@datasrc=N'192.168.1.106,14335' --远程EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'remote_Link',
@useself=N'False',
@locallogin=NULL,
@rmtuser=N'sa', --用户名
@rmtpassword='yupeigu' --密码
--2.这段代码在远程服务器行执行:
create database DB_REMOTE
gouse DB_REMOTE
gocreate table tb_client(id int,vname nvarchar(20))insert into tb_client
values(1,'DB_REMOTE')--下面的代码都在本地机器上执行
--3.查询远程表
select *
from [remote_Link].DB_REMOTE.dbo.tb_client
/*
id vname
1 DB_REMOTE
*/
if exists(select * from sys.views where name = 'vw_client')
drop view vw_client
go--4.创建视图
create view dbo.vw_client
WITH SCHEMABINDING
asselect ID,vname
from [remote_Link].DB_REMOTE.dbo.tb_client
go
/*
消息 2014,级别 16,状态 1,过程 vw_client,第 7 行
不允许从绑定到架构的对象进行远程访问。
*/
但是如果是索引视图(WITH SCHEMABINDING),就出错了。
一定要用这个的话,就需要发布订阅功能来实现本地复制一份实体副本
否则的话,就不要用WITH SCHEMABINDING选项,也一样可以作为远程视图
如果没有索引,操作的性能会非常差,客户无法接受。