Smart 3D 异地协同(SQL Server)项目的配置与管理
约 4973 个字 22 行代码 预计阅读时间 17 分钟
作者:李海英
概述
Smart 3D异地协同项目有着带宽需求低、数据库自身可以复制的低成本优势,允许全球范围内多个站点共享同一个模型中的所有数据,从而使多个工作地点(或者多家设计公司)在一个模型中进行设计工作。本文将简述异地协同项目的配置与管理。
异地协同项目的配置与拆除(SQL Server)
异地协同简介
异地协同项目是星形连接,Host端只有一个,Satellite端可以有1至多个。SDB、SDB_Schema、CDB、CDB_Schema只能Host → Satellite单向传递,MDB可以Host与Satellite双向传递。不同Satellite端的模型先传到Host,再通过Host向其他Satellite分发。
RDB、RDB_Schema、View不传递,需要Host、Satellite各自生成。ShareContent不传递,初始文件Satellite需与Host保持一致,如有更新需要双方手动更新。
S3D、SQL Server的版本需要Satellite与Host保持一致,SQL Server必须企业版,其他软件清单同work alone服务器。Host与Satellite的location由Host创建;用户的S3D访问权限由Host管理。
在进行下一步之前,先确保Host与Satellite DB 服务器可以相互Ping通。
数据库预设置
创建数据分发账户(共用账号)
将SQL登陆方式更改为混合验证登录,创建sa账号及密码,该账号作为Host、Satellite数据分发账户(共用账号),双方将该账号加入SQL的Login。不同卫星站点可以设置不同sa账号。
注册对方服务器
Host与Satellite分别在SQL Server Configuration Manager中添加别名。Alias Name:对方服务器名字,Port No:对方服务器开通的端口号,Server:对方服务器的IP地址,Protocol:默认的TCP/IP即可。启动SQL Server Agent,并将SQL Server Agent的启动方式改为自动。
在Microsoft SQL Server Management Studio中相互注册对方服务器。
Server name:对方服务器名字;Login、Password:公用账号、密码;Test成功后点击保存。此步骤如果不成功,检查SQL Server Agent状态是否为Running。
配置SQL Server为分发服务器
此步骤在Host与Satellite端服务器都要执行,每个服务器只执行一次,再次配置workshare时不需要重复此步骤。
在数据库中右键Replication,点击Configure Distribution…( 如果SQL不是企业版,此步骤无法进行),按照截图向下进行。
设置分发属性
在SSMS中, 右键点击, 然后点击Distributor Properties
选择General页,默认事务保留时间为3天,将时间更改至14天。
同样在General页,点击Profile Defaults,打开Agent Profiles界面后点击New,选择 Distribution Profile for OLEDB Streaming,点击OK。
命名该Agent Profiles为Sp3dProfile,对SkipErrors配置参数为2601:2627:50000:20598:532
选择这个新的profile,然后点击Change Existing Agents,SQL Server会更新所有的分发代理 使用这个配置文件。点击OK, 关闭界面。
完成以上步骤后,重启SQL Server和SQL Server Agent两个服务,注意两服务启动方式都是自动启动。
配置S3D异地协同
主站点配置S3D的异地协同
配置异地协同的项目可以是主站点已有的项目;也可以使用Dadabase Wizard 新建或恢复SDB,在PM里新建或恢复CDB及MDB、重新生成RDB等,参照普通项目即可。
在配置异地协同期间,该Plant涉及的所有主卫站点一定要暂停建库、设计等工作。
在主站点通过new location为卫星站点添加位置信息,Name:卫星站点的Location,Site server:卫星站点服务器名字,通过下拉箭头选择,Name rule ID会根据已有数目按顺序自动生成。
选中准备配置异地协同的Plant,点击右键,执行Duplicate Model for Workshare,将卫星站点的Location添加到右列,点击OK。
点击OK后会跳出生成脚本的进度条,完成后点击close。
在Temp文件夹下可以找到脚本文件夹,文件夹命名为:Replication_卫星站点location_项目名,将文件夹拷出,复制一份留底保存。
在Host端数据库服务器上运行脚本文件夹中的ToRunPreBackup.bat,完成无误后进行备份。
一定要确保脚本运行结束。可通过cmd运行,通常要等待3-5分钟,运行结束后会另起一行。该脚本会在Host端的数据库中创建对应的数据库分发。
将备份文件、sharecontent及脚本文件打包发给Satellite。之后在Host端数据库服务器上运行ToRunPreBackup_1.bat.
卫星站点恢复S3D
卫星站点拿到备份文件后,SDB通过database wizard进行恢复,需要注意的是,DB server选择卫星站点的数据库名字,Location需要与主站点新建的Locaton一致。
恢复CDB、MDB选择第一种恢复方式。
项目恢复完成以后,在卫星站点运行ToRunPostRestore_X.bat(X是除1以外的其他数字,与Location 中的Name rule ID一致),并检查日志。完成后即可通知Host进行数据库发布。
数据库的发布订阅
数据库的发布订阅只需在Host端执行,共五个数据库。根据数据传递方式不同分为两种方式,一种是单向传递的SDB、SDB_Schema、CDB和CDB_Schema,以SDB为例订阅操作如下:
对于单向传递的订阅,如果有多个卫星站点。可以通过Add Subscriber一次配置所有的卫星站点。
如果各卫星站点的分发代理账号或密码不一样,在输入代理信息时注意区分。
按照同样的步骤完成SDB_Schema、CDB和CDB_Schema数据库的订阅。
MDB是双向订阅,即主站点的模型可以传递至卫星站点,卫星站点的模型也可传递至主站点,配置流程如下:
MDB是双向订阅,创建订阅时间较单向订阅时间长,完成后点击close即可。
所有数据库完成订阅主站点如下图所示:
更改发布作业的Owner为分发账号:
主卫站点都重新生成RDB,至此,该异地协同项目配置完成。在此基础上增加第二个卫星站点,步骤同上。
需要注意的是,配置第二个卫星站点过程中,主站点、第一个卫星站点建库、设计等工作一定要暂停!
查看复制状态及设置邮件提醒
查看复制状态
选中Replication或Local Publications层级点击右键,运行Launch Replication Monitor,可查看数据库复制状态:
复制的状态共有四种:
-
如上图所示的正常运行状态;
-
触发数据复制的警告阈值,一般网络不佳导致数据传输拥堵时发生这种警告,检查订阅状态,留意接下来一段时间的复制,一般会自行恢复到正常状态; -
发布订阅报错,需要检查原因并及时处理,一般在数据库或作业等有权限问题时出现这种错误,这种问题可能出现在1至多个分发作业上; -
服务器连接错误,正在尝试恢复,如果一直显示重试失败,需要通过查看错误信息来检查问题原因。一般在VPN中断或主卫站点中一方断网时会出现这种错误状态,该问题需要尽快修复,超出一定时间后,即便网络恢复也需要重新配置异地协同。
只要不是正常运行状态,则需要查看错误详情及时处理解决。
另外,也可以在主卫站点查看对方服务器的分发状态:打开Monitor,右键点击My Publishers,选择Add Publisher
如果某个复制作业报错,点击右键,选择View Details,可以查看报错的详细信息及报错原因。
主卫站点都需要对数据复制情况进行日常监测,或者设置邮件提醒。
设置邮件提醒
首先要设置邮件服务器(参考:利用SQLServer数据库发送邮件)。如果是Windows Server2016的系统,则需要安装.net 3.5框架才能确保邮件服务正常工作。
打开Monitor,运行Configure Replication Alerts
选择Replication: agent failure,设置一个警报名字
勾选Notify oprator,点击new oprator,填入工作人员名字及邮箱
该界面勾选E-mail和Net dend,点击OK。
打开SQL Server Agent > Alerts,找到邮件点击Replication: agent failure,执行Enable
安装与配置Duss
不同站点的用户同时修改模型中有关联关系的对象时,SQL的Replication不能很好的处理S3D中对象的关系,需要Duss服务与SQL 的Replication服务一起处理。如果一个Plant只有一个站点进行设计工作(其他站点只预览、查看模型),这种情况下可以不安装Duss服务。
安装Duss
Duss服务不是必须安装在数据库服务器上,可以是应用服务器或碰撞检查服务器,要求这个机器已经安装了S3D,主卫站点都需要安装配置。
-
安装Duss前先添加环境变量:‘S3D installation folder’\Core\Runtime
-
DuplicationSyncService.exe的路径:‘S3D installation folder’\ProjectMgmt\Middle\bin
-
打开Command Prompt,定位至Duss路径运行安装命令:DuplicationSyncService.exe -i
-
卸载命令:DuplicationSyncService.exe -u
配置Duss
打开Services界面,找到服务S3D Duplication Synchronization Service,打开属性,将启动方式改为自动,登录账号更改为具有SQL权限且在本地管理员组中的账号,并在其他站点执行此操作。
打开Host端PM,右键点击Plant打开属性框,将相应的主卫站点Duss服务器名填入相应的位置,此操作只需在Host执行,信息会自动传递至Satellite端。
拆除卫星站点
操作前主卫站点先进行备份,主卫站点停止设计工作。打开主站点PM,选择需要拆除异地协同的项目,运行Consolidate Plant from Workshare
选中对应需要移除的卫星站点,点击OK。
打开SQL中的发布订阅,执行Delete,
重复以上步骤,分别在主卫站点依次删除发布与订阅,当主卫站点的发布与订阅全部删除后,可分别删除Database(如果主站点继续按照普通项目进行或配置另一个卫星站点的异地协同,则不需要删除Database)。删除数据库时如果报以下错误,则执行以下脚本。
DECLARE @subscriptionDB AS sysname
SET @subscriptionDB = N'S3DTest_MDB'
EXEC sp_removedbreplication @subscriptionDB
GO
异地协同项目的管理
管理员操作权限介绍
异地协同项目中不是所有操作都可以在各站点执行,这里以列表的形式简单阐述。
| 操作 | 主站点 | 卫星站点 |
|---|---|---|
| 执行Duplicate/Consolidate Model for Workshare命令 | 可以 | 无权限执行 |
| 创建权限组文件夹 | 可以 | 无权限 |
| 创建权限组 | 可以 | 无权限 |
| 添加、更改权限组用户 | 可以 | 无权限 |
| 更改权限组的Location | 可以 | 无权修改 |
| 向CDB Bulkload数据 | 可以 | 由主站点传递 |
| 更改SharedContent | 可以 | 手动拷贝,无权限从CDB更改 |
| 生成RDB | 可以 | 可以 |
| 创建Location | 可以 | 无权创建 |
| 执行Synchronize Model with Catalog命令 | 可以 | 可以,但卫星站点无权执行Mark |
| 碰撞检查 | 可以 | 由主站点传递 |
| 运行DBI命令 | 可以 | 无权执行 |
| 创建Label、定制图表、Copy to Catalog | 可以 | 无权限 |
| 参考zvf三维模型 | 可以,在主站点参考的模型可以在所有站点查看 | 卫星站点参考的模型只有该站点可以预览 |
| 配置S3D 模型的颜色 | 可以 | PM里无权修改,S3D中format可以 |
访问S3D的权限管理
SQL的权限是各站点自己管理,访问S3D的权限要在主站点PM中配置,卫星站点没有权限更改。首先,在主站点PM中,将主卫站点所需要的的权限组建好,为方便管理,权限组最好按照不同的文件夹标示出是哪个站点所用。
每个权限组的Location默认都是主站点的Location,需要更改为与各卫星站点匹配的location。
以Sat1_Admin为例,打开权限组的属性,左下角Workshare Location通过下拉更改为Sat1_Beijing。
点击OK或Apply跳出如下弹框,点击OK即可。更改为卫星站点的Location后,这个权限组只能由该卫星站点使用。
更改完成后如下:
接下来需要给每个权限组添加权限,因卫星站点的权限组是在主站点修改,为方便管理,可由卫星站点提供域组,这样卫星站点员工的增减,只需要在卫星站点将账户加入域组或从域组删除,无需主站点频繁增删账户。
权限组配置完成后,打开各站点的S3D验证权限:
异地协同项目中Plant根目录中主站点的权限误删怎么找回?
普通项目中不会出现这种情况,因为根目录中至少需要保留一个full control的账户,而在异地协同项目中,只要根目录中有卫星站点的任何一个full control 的账户,手下一个不小心就会将主站点账户删除,并且在卫星站点无法添加权限。
这里可以通过脚本在数据库中替换权限账号:
--在SDB中运行此语句
select * from PRJMGTProjectRoot
--??是PermissionGroupID 的数值,如508,由上一条语句可以得知
select * from PRJMGTAccessControlRule
where permissiongroupid=??
--以主站点账户替换卫星站点账户,oid号由上一条语句可以得知
update PRJMGTAccessControlRule
set Role='<Host permision user>'
where oid=''
替换完成后,根目录中的权限将由卫星站点账户更改为主站点账户。主站点账号加进去以后,就可以把卫星站点账号重新添加进去了。
权限组的转让
在S3D独立项目中,模型或者过滤器的权限组可以由管理员自由切换。异地协同项目进行过程中,也会遇到将模型或过滤器或层级目录转让给其他站点的情况,这时仅仅靠权限组下拉箭头是不能实现的。将过滤器、模型、树状层级、图表等权限通过Transfer转让给到其他站点的操作如下图所示。
过滤器权限组转让:
模型权限组转让(模型可以通过多选批量转让权限组):
图表文件夹权限组转让:
需要注意的是,一旦将权限组转让出去,该站点将无法对该模型或过滤器或层级目录进行修改。
Catalog的权限
卫星站点没有权限对CDB更改,Catalog只能由主站点向卫星站点单向传输,所以涉及到CDB数据的增删或更改,只能由主站点进行。Catalog的管理只要包括Bulkload、Catalog Filter、Copy to Catalog、以及Catalog Task的操作等。
建库
以Bulkload新设备为例,在主站点将Excel导入CDB,网络状态良好的情况下,卫星站点可以即时看到并使用该设备建模。
创建Label、定制图表
图表定制包括Catalog 中的操作:涉及到Catalog task(新建 Label)、Bulkload(导入label、ISO图、报表模板)、catalog filter(报表所用到的filter),由主站点完成并自动传递至卫星站点。
Label、图表还涉及到sharecontent中的文件,这部分更新需要打包发给卫星站点更新在sharecontent中同样的路径下。
数据库日常维护
-
项目日常备份
主卫站点都要进行日常备份,可配置Batch自动执行;
-
主卫站点需要分别执行模型同步、生成View。
Mark只能在主站点执行,主卫站点都只能update本站点有权限的模型,可以配置SchSyncViewReports定期自动执行;或通过ViewGenerator.exe程序生成MDB和CDB的view。
Bulkload之后Host与Satellite同步的顺序:Host: 同步、生成view→ 生成RDB → Satellite 同步、生成View → 生成RDB。
-
主卫站点分别需要生成RDB,可以配置SchSyncViewReports定期自动执行,界面如下。
-
主站点执行DB Maintenance
-
主站点执行DB Integrity,可配置Batch定期执行。
-
主卫站点分别执行DB Cleanup,只能清理本站点有权限的对象。
Workshare项目的数据库恢复
SDB的恢复
由于一些错误操作(如不小心将数据bulkload至SDB或SDB_Schema中),导致主SDB数据无法修复,可以使用误操作前的备份进行恢复覆盖SDB。这项操作不影响CDB、MDB的复制。
注意事项:
-
确保SDB备份节点包含了当前Site中所有异地协同项目;
-
主卫站点都要停止对该项目的所有工作;
-
主卫站点使用同一个备份恢复SDB。
以下是SDB恢复的步骤:
先在host删除SDB及SDB_Schema的订阅
主卫站点同时通过Database Wizzard恢复SDB,注意各站点的Location一定要与原来保持一致。主卫站点全部恢复完成后,按照1.3.3单向传递的发布方式,重新发布订阅SDB、SDB_Schema。
如果发布完成后,Host端出现Publisher to Distributord的数据无法传输的问题,则重新启动作业:
如果出现Stop Job失败,运行以下脚本停止作业:
select * from master..sysprocesses where program_name = ' Name of the agent job';
KILL 453 --453为job的spid号;
CDB的恢复
因为一些因素导致卫星站点数据与主站点数据不一致且无法通过数据复制传递给卫星站点时,则可以在断开复制关系的情况下在卫星站点重新恢复主站点提供的CDB。卫星站点在恢复、复制完成前,主站点不可以进行catalog的写入、更改工作。
首先,在主站点删除CDB、CDB_Schema的订阅,如果CDB、CDB_Schema有多个订阅卫星站点,仅删除需要恢复CDB卫星点的订阅。
在主站点进行备份,然后将备份包发给卫星站点,MDB可以不传送。卫星端在收到备份后进行恢复,恢复方式选择第一种恢复模式:Restore one or more plant databases from backup
恢复完成后,由主站点重新按照单向传递的方式发布订阅,一定要检查Monitor中的复制状态。
复用MDB中的模型
删除或更改模型后,希望找回模型恢复至原来的状态,可以通过恢复MDB后复用模型找回已删除或更改的模型。此过程可以在主站点或卫星站点进行,不需要各数据库断开订阅,也不需要其他站点停止设计工作。
找到删除模型最近日期的备份文件,选择第二种恢复方式恢复MDB,注意此时新Plant名字要与原来名字区分开。
点击Finish之后,跳出如下弹框,点选Yes,只恢复MBD链接至已有Catalog。恢复完成后生成RDB。
打开两个Session文件,其中一个打开新的Plant,可以通过Filter、树状目录、或者框选的方式选择被删除或更改的模型,运行Edit下的Copy命令,然后另一个Session打开原来的Plant,运行Edit下的Paste and Restore,如果这个按钮是灰色的,就刷新一下session文件。
被复制的模型如果是被修改的模型,位置、属性等信息会被还原至修改之前的状态;被复制的模型如果是被删除的,则会创建出一个新的模型,位置、属性等信息被恢复至删除之前的状态。复制时间根据模型量多少而定。


























































































































