Contents
简介
本指南介绍如何将 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 可能不兼容)。
操作说明
为防止数据丢失,先创建 SQLite 数据库的备份,即复制一份文件 DentalDB_V3.sqlite(默认位置在 c:\CAD-Data,但具体位置可能因经销商而异)。 在目标数据库中创建一个数据库 schema: 记录下 schema 名、用户名和密码。例如,下面示例中,schema 名是 dentaldb,用户名是 test,密码是 somepass。 确保为数据库用户授予正确的权限。有关详细说明请参阅对应数据库文档。 在 DentalDB\config 文件夹下创建文件 settings-db.xml(如果该文件尚不存在)。 编辑 settings-db.xml,执行以下操作: 如果文件中已存在标签 SQLSettings,则用下面的内容替换它。 如果缺少标签 SQLSettings,则按照下方示例添加。 打开命令提示符 (Command Prompt),使用参数 /CreateDatabase 来运行 DentalDB 注意:运行后,DentalDB 窗口不会打开,程序会在创建所需数据表后退出。 如果需要,请根据此处所述调整数据库编码。 使用任意迁移工具(以 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 软件的数据库名。请注意,只有在起初未正确设置字符集、且已往数据库中写入数据后才需要进行此操作,以补救数据库字符集设置不当的问题。
免责声明
以上迁移说明并不保证不会造成数据丢失或数据有效性问题。 因此,您需要自行承担执行这些步骤的风险。