Migração DentalDB SQLite

Introdução

Este guia aborda a migração de dados do DentalDB de uma base de dados SQLite para MySQL/MariaDB ou SQL Server (também conhecido como MS SQL).

Existem várias ferramentas comerciais gratuitas disponíveis que suportam a migração de dados de bases de dados SQLite para MySQL/MariaDB e outros motores de base de dados.

Na nossa curta experiência com estas ferramentas, o software comercial ESF Database Migration Toolkit apresentou um desempenho bastante satisfatório, superando neste aspeto o SQLite Migration And Sync.

Pré-requisitos

  • Conhecimentos básicos de edição de ficheiros XML
  • Conhecimento em administração de bases de dados
  • Para SQL Server, é necessário o DentalDB 2.4 Plovdiv ou superior. Alternativamente, pode ser utilizada a correção 2.3 Matera DentalDB hotfix (Matera2.3 2019-10-02).
  • Versões do DentalDB anteriores à 3.2 Elefsina apenas suportam MariaDB até à versão 10.6.x (versões posteriores podem não ser compatíveis).

Instruções

  1. Para evitar perda de dados, criar uma cópia de segurança da base de dados SQLite copiando o ficheiro DentalDB_V3.sqlite (localização padrão é c:\CAD-Data, mas pode variar consoante o distribuidor).
  2. Criar um esquema de base de dados no destino:
    1. Anotar o nome do esquema, utilizador e palavra-passe. No exemplo abaixo, o nome do esquema é dentaldb, o utilizador é test e a palavra-passe é somepass.
    2. Garantir que são atribuídas as permissões corretas ao utilizador da base de dados. Consultar a documentação da base de dados para mais detalhes.
  3. Criar o ficheiro settings-db.xml na pasta DentalDB\config, caso ainda não exista.
  4. Editar o ficheiro settings-db.xml conforme as instruções:
    1. Se a tag SQLSettings já existir, substituí-la pelo exemplo abaixo.
    2. Se a tag estiver ausente, adicioná-la conforme o exemplo.
  5. Abrir a Linha de Comandos e executar o DentalDB com o argumento /CreateDatabase.
    1. Nota: a janela do DentalDB não será aberta; a aplicação termina após criar as tabelas necessárias.
  6. Se necessário, ajustar a codificação da base de dados conforme descrito aqui
  7. Executar a ferramenta de migração escolhida, usando o ficheiro SQLite como origem e a base de dados configurada como destino.

Configuração 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>


Configuração SQL Server

Ligação via Autenticação SQL Server

Processo recomendado

<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>

Ligação via Autenticação do 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>


Escolher a codificação correta de caracteres para MariaDB/MySQL

O conjunto de caracteres da base de dados deve ser utf8mb4. Caso contrário, casos com certos caracteres especiais (ex: no campo Notas) não serão guardados corretamente. Se a collation predefinida não estiver ajustada, deve-se definir manualmente executando o seguinte comando SQL:


ALTER DATABASE dentaldb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;


Onde dentaldb é o nome da base de dados utilizada com o software DentalDB.

Resolução de problemas: Se o conjunto de caracteres não tiver sido corretamente definido desde o início, é possível converter as tabelas existentes retroativamente:


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;


Este procedimento só é necessário caso a base de dados tenha sido preenchida antes da definição do conjunto de caracteres correto.

AVISO

As instruções de migração acima são fornecidas sem qualquer garantia relativamente à perda ou validade de dados. Seguir estes passos é da inteira responsabilidade do utilizador.