问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

MSSQL数据库同步的SQL复制

发布网友 发布时间:2022-04-09 10:01

我来回答

2个回答

懂视网 时间:2022-04-09 14:23

 

[sql] view plain copy print?
  1. SELECT first_name, last_name FROM employees WHERE salary > 100000  

上面的例子很容易理解,我们不关心这些雇员记录从哪里来,我们所需要的只是那些高薪者的数据(译者注: salary>100000 )。

我们从哪儿学习到这些?

如果 SQL 语言这么简单,那么是什么让人们“闻 SQL 色变”?主要的原因是:我们潜意识中的是按照命令式编程的思维方式思考问题的。就好像这样:“电脑,先执行这一步,再执行那一步,但是在那之前先检查一下是否满足条件 A 和条件 B ”。例如,用变量传参、使用循环语句、迭代、调用函数等等,都是这种命令式编程的思维惯式。

2、 SQL 的语法并不按照语法顺序执行

SQL 语句有一个让大部分人都感到困惑的特性,就是:SQL 语句的执行顺序跟其语句的语法顺序并不一致。SQL 语句的语法顺序是:

  • SELECT[DISTINCT]
  • FROM
  • WHERE
  • GROUP BY
  • HAVING
  • UNION
  • ORDER BY
  • 为了方便理解,上面并没有把所有的 SQL 语法结构都列出来,但是已经足以说明 SQL 语句的语法顺序和其执行顺序完全不一样,就以上述语句为例,其执行顺序为:

  • FROM
  • WHERE
  • GROUP BY
  • HAVING
  • SELECT
  • DISTINCT
  • UNION
  • ORDER BY
  • 关于 SQL 语句的执行顺序,有三个值得我们注意的地方:

    1、 FROM 才是 SQL 语句执行的第一步,并非 SELECT 。数据库在执行 SQL 语句的第一步是将数据从硬盘加载到数据缓冲区中,以便对这些数据进行操作。(译者注:原文为“The first thing that happens is loading data from the disk into memory, in order to operate on such data.”,但是并非如此,以 Oracle 等常用数据库为例,数据是从硬盘中抽取到数据缓冲区中进行操作。)

    2、 SELECT 是在大部分语句执行了之后才执行的,严格的说是在 FROM 和 GROUP BY 之后执行的。理解这一点是非常重要的,这就是你不能在 WHERE 中使用在 SELECT 中设定别名的字段作为判断条件的原因。

     

    [sql] view plain copy print?
    1. SELECT A.x + A.y AS z  
    2. FROM A  
    3. WHERE z = 10   

     

    [sql] view plain copy print?
    1. z在此处不可用,因为SELECT是最后执行的语句!  
    如果你想重用别名z,你有两个选择。要么就重新写一遍 z 所代表的表达式: [sql] view plain copy print?
    1. SELECT A.x + A.y AS z  
    2. FROM A  
    3. WHERE (A.x + A.y) = 10  

    …或者求助于衍生表、通用数据表达式或者视图,以避免别名重用。请看下文中的例子。

    3、 无论在语法上还是在执行顺序上, UNION 总是排在在 ORDER BY 之前。很多人认为每个 UNION 段都能使用 ORDER BY 排序,但是根据 SQL 语言标准和各个数据库 SQL 的执行差异来看,这并不是真的。尽管某些数据库允许 SQL 语句对子查询(subqueries)或者派生表(derived tables)进行排序,但是这并不说明这个排序在 UNION 操作过后仍保持排序后的顺序。

    注意:并非所有的数据库对 SQL 语句使用相同的解析方式。如 MySQL、PostgreSQL和 SQLite 中就不会按照上面第二点中所说的方式执行。

    我们学到了什么?

    既然并不是所有的数据库都按照上述方式执行 SQL 预计,那我们的收获是什么?我们的收获是永远要记得: SQL 语句的语法顺序和其执行顺序并不一致,这样我们就能避免一般性的错误。如果你能记住 SQL 语句语法顺序和执行顺序的差异,你就能很容易的理解一些很常见的 SQL 问题。

    当然,如果一种语言被设计成语法顺序直接反应其语句的执行顺序,那么这种语言对程序员是十分友好的,这种编程语言层面的设计理念已经被微软应用到了 LINQ 语言中。

    3、 SQL 语言的核心是对表的引用(table references)

    由于 SQL 语句语法顺序和执行顺序的不同,很多同学会认为SELECT 中的字段信息是 SQL 语句的核心。其实真正的核心在于对表的引用。

    根据 SQL 标准,FROM 语句被定义为:

    [sql] view plain copy print?
    1. <fromclause> ::= FROM<tablereference> [ { <comma> <tablereference> }... ]  

    FROM 语句的“输出”是一张联合表,来自于所有引用的表在某一维度上的联合。我们们慢慢来分析:

     

    [sql] view plain copy print?
    1. FROM a, b  

    上面这句 FROM 语句的输出是一张联合表,联合了表 a 和表 b 。如果 a 表有三个字段, b 表有 5 个字段,那么这个“输出表”就有 8 ( =5+3)个字段。

    这个联合表里的数据是 a*b,即 a 和 b 的笛卡尔积。换句话说,也就是 a 表中的每一条数据都要跟 b 表中的每一条数据配对。如果 a 表有3 条数据, b 表有 5 条数据,那么联合表就会有 15 ( =5*3)条数据。

    FROM 输出的结果被 WHERE 语句筛选后要经过 GROUP BY 语句处理,从而形成新的输出结果。我们后面还会再讨论这方面问题。

    如果我们从集合论(关系代数)的角度来看,一张数据库的表就是一组数据元的关系,而每个 SQL 语句会改变一种或数种关系,从而产生出新的数据元的关系(即产生新的表)。

    我们学到了什么?

    思考问题的时候从表的角度来思考问题提,这样很容易理解数据如何在 SQL 语句的“流水线”上进行了什么样的变动。

    4、 灵活引用表能使 SQL 语句变得更强大

    灵活引用表能使 SQL 语句变得更强大。一个简单的例子就是 JOIN 的使用。严格的说 JOIN 语句并非是 SELECT 中的一部分,而是一种特殊的表引用语句。 SQL 语言标准中表的连接定义如下:

     

    [sql] view plain copy print?
    1. <tablereference> ::= <tablename> | <derived table> | <joined table>  

    就拿之前的例子来说:

     

    [sql] view plain copy print?
    1. FROM a, b  

    a 可能输如下表的连接:

     

    [sql] view plain copy print?
    1. a1 JOIN a2 ON a1.id = a2.id  

    将它放到之前的例子中就变成了:

     

    [sql] view plain copy print?
    1. a1 JOIN a2 ON a1.id = a2.id  

    尽管将一个连接表用逗号跟另一张表联合在一起并不是常用作法,但是你的确可以这么做。结果就是,最终输出的表就有了 a1+a2+b 个字段了。

    (译者注:原文这里用词为 degree ,译为维度。如果把一张表视图化,我们可以想象每一张表都是由横纵两个维度组成的,横向维度即我们所说的字段或者列,英文为columns;纵向维度即代表了每条数据,英文为 record ,根据上下文,作者这里所指的应该是字段数。)

    在 SQL 语句中派生表的应用甚至比表连接更加强大,下面我们就要讲到表连接。

    我们学到了什么?

    思考问题时,要从表引用的角度出发,这样就很容易理解数据是怎样被 SQL 语句处理的,并且能够帮助你理解那些复杂的表引用是做什么的。

    更重要的是,要理解 JOIN 是构建连接表的关键词,并不是 SELECT 语句的一部分。有一些数据库允许在 INSERT 、 UPDATE 、 DELETE 中使用 JOIN 。

    5、 SQL 语句中推荐使用表连接

    我们先看看刚刚这句话:

     

    [sql] view plain copy print?
    1. FROM a, b  

    高级 SQL 程序员也许学会给你忠告:尽量不要使用逗号来代替 JOIN 进行表的连接,这样会提高你的 SQL 语句的可读性,并且可以避免一些错误。

    利用逗号来简化 SQL 语句有时候会造成思维上的混乱,想一下下面的语句:

    [sql] view plain copy print?
    1. FROM a, b, c, d, e, f, g, h  
    2. WHERE a.a1 = b.bx  
    3. AND a.a2 = c.c1  
    4. AND d.d1 = b.bc  
    5. -- etc...  

    我们不难看出使用 JOIN 语句的好处在于:

  • 安全。 JOIN 和要连接的表离得非常近,这样就能避免错误。
  • 更多连接的方式,JOIN 语句能去区分出来外连接和内连接等。
  • 我们学到了什么?

    记着要尽量使用 JOIN 进行表的连接,永远不要在 FROM 后面使用逗号连接表。

    6、 SQL 语句中不同的连接操作

    SQL 语句中,表连接的方式从根本上分为五种:

  • EQUI JOIN
  • SEMI JOIN
  • ANTI JOIN
  • CROSS JOIN
  • DIVISION
  • EQUI JOIN

    这是一种最普通的 JOIN 操作,它包含两种连接方式:

  • INNER JOIN(或者是 JOIN )
  • OUTER JOIN(包括: LEFT 、 RIGHT、 FULL OUTER JOIN)
  • 用例子最容易说明其中区别:

    [sql] view plain copy print?
    1. -- This table reference contains authors and their books.  
    2. -- There is one record for each book and its author.  
    3. -- authors without books are NOT included  
    4. author JOIN book ON author.id = book.author_id  
    5.    
    6. -- This table reference contains authors and their books  
    7. -- There is one record for each book and its author.  
    8. -- ... OR there is an "empty" record for authors without books  
    9. -- ("empty" meaning that all book columns are NULL)  
    10. author LEFT OUTER JOIN book ON author.id = book.author_id  

    SEMI JOIN

    这种连接关系在 SQL 中有两种表现方式:使用 IN,或者使用 EXISTS。“ SEMI ”在拉丁文中是“半”的意思。这种连接方式是只连接目标表的一部分。这是什么意思呢?再想一下上面关于作者和书名的连接。我们想象一下这样的情况:我们不需要作者 / 书名这样的组合,只是需要那些在书名表中的书的作者信息。那我们就能这么写:

    [sql] view plain copy print?
    1. -- Using IN  
    2. FROM author  
    3. WHERE author.id IN (SELECT book.author_id FROM book)  
    4.    
    5. -- Using EXISTS  
    6. FROM author  
    7. WHERE EXISTS (SELECT FROM book WHERE book.author_id = author.id)  

    尽管没有严格的规定说明你何时应该使用 IN ,何时应该使用 EXISTS ,但是这些事情你还是应该知道的:

  • IN比 EXISTS 的可读性更好
  • EXISTS 比IN 的表达性更好(更适合复杂的语句)
  • 二者之间性能没有差异(但对于某些数据库来说性能差异会非常大)
  • 因为使用 INNER JOIN 也能得到书名表中书所对应的作者信息,所以很多初学者机会认为可以通过 DISTINCT 进行去重,然后将 SEMI JOIN 语句写成这样:

     

    [sql] view plain copy print?
    1. -- Find only those authors who also have books  
    2. SELECT DISTINCT first_name, last_name  
    3. FROM author  
    4. JOIN book ON author.id = book.author_id  

    这是一种很糟糕的写法,原因如下:

  • SQL 语句性能低下:因为去重操作( DISTINCT )需要数据库重复从硬盘中读取数据到内存中。(译者注: DISTINCT 的确是一种很耗费资源的操作,但是每种数据库对于 DISTINCT 的操作方式可能不同)。
  • 这么写并非完全正确:尽管也许现在这么写不会出现问题,但是随着 SQL 语句变得越来越复杂,你想要去重得到正确的结果就变得十分困难。
  • 更多的关于滥用 DISTINCT 的危害可以参考这篇博文

    (http://blog.jooq.org/2013/07/30/10-common-mistakes-java-developers-make-when-writing-sql/)。

    ANTI JOIN

    这种连接的关系跟 SEMI JOIN 刚好相反。在 IN 或者 EXISTS 前加一个 NOT 关键字就能使用这种连接。举个例子来说,我们列出书名表里没有书的作者:

     

    [sql] view plain copy print?
    1. -- Using IN  
    2. FROM author  
    3. WHERE author.id NOT IN (SELECT book.author_id FROM book)  
    4.    
    5. -- Using EXISTS  
    6. FROM author  
    7. WHERE NOT EXISTS (SELECT FROM book WHERE book.author_id = author.id)  

    关于性能、可读性、表达性等特性也完全可以参考 SEMI JOIN。

    这篇博文介绍了在使用 NOT IN 时遇到 NULL 应该怎么办,因为有一点背离本篇主题,就不详细介绍,有兴趣的同学可以读一下

    (http://blog.jooq.org/2012/01/27/sql-incompatibilities-not-in-and-null-values/)。

    CROSS JOIN

    这个连接过程就是两个连接的表的乘积:即将第一张表的每一条数据分别对应第二张表的每条数据。我们之前见过,这就是逗号在 FROM 语句中的用法。在实际的应用中,很少有地方能用到 CROSS JOIN,但是一旦用上了,你就可以用这样的 SQL语句表达:

    [sql] view plain copy print?
    1. -- Combine every author with every book  
    2. author CROSS JOIN book  

    DIVISION

    DIVISION 的确是一个怪胎。简而言之,如果 JOIN 是一个乘法运算,那么 DIVISION 就是 JOIN 的逆过程。DIVISION 的关系很难用 SQL 表达出来,介于这是一个新手指南,解释 DIVISION 已经超出了我们的目的。但是有兴趣的同学还是可以来看看这三篇文章

    (http://blog.jooq.org/2012/03/30/advanced-sql-relational-division-in-jooq/)

    (http://en.wikipedia.org/wiki/Relational_algebra#Division)

    (https://www.simple-talk.com/sql/t-sql-programming/divided-we-stand-the-sql-of-relational-division/)。

    推荐阅读 →_→ 《画图解释SQL联合语句》

    我们学到了什么?

    学到了很多!让我们在脑海中再回想一下。 SQL 是对表的引用, JOIN 则是一种引用表的复杂方式。但是 SQL 语言的表达方式和实际我们所需要的逻辑关系之间是有区别的,并非所有的逻辑关系都能找到对应的 JOIN 操作,所以这就要我们在平时多积累和学习关系逻辑,这样你就能在以后编写 SQL 语句中选择适当的 JOIN 操作了。

    7、 SQL 中如同变量的派生表

    在这之前,我们学习到过 SQL 是一种声明性的语言,并且 SQL 语句中不能包含变量。但是你能写出类似于变量的语句,这些就叫做派生表:

    说白了,所谓的派生表就是在括号之中的子查询:

    [sql] view plain copy print?
    1. -- A derived table  
    2. FROM (SELECT * FROM author)  

    需要注意的是有些时候我们可以给派生表定义一个相关名(即我们所说的别名)。

    [sql] view plain copy print?
    1. -- A derived table with an alias  
    2. FROM (SELECT * FROM author) a  

    派生表可以有效的避免由于 SQL 逻辑而产生的问题。举例来说:如果你想重用一个用 SELECT 和 WHERE 语句查询出的结果,这样写就可以(以 Oracle 为例):

     

    [sql] view plain copy print?
    1. -- Get authors‘ first and last names, and their age in days  
    2. SELECT first_name, last_name, age  
    3. FROM(  
    4.   SELECT first_name, last_name, current_date- date_of_birth age  
    5.   FROM author  
    6. )  
    7. --If the age is greater than 10000 days  
    8. WHERE age > 10000  

    需要我们注意的是:在有些数据库,以及 SQL : 1990 标准中,派生表被归为下一级——通用表语句( common table experssion)。这就允许你在一个 SELECT 语句中对派生表多次重用。上面的例子就(几乎)等价于下面的语句:

    [sql] view plain copy print?
    1. WITH a AS(  
    2.   SELECT first_name, last_name, current_date- date_of_birth age  
    3.   FROM author  
    4. )  
    5. SELECT * FROM a WHERE age > 10000  

    当然了,你也可以给“ a ”创建一个单独的视图,这样你就可以在更广泛的范围内重用这个派生表了。更多信息可以阅读下面的文章(http://en.wikipedia.org/wiki/View_%28SQL%29)。

    我们学到了什么?

    我们反复强调,大体上来说 SQL 语句就是对表的引用,而并非对字段的引用。要好好利用这一点,不要害怕使用派生表或者其他更复杂的语句。

    8、 SQL 语句中 GROUP BY 是对表的引用进行的操作

    让我们再回想一下之前的 FROM 语句:

    [sql] view plain copy print?
    1. FROM a, b  

    现在,我们将 GROUP BY 应用到上面的语句中:

    [sql] view plain copy print?
    1. GROUP BY A.x, A.y, B.z  

    上面语句的结果就是产生出了一个包含三个字段的新的表的引用。我们来仔细理解一下这句话:当你应用 GROUP BY 的时候, SELECT 后没有使用聚合函数的列,都要出现在 GROUP BY 后面。(译者注:原文大意为“当你是用 GROUP BY 的时候,你能够对其进行下一级逻辑操作的列会减少,包括在 SELECT 中的列”)。

  • 需要注意的是:其他字段能够使用聚合函数:
  • [sql] view plain copy print?
    1. SELECT A.x, A.y, SUM(A.z)  
    2. FROM A  
    3. GROUP BY A.x, A.y  
  • 还有一点值得留意的是: MySQL 并不坚持这个标准,这的确是令人很困惑的地方。(译者注:这并不是说 MySQL 没有 GROUP BY 的功能)但是不要被 MySQL 所迷惑。 GROUP BY 改变了对表引用的方式。你可以像这样既在 SELECT 中引用某一字段,也在 GROUP BY 中对其进行分组。
  • 我们学到了什么?

    GROUP BY,再次强调一次,是在表的引用上进行了操作,将其转换为一种新的引用方式。

    9、 SQL 语句中的 SELECT 实质上是对关系的映射

    我个人比较喜欢“映射”这个词,尤其是把它用在关系代数上。(译者注:原文用词为 projection ,该词有两层含义,第一种含义是预测、规划、设计,第二种意思是投射、映射,经过反复推敲,我觉得这里用映射能够更直观的表达出 SELECT 的作用)。一旦你建立起来了表的引用,经过修改、变形,你能够一步一步的将其映射到另一个模型中。 SELECT 语句就像一个“投影仪”,我们可以将其理解成一个将源表中的数据按照一定的逻辑转换成目标表数据的函数。

    通过 SELECT语句,你能对每一个字段进行操作,通过复杂的表达式生成所需要的数据。

    SELECT 语句有很多特殊的规则,至少你应该熟悉以下几条:

    1. 你仅能够使用那些能通过表引用而得来的字段;
    2. 如果你有 GROUP BY 语句,你只能够使用 GROUP BY 语句后面的字段或者聚合函数;
    3. 当你的语句中没有 GROUP BY 的时候,可以使用开窗函数代替聚合函数;
    4. 当你的语句中没有 GROUP BY 的时候,你不能同时使用聚合函数和其它函数;
    5. 有一些方法可以将普通函数封装在聚合函数中;
    6. ……

    一些更复杂的规则多到足够写出另一篇文章了。比如:为何你不能在一个没有 GROUP BY 的 SELECT 语句中同时使用普通函数和聚合函数?(上面的第 4 条)

    原因如下:

    1. 凭直觉,这种做法从逻辑上就讲不通。
    2. 如果直觉不能够说服你,那么语法肯定能。 SQL : 1999 标准引入了 GROUPING SETS,SQL: 2003 标准引入了 group sets : GROUP BY() 。无论什么时候,只要你的语句中出现了聚合函数,而且并没有明确的 GROUP BY 语句,这时一个不明确的、空的 GROUPING SET 就会被应用到这段 SQL 中。因此,原始的逻辑顺序的规则就被打破了,映射(即 SELECT )关系首先会影响到逻辑关系,其次就是语法关系。(译者注:这段话原文就比较艰涩,可以简单理解如下:在既有聚合函数又有普通函数的 SQL 语句中,如果没有 GROUP BY 进行分组,SQL 语句默认视整张表为一个分组,当聚合函数对某一字段进行聚合统计的时候,引用的表中的每一条 record 就失去了意义,全部的数据都聚合为一个统计值,你此时对每一条 record 使用其它函数是没有意义的)。

    糊涂了?是的,我也是。我们再回过头来看点浅显的东西吧。

    我们学到了什么?

    SELECT 语句可能是 SQL 语句中最难的部分了,尽管他看上去很简单。其他语句的作用其实就是对表的不同形式的引用。而 SELECT 语句则把这些引用整合在了一起,通过逻辑规则将源表映射到目标表,而且这个过程是可逆的,我们可以清楚的知道目标表的数据是怎么来的。

    想要学习好 SQL 语言,就要在使用 SELECT 语句之前弄懂其他的语句,虽然 SELECT 是语法结构中的第一个关键词,但它应该是我们最后一个掌握的。

    10、 SQL 语句中的几个简单的关键词: DISTINCT , UNION , ORDER BY 和 OFFSET

    在学习完复杂的 SELECT 豫剧之后,我们再来看点简单的东西:

  • 集合运算( DISTINCT 和 UNION )
  • 排序运算( ORDER BY,OFFSET…FETCH)
  • 集合运算( set operation):

    集合运算主要操作在于集合上,事实上指的就是对表的一种操作。从概念上来说,他们很好理解:

  • DISTINCT 在映射之后对数据进行去重
  • UNION 将两个子查询拼接起来并去重
  • UNION ALL 将两个子查询拼接起来但不去重
  • EXCEPT 将第二个字查询中的结果从第一个子查询中去掉
  • INTERSECT 保留两个子查询中都有的结果并去重
  • 排序运算( ordering operation):

    排序运算跟逻辑关系无关。这是一个 SQL 特有的功能。排序运算不仅在 SQL 语句的最后,而且在 SQL 语句运行的过程中也是最后执行的。使用 ORDER BY 和 OFFSET…FETCH 是保证数据能够按照顺序排列的最有效的方式。其他所有的排序方式都有一定随机性,尽管它们得到的排序结果是可重现的。

    OFFSET…SET是一个没有统一确定语法的语句,不同的数据库有不同的表达方式,如 MySQL 和 PostgreSQL 的 LIMIT…OFFSET、SQL Server 和 Sybase 的 TOP…START AT 等。具体关于 OFFSET..FETCH 的不同语法可以参考这篇文章

    (http://www.jooq.org/doc/3.1/manual/sql-building/sql-statements/select-statement/limit-clause/)。

    让我们在工作中尽情的使用 SQL!

    正如其他语言一样,想要学好 SQL 语言就要大量的练习。上面的 10 个简单的步骤能够帮助你对你每天所写的 SQL 语句有更好的理解。另一方面来讲,从平时常见的错误中也能积累到很多经验。下面的两篇文章就是介绍一些 JAVA 和其他开发者所犯的一些常见的 SQL 错误:

  • 10 Common Mistakes Java Developers Make when Writing SQL
  • 10 More Common Mistakes Java Developers Make when Writing SQL
  • 本文转自伯乐在线,

    热心网友 时间:2022-04-09 11:31

    SQL复制的基本元素包括
    出版服务器、订阅服务器、分发服务器、出版物、文章
    SQL复制的工作原理
    SQLSERVER主要采用出版物、订阅的方式来处理复制。源数据所在的服务器是出版服务器,负责发表数据。出版服务器把要发表的数据的所有改变情况的拷贝复制到分发服务器,分发服务器包含有一个分发数据库,可接收数据的所有改变,并保存这些改变,再把这些改变分发给订阅服务器
    SQLSERVER复制技术类型
    SQLSERVER提供了三种复制技术,分别是:
    1、快照复制(呆会我们就使用这个)
    2、事务复制
    3、合并复制
    只要把上面这些概念弄清楚了那么对复制也就有了一定的理解。接下来我们就一步一步来实现复制的步骤。 第一先来配置出版服务器
    (1)选中指定[服务器]节点
    (2)从[工具]下拉菜单的[复制]子菜单中选择[发布、订阅服务器和分发]命令
    (3)系统弹出一个对话框点[下一步]然后看着提示一直操作到完成。
    (4)当完成了出版服务器的设置以后系统会为该服务器的树形结构中添加一个复制监视器。同时也生成一个分发数据库(distribution) 第二创建出版物
    (1)选中指定的服务器
    (2)从[工具]菜单的[复制]子菜单中选择[创建和管理发布]命令。此时系统会弹出一个对话框
    (3)选择要创建出版物的数据库,然后单击[创建发布]
    (4)在[创建发布向导]的提示对话框中单击[下一步]系统就会弹出一个对话框。对话框上的内容是复制的三个类型。我们现在选第一个也就是默认的快照发布(其他两个大家可以去看看帮助)
    (5)单击[下一步]系统要求指定可以订阅该发布的数据库服务器类型,SQLSERVER允许在不同的数据库如ORACLE或ACCESS之间进行数据复制。但是在这里我们选择运行SQLSERVER2000的数据库服务器
    (6)单击[下一步]系统就弹出一个定义文章的对话框也就是选择要出版的表
    (7)然后[下一步]直到操作完成。当完成出版物的创建后创建出版物的数据库也就变成了一个共享数据库。 第三设计订阅
    (1)选中指定的订阅服务器
    (2)从[工具]下拉菜单中选择[复制]子菜单的[请求订阅]
    (3)按照单击[下一步]操作直到系统会提示检查SQLSERVER代理服务的运行状态,执行复制操作的前提条件是SQLSERVER代理服务必须已经启动。
    (4)单击[完成]。完成订阅操作。
    完成上面的步骤其实复制也就是成功了。但是如何来知道复制是否成功了呢?这里可以通过这种方法来快速看是否成功。展开出版服务器下面的复制——发布内容——右键发布内容——属性——击活——状态然后点立即运行代理程序接着点代理程序属性击活调度把调度设置为每一天发生,每一分钟,在0:00:00和23:59:59之间。接下来就是判断复制是否成功了打开C:/ProgramFiles/MicrosoftSQLServer/MSSQL/REPLDATA/unc/XIAOWANGZI_database_database下面看是不是有一些以时间做为文件名的文件夹差不多一分中就产生一个。要是你还不信的话就打开你的数据库看在订阅的服务器的指定订阅数据库下看是不是看到了你刚才所发布的表—

    声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
    QQ视频过期了怎么恢复正常呢? 有没有酒友买了曜隐今年那款牛年纪念版酱酒啊,想问一下这个纪念版的包装... 买过曜隐酱酒的朋友觉得他们的包装怎么样呀,看起来高端显品位吗?_百 ... 最近收到客户送的一瓶曜隐酱酒,觉得这个酒的瓶盖很有特色哇,大家知道... 我的用Psiloc irRemote不知道这么用 TOSHIBA东芝55U3800C PRO液晶电视推荐 电视设置了每天12点定时关机,有一天11点就提前手动关电视了,定时设置需 ... 变频器维修,维修变频器电路板 建行帐号指的是什么 癌症临床表现 癌症的症状有哪些 和平精英可以转号吗之前注销了和平精英登不上了怎么办 注销了能重新注册吗? 和平精英可以转号吗之前注销了和平精英登不上了怎么办- 问一问 可以注销了再重新申请吗? 注销后,用此微信登陆的和平精英账号会不会一起被注销? 玩和平精英那个已被注销怎么才能找回原来的那个和平精英? 哪位大神有Speed Box(桌面快捷盒子) V21.6.27 最新版软件百度云资源 电脑里怎么把问财全能盒子放在桌面上? 如何把电脑桌面用网络机顶盒显示出来 怎样简化电脑桌面上的东西都放进一个盒子里边? sql语言的理解 新手在学习c语言并编译程序时编译错误怎么办 新手初学C语言C++怎么选择编译器 重力势能和自由落体实验 为了研究重力势能的大小跟物体的质量和高度有关,小明做了实验 为了更好地理解动能.重力势能和机械能的概念,小明设计了一个简单的实验,如图4所示.请帮小明一起回答 为了探究“重力势能大小的决定因素“,老师给每个小组提供了一个空矿泉水瓶、一烧杯水和一盘沙.设计实验 重力势能大小与物体被举高度有关实验 帮我找几个关于动能转化成重力势能的几个有趣的实验 如图是“探究重力势能大小与哪些因素有关的实验. (1)该实验是通过比较______来判断重力势能的大小 玩和平精英那个已被注销怎么才能找回原来的那个和平精英? 上门龙婿安家有多少资产 鲫鱼怎么做最好吃 如何理解SQL这个软件的作用? OPPOr11Pluskt和OPPOr11plus能用一个手机壳吗 OPPOR11pluskt可以用oppor11plus手机壳吗? OPPO R11plusk可以用OPPO R11plus的手机壳吧 OPPO R11 plus的手机壳可以安在OPPO R11 plusk上吗? r11plus与r11plusk和r11pluskt手机壳通用吗 OPPO R11PLUS和OPPO R11plusk的手机壳背后的标识是一样的吗???? 瑶柱是什么做的 瑶柱粥中的瑶柱是什么? SQL数据库命令怎么更容易理解? 瑶柱哪个牌子、哪个产地的好?谢谢哦 菠萝怎么切比较容易啊?有没有菠萝的切法啊? 哪里产的瑶柱最好?如题 谢谢了 一双美脚从水里窜出一群大老爷们是什么电影? 古力娜扎穿樱花粉裙晒美腿,这身材站姿太绝了,对此你怎么看? 有没有啥好看的轮回类的电影?给推荐下呗大家。 鲨鱼吃人电影,有喝海水情节