???大侠们帮忙啊―sqlServer远程物化视图

树猫 2013-11-08 06:10:24
要建立一个连接远程DB的物化试图,sqlServer2012支持吗?
本地数据库为DB_LOCAL,远程数据库假设为DB_REMOTE。2个DB都是sqlServer。
现在要在本地的DB_LOCAL上建立一个物化视图,假设为VW_CLIENT,但是该视图的数据来自
远程的DB_REMOTE。
我试着建了一下。总是提示说不支持远程访问。

有无大侠有类似经验,还请赐教啊。
注意是SqlServer啊,不要拿Oracle的东西给我说。
...全文
336 点赞 收藏 11
写回复
11 条回复
阳泉酒家小当家 2013年11月10日
引用 9 楼 freecs 的回复:
WITH SCHEMABINDING这个是必需的,因为数据量是几百万。 如果没有索引,操作的性能会非常差,客户无法接受。
实在不行,要不就是通过链接服务器 + 触发器, 要不就通过上面说的数据库复制技术中的事务复制,来实现同步数据。
回复 点赞
szm341 2013年11月09日
引用 7 楼 freecs 的回复:
我试验过,如果是普通视图,没有问题。 但是如果是索引视图(WITH SCHEMABINDING),就出错了。
是的,WITH SCHEMABINDING这个选项要求必须是本地的实体表 一定要用这个的话,就需要发布订阅功能来实现本地复制一份实体副本 否则的话,就不要用WITH SCHEMABINDING选项,也一样可以作为远程视图
回复 点赞
树猫 2013年11月09日
我试验过,如果是普通视图,没有问题。 但是如果是索引视图(WITH SCHEMABINDING),就出错了。
回复 点赞
szm341 2013年11月09日
引用 9 楼 freecs 的回复:
WITH SCHEMABINDING这个是必需的,因为数据量是几百万。 如果没有索引,操作的性能会非常差,客户无法接受。
所以这个你最好做成发布订阅形式,这样可以把原表的索引也一并复制过去 你要是执意使用远程视图,那就等其他大神路过吧~
回复 点赞
树猫 2013年11月09日
WITH SCHEMABINDING这个是必需的,因为数据量是几百万。 如果没有索引,操作的性能会非常差,客户无法接受。
回复 点赞
szm341 2013年11月08日
额。。原来你是想把远程视图在本地物理映射啊 这个好像是不可以,一般这功能都是发布订阅功能做的吧
回复 点赞
阳泉酒家小当家 2013年11月08日
引用 楼主 freecs 的回复:
要建立一个连接远程DB的物化试图,sqlServer2012支持吗? 本地数据库为DB_LOCAL,远程数据库假设为DB_REMOTE。2个DB都是sqlServer。 现在要在本地的DB_LOCAL上建立一个物化视图,假设为VW_CLIENT,但是该视图的数据来自 远程的DB_REMOTE。 我试着建了一下。总是提示说不支持远程访问。 有无大侠有类似经验,还请赐教啊。 注意是SqlServer啊,不要拿Oracle的东西给我说。
我做了一个实验,在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
go

use DB_REMOTE
go

create 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
as

select ID,vname
from [remote_Link].DB_REMOTE.dbo.tb_client
go
/*
消息 2014,级别 16,状态 1,过程 vw_client,第 7 行
不允许从绑定到架构的对象进行远程访问。
*/


回复 点赞
阳泉酒家小当家 2013年11月08日
你要建的是普通的视图,还是索引视图(物化视图)
回复 点赞
阳泉酒家小当家 2013年11月08日
引用 楼主 freecs 的回复:
要建立一个连接远程DB的物化试图,sqlServer2012支持吗? 本地数据库为DB_LOCAL,远程数据库假设为DB_REMOTE。2个DB都是sqlServer。 现在要在本地的DB_LOCAL上建立一个物化视图,假设为VW_CLIENT,但是该视图的数据来自 远程的DB_REMOTE。 我试着建了一下。总是提示说不支持远程访问。 有无大侠有类似经验,还请赐教啊。 注意是SqlServer啊,不要拿Oracle的东西给我说。
你说的物化视图是oracle的概念把,在sql server中成为“索引视图”,这个不仅仅是视图,而且是包含实体的数据。
回复 点赞
树猫 2013年11月08日
--远程数据库连接 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不支持跨数据库的物化视图)
回复 点赞
szm341 2013年11月08日
你是怎么建的不支持远程访问? 一般创建链接服务器就ok了
回复 点赞
发动态
发帖子
疑难问题
创建于2007-09-28

9306

社区成员

12.1w+

社区内容

MS-SQL Server 疑难问题
社区公告
暂无公告