O Firebird \u00e9 um banco de dados formid\u00e1vel que permite construir aplicativos orientados a RDBMS de forma f\u00e1cil, barata e segura.<\/p>\n
Todavia, se um banco resulta corrompido na constitui\u00e7\u00e3o l\u00f3gica ds seus \u00edndices, restaurar este banco pode ser complicado.<\/p>\n
Um caso t\u00edpico que estamos enfrentando hoje \u00e9 quando um campo que n\u00e3o fazia parte da PK passa a ser parte da mesma. O indice \u00e9 criado o backup pode ser feito mas na hora de restaurar, ele vai acusar a inconsist\u00eancia e impedir a restaura\u00e7\u00e3o mantendo asssim a integridade do banco na forma mais singela: ou tudo ou nada.<\/p>\n
Nesse caso, uma seq\u00fc\u00eancia de passos a serem seguidos\u00a0pode<\/strong> ser\u00a0 seguinte: Restaurar o backup sem os indices e depois reativar os indices. Observar onde h\u00e1 incongruencias, eliminar as mesmas e ativar esse indice de novo.<\/p>\n O primeiro passo, ap\u00f3s fazer um backup sem problemas, \u00e9 restaurar o banco sem ativar os \u00edndices.<\/p>\n Com isso restauramos o arquivo meu-backup.fbk no banco \/bd\/banco.fdb (do micro local) usando o\u00a0service_mgr<\/em> para aumentar a performance na hora da restaura\u00e7\u00e3o, com um tamanho de p\u00e1gina de 8192bytes para compatibilizar com clusters de disco maiores e sem ativar os \u00edndices.<\/p>\n Se este passo deu certo, agora precisamos elaborar uma lista com os nomes dos \u00edndices a serem ativados.<\/p>\n O seguinte comando nos devolve uma lista\u00a0ordenada<\/strong><\/em>\u00a0<\/em> dos indices a serem ativados. Esta ordem \u00e9 por prioridade e n\u00e3o alfab\u00e9tica.<\/p>\n Mas o melhor mesmo \u00e9 produzir um script que nos permita utilizar esse resultado ent\u00e3o criamos um arquivo que chamarei aqui de\u00a0criar-script-reconstrucao-indices.sql<\/em> com o seguinte conte\u00fado:<\/p>\n Podemos agora utilizar este script sobre o banco restaurado (mesmo que apenas sejam um ou dois indices que faltam criar)<\/p>\n Isso indicar\u00e1 ao isql-fb que \u00e9 para usar o script chamado\u00a0criar-script-reconstrucao-indices.sql<\/em> como entrada (ou seja, como se estivessemos digitando o conte\u00fado l\u00e1 dentro do isql-fb) e redirecionamos a sa\u00edda para\u00a0\/tmp\/recriar-indices.sql<\/em><\/p>\n Feito isto, teremos no arquivo \/tmp\/recriar-indices.sql uma sequencia de instru\u00e7\u00f5es como no exemplo a seguir:<\/p>\n Depois disso, precisamos rodar esse script no servidor assim:<\/p>\n Ele vai ir criando cada um dos \u00edndices na ordem estabelecida. Se um deles d\u00e1 erro, o erro aparecer\u00e1 na tela (com detalhes do que \u00e9 que est\u00e1 corrompendo o banco). Use esta informa\u00e7\u00e3o para corrigir seu banco e depois volte a realizar o procedimento at\u00e9 obter uma sa\u00edda sem erros<\/p>\n <\/p>\n <\/p>\n <\/p>\n","protected":false},"excerpt":{"rendered":" O Firebird \u00e9 um banco de dados formid\u00e1vel que permite construir aplicativos orientados a RDBMS de forma f\u00e1cil, barata e segura. Todavia, se um banco resulta corrompido na constitui\u00e7\u00e3o l\u00f3gica ds seus \u00edndices, restaurar este banco pode ser complicado. Um caso t\u00edpico que estamos enfrentando hoje \u00e9 quando um campo que n\u00e3o fazia parte da […]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"spay_email":"","jetpack_publicize_message":"","jetpack_is_tweetstorm":false},"categories":[95],"tags":[],"jetpack_featured_media_url":"","jetpack_publicize_connections":[],"jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p5O6UV-6F","jetpack-related-posts":[{"id":5,"url":"http:\/\/www.yeapf.com\/wp\/?p=5","url_meta":{"origin":413,"position":0},"title":"Migrando bancos de dados com ydbmigrate","date":"janeiro 10, 2014","format":false,"excerpt":"Desenvolver um aplicativo implica em ter um bom banco de dados, mas responder rapidamente a uma migra\u00e7\u00e3o estrutural \u00e9 mais um pesadelo do que uma noite bem dormida. Dentre as ferramentas que o YeAPF disp\u00f5e se encontra o ydbmigrate. Esta ferramenta nos permite exportar e importar dados de varias fontes\u2026","rel":"","context":"Em \"firebird\"","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":248,"url":"http:\/\/www.yeapf.com\/wp\/?p=248","url_meta":{"origin":413,"position":1},"title":"Monitorando servi\u00e7os em linux","date":"novembro 10, 2015","format":false,"excerpt":"Assumir o compromisso de manter um servidor funcionando requer de poder monitorar ele e realizar as tarefas preventivas necess\u00e1rias. O servi\u00e7o simpleCollector\u00a0tem a vantagem de poder receber qualquer tipo de indicador que o cliente queira criar e monta-lo sobre uma linha de tempo disparando os gatilhos que forem programados sobre\u2026","rel":"","context":"Em "Servidores"","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":380,"url":"http:\/\/www.yeapf.com\/wp\/?p=380","url_meta":{"origin":413,"position":2},"title":"Criando e modificando o yeapf.db.ini usando a linha de comando","date":"abril 11, 2018","format":false,"excerpt":"Esses dias tive que migrar um projeto de uma pasta para outra e - pela configura\u00e7\u00e3o do .gitignore - a defini\u00e7\u00e3o da conex\u00e3o com o banco de dados n\u00e3o veio. Esse \u00e9 exatamente o jeito em que trabalhamos porque nos permite mantermos nossas bases de testes separadas por individuo ou\u2026","rel":"","context":"Em "Yet Another PHP Framework"","img":{"alt_text":"","src":"https:\/\/i2.wp.com\/www.yeapf.com\/wp\/wp-content\/uploads\/2018\/04\/Screenshot-esteban@programacao01-ysetdbconn-php.png?resize=350%2C200","width":350,"height":200},"classes":[]},{"id":455,"url":"http:\/\/www.yeapf.com\/wp\/?p=455","url_meta":{"origin":413,"position":3},"title":"Como instalar YeAPF?","date":"agosto 3, 2018","format":false,"excerpt":"Voc\u00ea n\u00e3o precisa instalar YeAPF. O que sim \u00e9 bom ter instalado s\u00e3o as ferramentas dele. Mas antes disso, \u00e9 bom deixar claro como funciona ele sem instalar. A todos os efeitos, vamos supor que voc\u00ea fez download da \u00faltima vers\u00e3o do YeAPF e o colocou na pasta ~\/Downloads\/YeAPF\/ e\u2026","rel":"","context":"Em "Yet Another PHP Framework"","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":25,"url":"http:\/\/www.yeapf.com\/wp\/?p=25","url_meta":{"origin":413,"position":4},"title":"Primeiros passos com YeAPF","date":"fevereiro 22, 2014","format":false,"excerpt":"Tive oportunidade de ver minha irm\u00e3 mais nova andar sozinha pela primeira vez e nunca mais esqueci da experi\u00eancia. \u00a0Anos depois naceram os filhos e o impacto \u00e9 tremendo. Brinco com quem programa usando YeAPF de que s\u00e3o meus filhos, carinhosamente. Por isso que os primeiros passos s\u00e3o importantissimos para\u2026","rel":"","context":"Em "Yet Another PHP Framework"","img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":184,"url":"http:\/\/www.yeapf.com\/wp\/?p=184","url_meta":{"origin":413,"position":5},"title":"Exemplo - web01 - OnePage YeAPF Web Application","date":"dezembro 26, 2014","format":false,"excerpt":"Esta \u00e9 uma das continua\u00e7\u00f5es deste artigo. Por que criar aplicativos mono p\u00e1gina? Bom, a grande virtude de um aplicativo mono p\u00e1gina \u00e9 que tudo o que voc\u00ea precisar est\u00e1 pronto assim que o usu\u00e1rio carregou a p\u00e1gina inicial e caso sejam necess\u00e1rias mais p\u00e1ginas, formul\u00e1rios, tabelas elas tamb\u00e9m podem\u2026","rel":"","context":"Em "Desenvolvimento"","img":{"alt_text":"","src":"https:\/\/i2.wp.com\/www.yeapf.com\/wp\/wp-content\/uploads\/2019\/05\/office-932926_1920.jpg?resize=350%2C200","width":350,"height":200},"classes":[]}],"_links":{"self":[{"href":"http:\/\/www.yeapf.com\/wp\/index.php?rest_route=\/wp\/v2\/posts\/413"}],"collection":[{"href":"http:\/\/www.yeapf.com\/wp\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.yeapf.com\/wp\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.yeapf.com\/wp\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/www.yeapf.com\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=413"}],"version-history":[{"count":5,"href":"http:\/\/www.yeapf.com\/wp\/index.php?rest_route=\/wp\/v2\/posts\/413\/revisions"}],"predecessor-version":[{"id":418,"href":"http:\/\/www.yeapf.com\/wp\/index.php?rest_route=\/wp\/v2\/posts\/413\/revisions\/418"}],"wp:attachment":[{"href":"http:\/\/www.yeapf.com\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=413"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.yeapf.com\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=413"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.yeapf.com\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=413"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}gbak -user sysdba \\\r\n-pass senha \\\r\n-se service_mgr \\\r\n-p 8192 \\\r\n-i \\\r\n-r meu-backup.fbk \/bd\/banco.fdb<\/pre>\n
select rdb$index_name \r\nfrom rdb$indices \r\nwhere (RDB$INDEX_INACTIVE=1) \r\norder by rdb$foreign_key nulls first;<\/pre>\n
select 'ALTER INDEX '||rdb$index_name ||' ACTIVE;' \r\nfrom rdb$indices \r\nwhere (rdb$system_flag is null or rdb$system_flag = 0) \r\norder by rdb$foreign_key nulls first;<\/pre>\n
isql-fb -pagelen 99999 \\\r\n-user sysdba \\\r\n-pass senha \\\r\n\/bd\/banco.fdb \\\r\n-i criar-script-reconstrucao-indices.sql \\\r\n-o \/tmp\/recriar-indices.sql<\/pre>\n
ALTER INDEX PK_PEDIDOS_COMPRAS ACTIVE;\r\nALTER INDEX PK_PATRIMONIO_INST ACTIVE;\r\nALTER INDEX PATRIMONIO_IDX1 ACTIVE;\r\nALTER INDEX PK_PAGTO_COMPRA ACTIVE;\r\n...<\/pre>\n
isql-fb \\\r\n-user sysdba \\\r\n-pass senha \\\r\n\/bd\/banco.fdb \\\r\n-i recriar-indices.sql\r\n<\/pre>\n