Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Bom dia a todos. Li uma matéria do Wagner Crivelini sobre colunas Identity e fiquei mais curioso ainda em tentar descobrir uma forma de resolver um problema em uma migração de dados para o banco DB2. http://imasters.com.br/banco-de-dados/quando-colunas-identity-resolvem-dar-trabalho/ Estou migrando dados do MySQL para o DB2, utilizando um script feito em PHP para gerar as tabelas para o novo formato e importando os dados de tabelas exportadas do próprio MySQL. Seguindo as especificações da IBM: http://publib.boulder.ibm.com/infocenter/db2luw/v8/index.jsp?topic=/com.ibm.db2.udb.doc/admin/t0004990.htm O problema é que após importar os dados, o sistema em php conectado ao DB2 tenta inserir um registro de log com um INSERT sem passar o incremento junto e o DB2 acusa erro dizendo que já existe o valor "1". A solução foi utilizar um comando SQL que restartasse o incremento manualmente da tablea de log e setasse um valor posterior ao último existente no banco: Se eu tenho "1078" registros, então o incremento será de "1079" ALTER TABLE log_acesso ALTER COLUMN id_acesso RESTART WITH 1079 Conversei com o Wagner e ele me disse para gerar um script com esse SQL que restartasse todas as tabelas e eu executar após a importação dos dados. Daí vem um problema maior ainda.. Tem mais gente na equipe com suas bases, cada um com mais registros que o outro, pois trabalham em atividades separadamente e alguns possuem mais dados que os outros, então também teriam que rodar este script. O processo aqui é automatizar essa conversão. Então busco com vocês uma solução que pudéssemos pensar em importar os dados mas o incremento não fosse "perdido" pelo DB2. O script gera tabelas nesse formato:
CREATE TABLE "LOG_ACESSO" ( "IDACESSO" BIGINT NOT NULL GENERATED BY DEFAULT AS IDENTITY ( START WITH +1 INCREMENT BY +1 MINVALUE +1 MAXVALUE +2147483647 NO CYCLE CACHE 20 NO ORDER ), "USUARIOS_ID" BIGINT WITH DEFAULT NULL, "DATAHORA" TIMESTAMP WITH DEFAULT NULL, "IP" VARCHAR(15) WITH DEFAULT NULL, "SISTEMA" VARCHAR(50) WITH DEFAULT NULL, "DATAHORA_LOGOUT" TIMESTAMP WITH DEFAULT NULL, "RAMAL" INTEGER WITH DEFAULT NULL
). ALTER TABLE "LOG_ACESSO" ADD PRIMARY KEY ("ID_ACESSO"). Agradeço qualquer sugestão que seja útil pensando em automatização ou script SQL que crie estas tabelas sem esta perda de incremento. Att.Carregando comentários...