SQL Server 多重空间数据库模型
SQL Server 中地理数据库的多重空间数据库模型是 ArcSDE 地理数据库在 SQL Server 中最初采用的实现形式。尽管此模型仍然受支持,但 ESRI 建议使用单一空间数据库模型,在该模型中,所有的地理数据库表都存储在同一个 SQL Server 数据库中。
要在 ArcSDE 地理数据库中存储空间数据,必须存在一个由表、存储过程、视图和函数组成的集合(统称为 ArcSDE 资料档案库)。用户定义的数据集合以及相关的 ArcSDE 资料档案库构成一个地理数据库。
对于 ArcSDE 9 之前的版本,SQL Server 中的地理数据库始终使用多重空间数据库模型进行存储。而对于 ArcSDE 9 以及后期版本,应该使用单一空间数据库模型。但既然多重空间数据库模型仍受支持(尽管不推荐使用),下面还是对此类模型进行了介绍。
在多重空间数据库模型中,ArcSDE 资料档案库存储在一个名为 sde 的数据库中。用户定义的数据(例如要素类、栅格以及非空间表)都存放在其他数据库中。sde 数据库中的 ArcSDE 资料档案库用于存储对 ArcSDE 特定实例所有用户定义数据的位置引用。sde 数据库与其他所有相关数据库共同构成单一地理数据库。此数据存储模型被称为多重空间数据库模型,因为它使用多个 SQL Server 数据库来构成单一的 ArcSDE 地理数据库。
上节阐述的单一空间数据库模型是存储地理数据库的推荐方式。但如果想要使用多重空间数据库模型,请遵照下面的规则和指导准则来使用和创建此类模型。
多重空间数据库实例的使用规则
- 存储 ArcSDE 元数据的数据库必须被命名为 sde。存储用户定义数据的附加数据库可以使用任何名称,但必须遵守 SQL Server 标识符规则,并且不能以数字开头。
- 每个 SQL Server 实例都只能承载一个多重空间数据库实例。SQL Server 数据库名称必须唯一,因此只能支持一个名为 sde 的数据库。如果要在同一个 SQL Server 实例中存储多个地理数据库,可以使用一个多重空间数据库实例以及若干个单一空间数据库实例。
- 在多重空间数据库实例中,ArcSDE 资料档案库必须存放在 sde 方案中。这些实例不支持 dbo 方案中的 ArcSDE 资料档案库。请参阅 SQL Server 中的地理数据库所有者比较,其中对 ArcSDE 地理数据库资料档案库可以使用的两种方案进行了阐述。
- ArcSDE 地理数据库系统表的所有者必须是名为 sde 的用户。(在 SQL Server 2005 以及后期版本中,请确保 sde 用户的默认方案也命名为 sde。)
- 对于存储用户定义的 ArcSDE 数据的每个数据库,必须为 sde 用户授予相应的访问权限。
- 必须将所有连接到此地理数据库实例的用户添加到 sde 数据库,即使用户定义的数据未存储在 sde 数据库中也是如此。如果用户将在 sde 数据库中存储数据,则必须在 sde 数据库中为该用户创建新方案。再次强调,用户名和方案名必须相同。
- 如果将 SDE_dbtune 表中的 CROSS_DB_QUERY_FILTER 参数设置为 0,当您连接到这些数据库中的某一数据库时,只要您拥有对数据库的访问权限,便可以访问数据库中的所有要素类。但无论将 CROSS_DB_QUERY_FILTER 参数设置为什么值,您都只能访问在空间数据库连接中指定的数据库中的非空间表。
- 如果将 SDE_dbtune 表中的 CROSS_DB_QUERY_FILTER 参数设置为 0,则允许进行交叉数据库查询,并且 ArcSDE 视图可从多个数据库引用数据。
- SELECT、INSERT、UPDATE 和 DELETE(也称为数据操作语言 (DML))语句可跨数据库界限使用。例如,如果连接到 public_works 数据库,则可以显示和编辑来自规划数据库的数据。但不能跨数据库界限执行 CREATE、ALTER 和 DROP (DDL) 语句。
- 当使用直接连接方式连接到多重空间数据库地理数据库时,必须指定要连接的数据库。如果使用 ArcSDE 服务进行连接,则在服务器注册表中 sde 数据库将设置为要连接到的默认数据库;因此,只要将 SDE_dbtune 表中的 CROSS_DB_QUERY_FILTER 参数设置为 0,就不必指定数据库名称。
- sde 数据库集合以及其他相关数据库共同构成了单一地理数据库。由同一组 ArcSDE 地理数据库系统表来支持它所引用的所有用户定义数据。因此,备份和还原操作的对象必须是整个地理数据库。如果所有数据库并不是同步进行备份和还原,就会产生地理数据库损坏的风险。
- sde 以及其他相关数据库必须使用相同的排序规则。
- 所有包含 ArcSDE XML 列或索引式原生 SQL Server XML 列的空间数据库都必须有其自己的全文目录。
- 要查看 sde 用户及其他用户所必需的一系列权限,请参阅 SQL Server 中地理数据库的用户权限。
有关创建多重空间数据库实例的指导准则
下面介绍了有关创建数据库来存储空间数据的一些指导准则。
- 使用 ArcSDE 的“安装后”向导来创建用于存储 ArcSDE 资料档案库的数据库。此向导将创建 sde 数据库、为其授予 sde 登录访问权限,并安装 ArcSDE 系统表。请确保将此数据库命名为 sde。
- 为数据文件指定较大的初始大小,然后使用 SQL Server Management Studio 增加数据库和事务日志文件的自动增长增量。此时,进行初始备份。
- 要创建用于存储用户定义数据的附加数据库,请使用 Management Studio 之类的 SQL Server 工具。必须将 sde 用户添加到创建的每个附加数据库中。此用户在这些数据库中不需要任何特殊权限。当数据集创建完成或注册为版本时,将为 sde 用户自动授予权限。
从多重空间数据库模型迁移到单一空间数据库模型
如上所述,单一空间数据库模型是被推荐用于地理数据库的模型。如果您已有地理数据库是使用多重数据库模型存储的,并且想要迁移到单一数据库模型,请按照以下步骤操作:
- 创建所有 ArcSDE 数据库的完整数据库备份。
- 使用“安装后”向导创建一个新的单一数据库模型地理数据库。请确保所运行的“安装后”向导与您当前使用的 ArcSDE 的版本相同。例如,如果正在将多重数据库模型与 ArcSDE 9.1 一起使用,并且要迁移到单一数据库模型,则运行 9.1 版本的“安装后”向导来创建单一地理数据库。此外,请确保在同一个 SQL Server 实例中执行这些步骤。注:
如果您当前使用的是 ArcSDE 8.3,请至少先升级到 ArcSDE 9,然后再迁移到单一数据库模型。
- 使用目录界面将数据传输到新的单一数据库模型地理数据库。
“安装后”向导会在 SQL Server 中创建一个新数据库,因此,请创建一个服务或建立一个直接连接以用于访问新地理数据库。然后,启动 ArcMap,打开目录窗口,并建立与原有的多重数据库模型和新建的单一数据库模型两者的连接。接下来,使用复制/粘贴、导入、导出或其他各种迁移数据的方法在地理数据库之间传输数据。
注:当数据传输到新地理数据库中时,登录到该地理数据库的用户将成为数据的所有者。因此,如果要保留原有的数据所有关系,各用户必须传输其自己的数据。