单实例与多实例
UNVDB-TDS提供了两种迁移模式:
single-db
multi-db
创建unvdbtds集群时,可以选择使用单个迁移的T-SQL用户数据库,也可以选择同时使用多个迁移的T-SQL用户数据库。您的选择将影响unvdbtds数据库中T-SQL模式的名称在UnvDB中的显示方式。
如果你指定 single-db ,你只能在unvdbtds中创建一个单独的T-SQL数据库,并且T-SQL模式将在你的unvdbtds数据库中作为常规的UnvDB模式创建。

例如:在 TDS 端口中创建数据库 DB_A,在 DB_A 下创建 schema_A,则在 UnvDB 的 unvdbtds_db 数据库中看到两个 schema:dbo 和 schema_A,对应于SQL Server中 DB_A 数据库的 dbo 和 schema_A。其中dbo为SQL Server默认创建的系统schema。
如果指定 multi-db ,则可以创建多个T-SQL数据库(每个数据库都有自己的模式),并且T-SQL模式将被创建为UnvDB模式( <database name>_<schema_name> ),以避免名称冲突。

例如:在 TDS 端口中创建数据库 DB_A 和 DB_B,在 DB_A 和 DB_B 下分别创建 schema_A 和 schema_B,则在 UnvDB 的 unvdbtds_db 数据库中看到 DB_A 的 schema 为: DB_A_dbo 和 DB_A_schema_A;DB_B 的 schema 为: DB_B_dbo 和 DB_B_schema_B。
迁移模式保存在 migration_mode 参数中。初始化unvdbtds后,不能更改该参数的值。要更改迁移模式,您需要创建一个新的集群。如果没有选择 migration_mode , UNVDB-TDS的迁移模式初始化为默认值 single-db 。
下面的代码片段在设置迁移模式和初始化unvdbtds扩展之前创建一个用户和数据库。代码片段为psql格式,在UnvDB端口(默认为5678)上调用:
#创建一个用户(unvdbtds_user)和将要安装扩展的数据库(unvdbtds_db)
CREATE USER unvdbtds_user WITH SUPERUSER CREATEDB CREATEROLE PASSWORD '12345678' INHERIT;
DROP DATABASE IF EXISTS unvdbtds_db;
CREATE DATABASE unvdbtds_db OWNER unvdbtds_user;
#连接unvdbtds_db数据库,配置并安装扩展
CREATE EXTENSION IF NOT EXISTS "unvdbsql_tds" CASCADE;
GRANT ALL ON SCHEMA sys to unvdbtds_user;
ALTER USER unvdbtds_user CREATEDB;
ALTER SYSTEM SET unvdbsql_tsql.database_name = 'unvdbtds_db';
ALTER SYSTEM SET unvdbsql_tsql.migration_mode = 'multi-db';
SELECT pg_reload_conf();
#推荐 multi-db 模式如果要以 single-db 模式运行,需要在初始化数据库之前修改Unvdbtds配置
ALTER SYSTEM SET unvdbsql_tsql.migration_mode = 'single-db';
SELECT pg_reload_conf();
#最后,通过调用sys.initialize_unvdbtds来初始化数据库
CALL sys.initialize_unvdbtds('unvdbtds_user');
在本例中, 推荐ALTER DATABASE 语句设置迁移模式为 multi-db 。最后, SYS.INITIALIZE_BABELFISH 函数执行以指定的模式初始化unvdbtds。
当连接TDS端口时,将连接到以 unvdbsql_tsql.database_name 参数命名的UnvDB数据库。在初始化过程中, unvdbsql_tsql.database_name 将被设置为调用SYS.INITIALIZE_BABELFISH的数据库的名称。如果您使用的是 multi-db 模式,那么您可以连接到TDS端口并使用 CREATE DATABASE 和 USE 语句,就像您在Microsoft SQL Server中使用的那样; single-db 模式下,可以连接TDS端口,使用单个T-SQL数据库。
选择迁移模式
每种迁移模式都有其优缺点。根据您拥有的用户数据库数量和迁移计划选择您的迁移模式。初始化unvdbtds之后,就不能更改迁移模式了。在选择迁移模式时,请考虑用户数据库和客户机应用程序的需求。
初始化unvdbtds时,unvdbtds会创建系统数据库 master 。和 tempdb 。如果在系统数据库中创建或修改了对象( master 或 tempdb ),请确保在新集群中重新创建了这些对象。与SQL Server不同,unvdbtds在集群重启后不会重新初始化 tempdb 。
请在以下情况下使用单数据库迁移方式:
如果您正在迁移单个SQL Server数据库。在单数据库模式下,迁移的模式名(当从UnvDB中看到时)与原始的SQL Server模式名相同。如果您计划最终将应用程序迁移到本地UnvDB,那么您的SQL代码可能需要更少的修改。
如果您的最终目标是完全迁移到本地UnvDB。在迁移之前,将模式合并为单个模式(
dbo),然后迁移到单个集群中,以减少所需的更改。
请在以下情况下使用多数据库迁移方式:
如果你正在尝试unvdbtds,你不确定你未来的需求。
如果需要将多个用户数据库一起迁移,并且最终目标不是执行完全本地的UnvDB迁移。
如果您将来可能会将多个数据库迁移到UnvDB。