分布式分区视图创建

简介:
--=====================================
--分布式分区视图创建

--分布式分获视图的主要作用是:可以把一个数据库中的
--一个大表按照一定的条件分布到不同的多个数据库中
--这样可以减少单台服务器的压力。并且,如果所要查询的
--数据只在一台服务器上,则只会查询所需要的服务器
--但,分布式分区视图的最大缺点是受网络状况的影响
--比较大。
--author:boyi55,date:2006-12-14
--环境:两台2003服务器,sql server 2000
--引用请注明出处
--=====================================
昨天因为版本问题搞的很是郁闷,晚上也没睡好觉。今天起了个大早,还好把这个问题搞好了。下面一步一步的说一下我的做法吧!
因为我只是简单的测试环境,所以一切都比较简单。我的两台服务器名称分别为:computer和boyi55,首先,分别在两个sql server上建test数据库:
--===============================
--create database on computer and boyi55
--===============================
create database test
分布式分区视图必须要用到check约束,并且,所定义的check约束必须是主键或者主键的一部分(也就是说表中必须要有主键)约束的条件必须不能有重复。下面是我建的两个表
--==============================
--create table
--==============================
--create table on computer
create table dpv1(dpvid int not null primary key,addr varchar(30) not null,
constraint ck_dpv  check(dpvid between 1 and 255))


--create table on boyi55
create table dpv1(dpvid int not null primary key,addr varchar(30) not null,
constraint ck_dpv  check(dpvid between 256 and 800))

--check中只能包含 between and or > 
下面在computer和boyi55上分别建立链接服务器dpv2和dpv1,这里我用的是oldb(具体过程略)
用sp_helpserver查看链接服务器是否成功建立,我的sql返回的结果为
--on computer
name  network_name status                                                   id   collation_name nnect_timeout query_timeout 
----- ------------ --------------------------------------------             ----  ------------- ------------ --------------
DPV2  NULL          data access,use remote collation,lazy schema validation   1   NULL                0             0 
--on boyi55

name  network_name status                                                   id   collation_name nnect_timeout query_timeout 
----- ------------ --------------------------------------------             ----  ------------- ------------ --------------
DPV1  NULL          data access,use remote collation,lazy schema validation   1   NULL                0             0 

分别在两个数据库中执行下面存储过程
--set lazy schema validation true
--on computer
sp_serveroption dpv2,'lazy schema validation,true
--on boyi55
sp_serveroption dpv1,'lazy schema validation,true
接着,分别在两个数据库上建立分区视图
--on computer
create view dpv_view
as
select dpvid,addr from dpv1
union all
select dpvid,addr from dpv2.test.dbo.dpv


-- on boyi55
create view dpv_view
as
select dpvid,addr from dpv1.test.dbo.dpv1
union all
select dpvid,addr from dpv

这时,select可以正常,说明视图已经成功创建,但是还不能做插入操作。
插入数据是会提示:
服务器: 消息 7391,级别 16,状态 1,行 1
该操作未能执行,因为 OLE DB 提供程序 'SQLOLEDB' 无法启动分布式事务。
[OLE/DB provider returned message: 新事务不能登记到指定的事务处理器中。 ]

这时我们要设置msdtc,具体方法为:
打开管理工具--->组件服务--->组件服务--->计算机--->我的电脑--->右击属性--->MSDTC--->安全配置--->选中“网络DTC访问”并选择“允许远程客户端”,“允许入站”,“允许出站”,“不要求进行验证”然后点确定。
另外还要注意一点,如果是在局域网里,要打开NETBIOS或者在HOSTS文件里加入IP地址和对应的主机名。否则还是不能进行插入操作的。
上面设置完成以后,进行插入和修改操作(:注意,一定要打开xact_abort 开关)
--on boyi55
set xact_abort on
insert into dpv_view (dpvid,addr)values(777,'boyi55')
set xact_abort off

--on computer
set xact_abort on
update dpv_view 
set dpvid=666
where dpvid=777

一切正常,说明分布式分区视图已经成功创建。










本文转自 boyi55 51CTO博客,原文链接:http://blog.51cto.com/boyi55/26947,如需转载请自行联系原作者
目录
相关文章
|
5月前
|
消息中间件 存储 缓存
分布式实时消息队列Kafka(三)生产分区规则
分布式实时消息队列Kafka(三)生产分区规则
41 0
分布式实时消息队列Kafka(三)生产分区规则
|
SQL 存储 算法
事务、全局索引、透明分布式,再见,分区健!
在刚刚发布的PolarDB-X 2.1.0版本中,开源了透明分布式能力,能带给用户完全不同的透明分布式数据库使用体验。其中,一个最明显的不同,就是用户不再需要关注分区健这个概念,这也是副标题《再见,分区健》的来由。
1165 0
事务、全局索引、透明分布式,再见,分区健!
|
16天前
|
NoSQL Java 关系型数据库
【Redis系列笔记】分布式锁
分布式锁:满足分布式系统或集群模式下多进程可见并且互斥的锁。 分布式锁的核心思想就是让大家都使用同一把锁,只要大家使用的是同一把锁,那么我们就能锁住线程,不让线程进行,让程序串行执行,这就是分布式锁的核心思路
117 2
|
1月前
|
NoSQL Java Redis
redis分布式锁
redis分布式锁
|
2月前
|
缓存 NoSQL Java
分布式项目中锁的应用(本地锁-_redis【setnx】-_redisson-_springcache)-fen-bu-shi-xiang-mu-zhong-suo-de-ying-yong--ben-de-suo--redissetnx-springcache-redisson(一)
分布式项目中锁的应用(本地锁-_redis【setnx】-_redisson-_springcache)-fen-bu-shi-xiang-mu-zhong-suo-de-ying-yong--ben-de-suo--redissetnx-springcache-redisson
60 0
|
11天前
|
监控 NoSQL 算法
探秘Redis分布式锁:实战与注意事项
本文介绍了Redis分区容错中的分布式锁概念,包括利用Watch实现乐观锁和使用setnx防止库存超卖。乐观锁通过Watch命令监控键值变化,在事务中执行修改,若键值被改变则事务失败。Java代码示例展示了具体实现。setnx命令用于库存操作,确保无超卖,通过设置锁并检查库存来更新。文章还讨论了分布式锁存在的问题,如客户端阻塞、时钟漂移和单点故障,并提出了RedLock算法来提高可靠性。Redisson作为生产环境的分布式锁实现,提供了可重入锁、读写锁等高级功能。最后,文章对比了Redis、Zookeeper和etcd的分布式锁特性。
118 16
探秘Redis分布式锁:实战与注意事项
|
13天前
|
NoSQL Java 大数据
介绍redis分布式锁
分布式锁是解决多进程在分布式环境中争夺资源的问题,与本地锁相似但适用于不同进程。以Redis为例,通过`setIfAbsent`实现占锁,加锁同时设置过期时间避免死锁。然而,获取锁与设置过期时间非原子性可能导致并发问题,解决方案是使用`setIfAbsent`的超时参数。此外,释放锁前需验证归属,防止误删他人锁,可借助Lua脚本确保原子性。实际应用中还有锁续期、重试机制等复杂问题,现成解决方案如RedisLockRegistry和Redisson。
|
13天前
|
缓存 NoSQL Java
【亮剑】分布式锁是保证多服务实例同步的关键机制,常用于互斥访问共享资源、控制访问顺序和系统保护,如何使用注解来实现 Redis 分布式锁的功能?
【4月更文挑战第30天】分布式锁是保证多服务实例同步的关键机制,常用于互斥访问共享资源、控制访问顺序和系统保护。基于 Redis 的分布式锁利用 SETNX 或 SET 命令实现,并考虑自动过期、可重入及原子性以确保可靠性。在 Java Spring Boot 中,可通过 `@EnableCaching`、`@Cacheable` 和 `@CacheEvict` 注解轻松实现 Redis 分布式锁功能。
|
15天前
|
NoSQL Redis 微服务
分布式锁_redis实现
分布式锁_redis实现
|
18天前
|
NoSQL Java Redis
Redis入门到通关之分布式锁Rediision
Redis入门到通关之分布式锁Rediision
15 0