要建立一个连接远程DB的物化试图,sqlServer2012支持吗?
本地数据库为DB_LOCAL,远程数据库假设为DB_REMOTE。2个DB都是sqlServer。
现在要在本地的DB_LOCAL上建立一个物化视图,假设为VW_CLIENT,但是该视图的数据来自
远程的DB_REMOTE。
我试着建了一下。总是提示说不支持远程访问。有无大侠有类似经验,还请赐教啊。
注意是SqlServer啊,不要拿Oracle的东西给我说。

解决方案 »

  1.   

    --远程数据库连接
    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不支持跨数据库的物化视图)
      

  2.   


    你说的物化视图是oracle的概念把,在sql server中成为“索引视图”,这个不仅仅是视图,而且是包含实体的数据。
      

  3.   


    我做了一个实验,在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 行
    不允许从绑定到架构的对象进行远程访问。
    */
      

  4.   

    我试验过,如果是普通视图,没有问题。
    但是如果是索引视图(WITH SCHEMABINDING),就出错了。
      

  5.   

    是的,WITH SCHEMABINDING这个选项要求必须是本地的实体表
    一定要用这个的话,就需要发布订阅功能来实现本地复制一份实体副本
    否则的话,就不要用WITH SCHEMABINDING选项,也一样可以作为远程视图
      

  6.   

    WITH SCHEMABINDING这个是必需的,因为数据量是几百万。
    如果没有索引,操作的性能会非常差,客户无法接受。