DentalDB 从 SQLite 迁移

简介

本指南介绍如何将 DentalDB 数据从 SQLite 数据库迁移到 MySQL/MariaDB 或 SQL Server(也称 MS SQL)。

市面上有许多免费和已经商业化的工具可用于将 SQLite 数据库迁移到 MySQL/MariaDB 以及其他数据库引擎。

根据我们短暂的使用经验,商业工具 ESF Database Migration Toolkit 表现地相当不错,相比之下在这方面比 SQLite Migration And Sync 更胜一筹。

使用条件/资格

基本的 XML 文件编辑知识

数据库管理知识

如果想要使用 SQL Server,需要 DentalDB 2.4 Plovdiv 或更高版本;或者使用 2.3 Matera DentalDB hotfix(Matera2.3 2019-10-02)。

3.2 Elefsina 之前的 DentalDB 版本仅支持 MariaDB 服务器至 10.6.x 版本(更高版本的 MariaDB 可能不兼容)。

操作说明

  1. 为防止数据丢失,先创建 SQLite 数据库的备份,即复制一份DentalDB_V3.sqlite 文件 (默认位置在 c:\CAD-Data,但具体路径可能因经销商安装位置而异)。
  2. 在目标数据库内创建数据库架构:
    1. 记录下框架名称、用户名和密码。例如,下面示例中,框架名称是 dentaldb,用户名是 test,密码是 somepass
    2. 确保授予数据库用户正确的权限。有关详细说明请参阅对应数据库文档。
  3. DentalDB\config 文件夹下创建文件 settings-db.xml(如果从未创建过)。
  4. 编辑 settings-db.xml,执行以下操作: ##如果文件中已存在标签 SQLSettings,则用下面的内容替换它。 ##如果缺少标签 SQLSettings,则按照下方示例添加。
  5. 打开命令提示符 (Command Prompt),使用参数 /CreateDatabase 来运行 DentalDB ##注意:运行后,DentalDB 窗口不会打开,程序会在创建所需数据表后退出。
  6. 如果需要,请根据此处所述调整数据库编码。
  7. 使用任意迁移工具(以 SQLite 文件为源、以上配置的数据库为目标)执行数据迁移。


MySQL/MariaDB 配置

<SQLSettings>
<ConnectionString>Server=localhost;Database=dentaldb;User ID=test;Password=somepass</ConnectionString>
<SQLDialect>NHibernate.Dialect.MySQLDialect</SQLDialect>
<DriverClass>NHibernate.Driver.MySqlDataDriver</DriverClass>
</SQLSettings>

SQL Server 配置

通过 SQL Server 验证进行连接

推荐做法

<SQLSettings>
<ConnectionString>server=MY_DENTAL_SERVER_PC_NAME\SQLEXPRESS01; database=dentaldb;user=test;pwd=somepass</ConnectionString>
<SQLDialect>NHibernate.Dialect.MsSql2008Dialect</SQLDialect>
<DriverClass>NHibernate.Driver.SqlClientDriver</DriverClass>
</SQLSettings>

通过 Windows 验证进行连接

<SQLSettings>
<ConnectionString>server=MY_DENTAL_SERVER_PC_NAME\SQLEXPRESS01; database=dentaldb;Integrated Security=SSPI;</ConnectionString>
<SQLDialect>NHibernate.Dialect.MsSql2008Dialect</SQLDialect>
<DriverClass>NHibernate.Driver.SqlClientDriver</DriverClass>
</SQLSettings>

选择适用于 MariaDB/MySQL 的正确字符编码

相应数据库的字符集应当设置为 utf8mb4。否则,含有某些特殊字符(例如在备注字段中)的病例将无法保存。如果默认排序规则(collation)未做相应设置,需要为该数据库设置合适的字符集,可执行以下 SQL 命令: ALTER DATABASE dentaldb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; 这里的 dentaldb 是您用于 DentalDB 软件的数据库名称。 故障排查:如果起初没有设置正确的字符集,导致了错误,可以在之后将现有数据表转换为 utf8mb4

ALTER TABLE dentaldb.CustomWorkDefinition CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE dentaldb.DependentOnNumericToothWorkParameters CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE dentaldb.DependentToothWorkParameters CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE dentaldb.NumericToothWorkParameter CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE dentaldb.TextualToothWorkParameter CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE dentaldb.ToothWork CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE dentaldb.ToothWorkParameters CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE dentaldb.Treatment CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE dentaldb.TreatmentValuedCustomInfo CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE dentaldb.TreatmentValuedParameters CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE dentaldb.ValuedMaterialParameters CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE dentaldb.WorkParamsInfoDentalShare CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE dentaldb.WorkParamsInfoLocal CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE dentaldb.WorkParamsInfoLocalImport CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE dentaldb.client_allowedImportedIds CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE dentaldb.clients CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE dentaldb.databaseInformation CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE dentaldb.laboratories CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE dentaldb.patients CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE dentaldb.technicians CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

这里的 dentaldb 是您用于 DentalDB 软件的数据库名称。请注意,只有在起初未正确设置字符集、且已往数据库中写入数据后才需要进行此操作,以补救数据库字符集设置不当的问题。

免责声明

以上迁移说明并不保证不会造成数据丢失或数据有效性问题。 因此,您需要自行承担执行这些步骤的风险。