Documentation/HowTo/MigrarDoHSQLDB

From The Document Foundation Wiki
Jump to: navigation, search
This page is a translated version of the page Documentation/HowTo/MigrateFromHSQLDB and the translation is 86% complete.

Outdated translations are marked like this.
Other languages:
dansk • ‎Deutsch • ‎English • ‎français • ‎italiano • ‎português do Brasil • ‎slovenščina

O lançamento do LibreOffice 6.1 irá gradualmente substituir o banco de dados HSQLDB pelo Firebird internamente. Antes de tudo, isso é indicado pelo fato de que os bancos de dados Firebird existentes não necessitam mais a ativação do modo experiemental.

Se o modo experimental estiver ativado no LibreOffice, as caixas de diálogo seguintes aparecem quando acessar as tabelas de um banco de dados HSQLDB interno.

Dialogue migrate.png

Deve ser escolhido Depois até que as precauções seguintes sejam tomadas.

  1. Fazer cópia do arquivo de banco de dados HSQLDB.
  2. Copiar as exibições do código SQL e salvá-las como consultas. Ajustar depois e salvar as exibições novamente. Exibições não podem ser editadas no Firebird neste momento!
  3. Nomes de tabelas e colunas no Firebird só podem ter até 31 caracteres. Se necessário ajustar.
  4. Devido a um bug, em todos os campos de data das tabelas, campos de hora e campos data / hora devem ser suplementados por um ampo que o conteúdo como texto.
  5. Devido a um bug, imagnes lidas em um HSQLDB não são exibidas no banco de dados Firebird após a migração.
  6. Tabelas de texto puro (tabela * .csv integrada etc.) não são possíveis no Firebird.

Migrar campos de data, campos de hora e campos data / hora

O assistente de migração não gerencia corretamente migração de campos data, hora e data / hora. Isso porque o HSQLDB trabalha com fusos horários locais. Durante uma migração de data-hora, de repente se torna horário de verão, com 2 horas a menos, mas apenas uma hora no horário de inverno. Datas sempre são avançadas em um dia e assim por diante. O método a seguir ajuda a conseguir valores apropriados do HSQLDB para o banco de dados Firebird e criar os valores de hora e data novamente:

1. Tabelas que contém campos de data, hora e data / hora no HSQLDB adicionar um campo VARCHAR para cada:

       "Data_T" VARCHAR (10),
       "Hora_T" VARCHAR (8),
       "DataHora_T" VARCHAR (19)

2. Rode o seguinte comando via Ferramentas → SQL:

       UPDATE "Table" SET "Data_T" = CAST ("Date" AS VARCHAR (10));
       UPDATE "Table" SET "Hora_T" = CAST ("Time" AS VARCHAR (8));
       UPDATE "Table" SET "DataHora_T" = LEFT (CAST ("DateTime" AS VARCHAR (30)), 19);

3. Depois todos os campos também estarão disponíveis como campos de texto nas tabelas, a migração pode prosseguir. Posteriormente o arquivo do banco de dados Firebird migrado deve ser atualizado novamente:

       UPDATE "Table" SET "Date" = "Data_T";
       UPDATE "Table" SET "Time" = "Hora_T";
       UPDATE "Table" SET "DateTime" = "DataHora_T";

Após esta ação, os valores correspondentes do HSQLDB também estão disponíveis no novo arquivo de banco de dados do Firebird. Os campos "Date_T", "Time_T" e "DateTime_T" podem ser apagados.

Faça fotos de tabelas em formas visíveis e mutáveis

O assistente de migração cria campos com a imagem de tipo [BLOB] em campos que eram responsáveis por imagens no HSQLDB (image [Longvarbinary]). Esse tipo está presente na GUI, mas provavelmente não está vinculado ao tipo de dados correto. Para tornar essas imagens visíveis novamente, elas devem ser copiadas para um campo do tipo BLOB [BLOB], para que seja possível exibir e modificar o conteúdo da imagem no formulário. Atualmente, os relatórios não conseguem exibir imagens dos arquivos de banco de dados do Firebird.

Image change.png

Mesmo que nenhuma alteração tenha sido feita pelo usuário em um campo de imagem, a mensagem parece que uma alteração não é possível e, em vez disso, a coluna pode ser excluída e recriada. É melhor selecionar Não, caso contrário, os dados armazenados no campo serão perdidos.

Tabelas, que contêm imagens, um campo BLOB deve ser complementado: "Image_N" BLOB [BLOB]

Quando salvar não é permite que o tipo de dados do campo de imagem criado durante a importação seja alterado.

3. Execute o seguinte comando através de Ferramentas → SQL:

        UPDATE "Table" SET "Image_N" = "Image";


4. Abra o editor de tabelas, exclua a coluna "Image" antiga e não permita que o tipo de dados do novo campo de imagem seja alterado, excluindo o campo.

5. Abra o editor de tabelas, adicione uma nova coluna "Imagem" e não permita que o tipo de dados de um campo de imagem seja alterado, excluindo o campo.

6. Execute o seguinte comando por meio de Ferramentas → SQL:

        UPDATE "Table" SET "Image" = "Image_N";


7. Abra o editor de tabelas, exclua a coluna "Image_N" e não permita que o tipo de dados do novo campo de imagem seja alterado, excluindo o campo.

Erro de migração para subformulários e consultas de parâmetro

Devido a um erro no parâmetro de migração, as consultas e os subformulários não funcionam corretamente. Para isso, infelizmente, o arquivo do banco de dados deve ser descompactado e o arquivo content.xml contido deve ser processado. Este arquivo afirma incorretamente

    db: parameter-name-substitution = "false"

Isso deve ser alterado para

    db: parameter-name-substitution = "true"

ou pode ser completamente removido imediatamente. Em seguida, o content.xml pode ser lido novamente no arquivo do banco de dados.

Conteúdo do arquivo *.odb após a migração

O conteúdo do HSQLDB não é removido do arquivo *.odb durante a migração:

Firebird migrated odb content.png

Após a migração, o arquivo "firebird.fbk" está localizado no arquivo de banco de dados no subdiretório "database", além do HSQLDB. Esse arquivo contém os dados migrados e é descompactado no diretório temporário do sistema operacional quando o arquivo de banco de dados é iniciado.

Além disso, as configurações anteriores do content.xml são mantidas. O arquivo correspondente acaba de ser renomeado para "content_before_migration.xml". Para poder acessar os dados do HSQLDB novamente, somente o novo "content.xml" teria que ser renomeado para "content_new.xml" e o arquivo "content_before_migration.xml" renomeado para "content.xml".

Após a migração bem-sucedida, o arquivo "content_before_migration.xml" e os arquivos "backup", "data", "properties" e "script" localizados no diretório "database" podem ser excluídos. Isso é recomendado, é claro, se o banco de dados já era bastante extenso antes. Finalmente, os dados foram duplicados durante a migração.

Personalizar funções em consultas

Muitas funções em consultas possuem os mesmos nomes no HSQLDB e no Firebird e funcionam da mesma forma. No entanto, ao abrir uma consulta que trabalhou anteriormente no HSQLDB, pode acontecer que uma mensagem como a seguinte apareça:

IFNULL unknown.png

A função IFNULL é desconhecida no Firebird. Uma olhada na lista a seguir mostra que a função COALESCE pode ser usada no Firebird e no HSQLDB interno. Essa função é ainda mais universal porque pode consultar qualquer número de valores e o primeiro hit que não é NULL retorna o valor correspondente. Infelizmente, o editor de SQL básico não fornece a capacidade de compartilhar um termo com Localizar e substituir. Caso contrário, o IFNULL poderia simplesmente ser substituído por COALESCE se o termo aparecer com mais frequência em uma consulta. Para tais transformações, é aconselhável copiar a consulta em um editor de texto simples com a função de pesquisa e substituição, em seguida, faça a substituição e substitua o conteúdo antigo por ela.

Fica mais complicado quando a seguinte mensagem aparece:

Unknown Error Substring.png

A mensagem de erro é sem sentido por enquanto. Nenhum detalhe útil. Apareceu aqui pela primeira vez quando a função SUBSTRING apareceu em uma consulta. Este recurso também é conhecido no Firebird, mas o Firebird não permite a notação abreviada separada por vírgula que é possível com o HSQLDB. Em vez disso você tem que reescrever a SUBSTRING (s FROM start [FOR len]).

A tabela a seguir fornece uma visão geral de quais recursos podem precisar ser ajustados porque eles não têm o mesmo nome no Firebird ou, na pior das hipóteses, não existem. A lista não diz nada sobre o fato de que o Firebird tem menos funções que o HSQLDB interno. Só não há substituto para certas funções.

Uma função que aparece na coluna HSQLDB e Firebird já pode ser alterada antes da migração. Um exemplo disso é a combinação de várias strings: o CONCAT, assim como a combinação com '+', já podem ser vinculados a '||' ser substituído. Este link funciona em ambos os bancos de dados internos. O funcionamento adicional do HSQLDB não é afetado por essa alteração.

Uma função que aparece apenas sob HSQLDB ou Firebird, mas não na coluna do meio, ainda não pode ser substituída. Para isso, o banco de dados teria que ser migrado primeiro. O código de visões com uma dessas funções deve ser armazenado em outro lugar - por exemplo, como uma consulta. A alteração do código só é possível após a migração.

Alguns recursos não podem ser migrados. Isso é indicado pela nota cruzada.

Funções do mecanismo de dados no HSQLDB e no Firebird

Primeira coluna mostra funções do HSQLDB, que não estão disponíveis no Firebird. A segunda coluna mostrará as funções, que funcionarão no HSQLDB e no Firebird com o mesmo resultado. Terceira coluna mostra funções do Firebird, que devem ser escolhidas em vez de funções no HSQLDB. Essas funções fornecem o mesmo resultado que as funções na mesma linha para HSQLDB, mas não estão disponíveis com esse nome da função no HSQLDB.

Numérico
HSQLDB HSQLDB e Firebird Firebird
BITAND(a,b) BIN_AND(a,b)
BITOR(a,b) BIN_OR(a,b)
BITXOR(a,b) BIN_XOR(a,b)
DEGREES(d) <valor para radianos>*360/(2*PI())
LOG(d) LN(d)
RADIANS(d) <valor para graus>*2*PI()/360
ROUNDMAGIC(d) No Function
TRUNCATE(a,b) TRUNC(a,b)
Texto
HSQLDB HSQLDB e Firebird Firebird
ASCII(s) ASCII_VAL(s)
BIT_LENGTH(s) Returns length of text. HSQLDB: 16bit per character Firebird: 8bit, special character 16bit. Same Name, different counting! BIT_LENGTH(s)
CHAR(c) ASCII_CHAR(c)
CONCAT(str1,str2)

'str1'+'str2'+'str3'

'str1'‖'str2'‖'str3'
DIFFERENCE(s1,s2) No Function
HEXTORAW(s) No Function
INSERT(s1,start,len,s2) OVERLAY(s1 PLACING s2 FROM start [FOR len])

Not working in query-GUI

LCASE(s) LOWER(s)
LENGTH(s) CHAR_LENGTH(s)

CHARACTER_LENGTH()

LOCATE(search,s[,start]) POSITION(search IN s) POSITION(search,s[,start])
LTRIM(s) TRIM(LEADING FROM s)
OCTET_LENGTH(s) Same Name, different counting!
RAWTOHEX(s) No Function
REPEAT(s,count) No Function
RTRIM(s) TRIM(TRAILING FROM s)
SOUNDEX(s) No Function
SPACE(count) No Function
SUBSTR(s,start[,len])

SUBSTRING(s,start[,len])

SUBSTRING(s FROM start [ FOR len])
UCASE(s) UPPER(s)
DATE/TIME
HSQLDB HSQLDB e Firebird Firebird
CURDATE() CURRENT_DATE
CURTIME() CURRENT_TIME
DATEDIFF(string, datetime1, datetime2)'ms'='millisecond', 'ss'='second', 'mi'='minute', 'hh'='hour', 'dd'='day', 'mm'='month', 'yy' = 'year' DATEDIFF(string, datetime1, datetime2) millisecond, second, minute, hour, day, week, month, year

Only long version without

DAY(date)DAYOFMONTH(date) EXTRACT(DAY FROM datetime)
DAYNAME(date) No Function
DAYOFWEEK(date) EXTRACT(WEEKDAY FROM datetime)

Not working in query-GUI

DAYOFYEAR(date) EXTRACT(YEARDAY FROM datetime)

Not working in query-GUI

HOUR(time) EXTRACT(HOUR FROM datetime)
MINUTE(time) EXTRACT(MINUTE FROM datetime)
MONTH(date) EXTRACT(MONTH FROM datetime)
MONTHNAME(date) No Function
NOW() CURRENT_TIMESTAMP
QUARTER(date) CEILING(EXTRACT(MONTH FROM date)/3.00)
SECOND(time) EXTRACT(SECOND FROM datetime)
WEEK(date) EXTRACT(WEEK FROM datetime)

Not working in query-GUI

YEAR(date) EXTRACT(YEAR FROM datetime)
TO_CHAR(datetime, string) No Function
Databaseconnection
HSQLDB HSQLDB e Firebird Firebird
DATABASE() RDB$GET_CONTEXT('SYSTEM', 'DB_NAME')

Not working in query-GUI

USER()

Not working in query-GUI

CURRENT_USER
IDENTITY() No Function
System
HSQLDB HSQLDB e Firebird Firebird
IFNULL(exp,value) COALESCE(expr1,expr2,expr3,...)
CASEWHEN(exp,v1,v2) CASE WHEN expr1 THEN v1[WHEN expr2 THEN v2] [ELSE v4] END IIF(exp,v1,v2)(only if CASE WHEN is to complicated)
CONVERT(term,type) CAST(term AS type)

Para mais informações, como tipos de campo em HSQLDB e Firebird, veja Documentation / FirebirdMigration.