zoukankan      html  css  js  c++  java
  • 不同版本操作系统和数据库的之间链接,和操作

    缘由:知识库个人计划积分数据源为157数据库,但基于BI等系统,34上复制了一份单独的知识库个人计划积分,所以每次157发生变化,要人工的改变34数据库,这样操作起来很麻烦。

    所以在157写了个触发器,同步更新34数据库的个人计划积分。但遇到了种种问题。

    该问题自动化的整体思路:在157计划计分表中建立触发器,同步更新34数据库(看是很简单,实施有点麻烦)

    问题一:64位Windows2003,SqlServer2005,链接32位Windows2003,SqlServer2000,无法链接
    错误提示:

    链接服务器"nebula"的 OLE DB 访问接口 "SQLNCLI" 返回了消息 "未指定的错误"。
    链接服务器"nebula"的 OLE DB 访问接口 "SQLNCLI" 返回了消息 "在该服务器上找不到完成该操作所需的存储过程。 请与系统管理员联系。"。
    消息 7311,级别 16,状态 2,第 1 行
    无法获取链接服务器 "nebula" 的 OLE DB 访问接口 "SQLNCLI" 的架构行集 "DBSCHEMA_TABLES_INFO"。该访问接口支持该接口,但使用该接口时返回了失败代码。


    解决方案:
    1.确保被链接的sqlserver2000安装了sp4,否则请先安装
    2.安装完成后,运行cmd,执行如下命令osql -U sa -P ovenjackchain -S 192.168.0.34 -i C:\instcat.sql
       注意用户名和密码,最后的C:\instcat.sql,如果你安装了sp4,那么这个文件肯定存在,自己搜索出来。
    3.回车,哗哗哗的一幕,最后提示成功!
    4.执行成功后,即可建立两台数据库的链接了(如何建立,请搜索知识库)


    问题二:创建触发器,创建失败
    错误提示:
    包含的前缀超出了最大限值。最多只能有 2 个
    触发器如下:
    01 create trigger T_Changescore
    02 on  Y_TaskScoreplanning for update,delete,insert as
    03 begin
    04 drop table nebula.Nebula.dbo.taskplaning;
    05 insert into nebula.Nebula.dbo.taskplaning
    06 select case [任务型态] when '投-知识库学习' then '学习' when '投-知识库发展' then '发展' end tasktype,case 节点负责人 when '姚亮' then '姚亮' else substring(节点负责人,3,100) end taskman,年度 year,isnull(m01,0) m01,isnull(m02,0) m02,isnull(m03,0) m03,isnull(m04,0) m04,isnull(m05,0) m05,isnull(m06,0) m06,isnull(m07,0) m07,isnull(m08,0) m08,isnull(m09,0) m09,isnull(m10,0) m10,isnull(m11,0) m11,isnull(m12,0) m12,合计 total
    07 from Y_TaskScoreplanning
    08 where ([任务型态]='投-知识库学习' or [任务型态]='投-知识库发展' ) and 年度='2011'
    09 and substring(节点负责人,3,100) not in ('xxxx')
    10 end

    解决方案:将触发器执行的代码改成存储过程执行,存储过程可以成功创建,select * into,和drop是不可以在链接中使用的
    01 create trigger T_Changescore
    02 on  Y_TaskScoreplanning for update,delete,insert as
    03 begin
    04 exec P_UpdateNebulaScore
    05 end
    06
    07 create proc P_UpdateNebulaScore as
    08 begin
    09
    10 delete nebula.Nebula.dbo.taskplaning;--注意
    11 insert into nebula.Nebula.dbo.taskplaning--注意
    12 select case [任务型态] when '投-知识库学习' then '学习' when '投-知识库发展' then '发展' end tasktype,case 节点负责人 when '姚亮' then '姚亮' else substring(节点负责人,3,100) end taskman,年度 year,isnull(m01,0) m01,isnull(m02,0) m02,isnull(m03,0) m03,isnull(m04,0) m04,isnull(m05,0) m05,isnull(m06,0) m06,isnull(m07,0) m07,isnull(m08,0) m08,isnull(m09,0) m09,isnull(m10,0) m10,isnull(m11,0) m11,isnull(m12,0) m12,合计 total
    13 from Y_TaskScoreplanning
    14 where ([任务型态]='投-知识库学习' or [任务型态]='投-知识库发展' ) and 年度='2011'
    15 and substring(节点负责人,3,100) not in ('陆趣趣','姜敏','孙亚峰','魏文','梁晓东')
    16
    17 end

    问题三:更新157个人积分计划,测试,但杯具再次上演
    错误提示:
    该伙伴事务管理器已经禁止了它对远程/网络事务的支持
    解决方案:在两台服务器上同时执行如下操作




    执行完成后,再次测试,OK


    一个小小的问题,背后隐藏着三个大问题,特此一记!!!

  • 相关阅读:
    Mysql查询语句,select,inner/left/right join on,group by.....[例题及答案]
    Java IO实现文件(及文件夹)的复制 原创代码【精】
    [精华帖]Java接口怎么定义?如何使用?【实例讲解】
    Java面向对象中this关键字详解 意义+实例讲解【hot】
    linux系统编程之进程(三):进程复制fork,孤儿进程,僵尸进程
    linux系统编程之进程(二):进程生命周期与PCB(进程控制块)
    linux系统编程之进程(一):进程与程序
    linux系统编程之文件与IO(八):文件描述符相关操作-dup,dup2,fcntl
    linux系统编程之文件与IO(七):时间函数小结
    linux系统编程之文件与IO(六):实现ls -l功能
  • 原文地址:https://www.cnblogs.com/qidian10/p/1991540.html
Copyright © 2011-2022 走看看