SQL Server提供了多种读写分离的机制,这里只介绍下发布和订阅的方式,因为博主只用过这种形式,SQL Server 2012中新增的功能Always On也可以实现。
快照发布
快照复制是完全按照数据和
数据库对象出现时的状态来复制和分发它们的过程。快照复制不需要连续地监控数据变化,因为已发布数据的变化不被增量地传播到订阅服务器,而是周期性的被一次复制。
a.本地发布:要启动SQL Server代理
1.MyBookShop是主数据库,MyBookShop_R是被同步的数据库既辅数据库,现在可以看出主数据库比辅数据库多两条数据,现在我们把这两条数据通过发布快照的方式同步过去。
![](https://i-blog.csdnimg.cn/blog_migrate/062b1d33990720dbeeff9b9f64823ee0.png)
2.
![](https://i-blog.csdnimg.cn/blog_migrate/2293da4e61434836c8a255f7c96cdb1b.png)
3.
![](https://i-blog.csdnimg.cn/blog_migrate/a0e876feb478772553e65a3c72fac43a.png)
4.
![](https://i-blog.csdnimg.cn/blog_migrate/b439f7c4b2ed0965db57427b506846ed.png)
5.
![](https://i-blog.csdnimg.cn/blog_migrate/dca4d6c2acead4252da67a9390fed3ce.png)
6.可以在“计划在下时间运行快照代理”中设置运行时间,快照并非实时同步更新数据库,所以可以设置个时间,也可以不设置,只同步一次就行。
![](https://i-blog.csdnimg.cn/blog_migrate/2d0fb819dc4f76afbdac99d735ba7c93.png)
7.点击安全设置
![](https://i-blog.csdnimg.cn/blog_migrate/c6282db8bf6eb7347fa7ee187b7439c4.png)
8.
![](https://i-blog.csdnimg.cn/blog_migrate/01ade92d0ad396d12ccec2d1ebeae18a.png)
9.
![](https://i-blog.csdnimg.cn/blog_migrate/c13e5a8064c5712e1749cfa2a96a18e8.png)
10.
![](https://i-blog.csdnimg.cn/blog_migrate/0a8ab46500784d4eb562ca5c70b9c1ae.png)
11.
![](https://i-blog.csdnimg.cn/blog_migrate/6fbb6f8f90c197930c41968d08b830de.png)
12.
![](https://i-blog.csdnimg.cn/blog_migrate/08f497828071ad1650dd82fb1ec7a0b9.png)
13.创建成功
![](https://i-blog.csdnimg.cn/blog_migrate/6e11c18abfe1f6bb11b82e0fcd4f2aeb.png)
b.本地订阅
1.
![](https://i-blog.csdnimg.cn/blog_migrate/190e7215c877ffcba2562b89e5494422.png)
2.
![](https://i-blog.csdnimg.cn/blog_migrate/ae08621f276b7d4b88c710bc227a5e0a.png)
3.
![](https://i-blog.csdnimg.cn/blog_migrate/1a5da4afb4f56801141253531bc3d338.png)
4.
![](https://i-blog.csdnimg.cn/blog_migrate/9a250e7e68b48054543ad249d49d5825.png)
5.
![](https://i-blog.csdnimg.cn/blog_migrate/eefad6ed075003180b0ea501a5886089.png)
6.
![](https://i-blog.csdnimg.cn/blog_migrate/80c54c696699cf7ef53ed89328c63709.png)
7.
![](https://i-blog.csdnimg.cn/blog_migrate/4c61b7d52f1e0b57055780e31c58aefe.png)
8.
![](https://i-blog.csdnimg.cn/blog_migrate/b507bd7728e80df6ed0498a850739aed.png)
9.
![](https://i-blog.csdnimg.cn/blog_migrate/f75595dceb6973d01e45aeedfaea1d6b.png)
10.
![](https://i-blog.csdnimg.cn/blog_migrate/1a77961aebc2e48675e1ba007bec5a2c.png)
11.
![](https://i-blog.csdnimg.cn/blog_migrate/1e1dda48cd575facc1f1a272fe55d828.png)
12.
![](https://i-blog.csdnimg.cn/blog_migrate/b8be68be9f35798e44d98cab79339bda.png)
13.
![](https://i-blog.csdnimg.cn/blog_migrate/bb9a761d7732e835e085c9ae8e093180.png)
14.刷新显示订阅
![](https://i-blog.csdnimg.cn/blog_migrate/55f1987d77fa6978c4a9f230fba2f381.png)
16.重新查询数据库,看看有没有同步过去
注:如果主数据库添加数据,辅数据库不会实时同步过去,除非重新启动代理或者到了作业执行的时间才会再次同步,如果想要数据实时同步[说是实时也会有几秒延迟,没有绝对的实时同步]到辅数据库就用事物发布而非快照发布
![](https://i-blog.csdnimg.cn/blog_migrate/611d3c3502f169e05b825aa2f1ace2ec.png)
事务发布
事务发布的方法和快照发布基本相同,事务发布可以实时更新数据,当添加、修改或者删除一条数据时,主数据库上的变动会实时同步到辅数据库【有几秒延迟】;
事务发布可以实现读写分离,主库发布事务,多台辅库订阅,辅库要设置成只读模式;