none
Ajuda Registros excluídos RRS feed

  • Pergunta

  •  

    Pessoal. Acidentalmente acabei excluindo uns registro de um de uma tabela no sql server 2005, estou desesperado, se alguém puder ajuda, agradeço!

    quarta-feira, 15 de junho de 2011 19:07

Respostas

  • Estranho. Era pra funcionar.

    1. Tente colocar um Go entre as linhas;
    2. No luigar do *, informa a lista de campos.

    Testei aqui e funcionou certinho:

    SET IDENTITY_INSERT HumanResources.Department ON

    GO

     

    Insert Into HumanResources.Department (DepartmentID, Name, GroupName, ModifiedDate)

    Values (20,'Teste2','GroupName2',GETDATE())

    GO

     

    SET IDENTITY_INSERT HumanResources.Department OFF

    GO


    Roberson Ferreira - Database Developer

    Se esta sugestão for útil, por favor, classifique-a como útil.
    Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.

    • Marcado como Resposta Richard Juhasz terça-feira, 3 de janeiro de 2012 21:01
    quarta-feira, 15 de junho de 2011 21:50

Todas as Respostas

  • Ita,

     

    Se não existir um backup desta base, não ha muito o que ser feito.

     

    Alguns SGBD implementam a feature de rollback in time (FlashBack), porem isso no SQL ainda não existe.


    Oracle OCA11g, MCC 2011! Dicas e novidades: www.fabrizziocaputo.wordpress.com
    quarta-feira, 15 de junho de 2011 19:10
    Moderador
  • Ita,

     

    Se não existir um backup desta base, não ha muito o que ser feito.

     

    Alguns SGBD implementam a feature de rollback in time (FlashBack), porem isso no SQL ainda não existe.


    Oracle OCA11g, MCC 2011! Dicas e novidades: www.fabrizziocaputo.wordpress.com

    Tenho o backup do que e copiado para outra maquina, será que posso renomear este e adicionar o backup no lugar ?

    .mdf
    .ldf

    quarta-feira, 15 de junho de 2011 19:18
  • Ita,

     

    Sim, voce pode fazer isso, mas eu nao aconselho, pois se voce fizer isso, sua base voltara ao tempo 100%.

     

    Se voce possui um MDF e o LDF como Backup, faça o seguinte:

    - Attache esses como uma nova base, então vamos supor que sua base se chame: ProdBase, então attache esses arquivos de backup como ProdBase_ITA

    - Veja se os dados deletados se encontram nesta nova base, se sim:

    INSERT INTO ProdBase.dbo.TABELA SELECT * FROM ProdBase_ITA.dbo.TABELA


    Oracle OCA11g, MCC 2011! Dicas e novidades: www.fabrizziocaputo.wordpress.com
    quarta-feira, 15 de junho de 2011 19:27
    Moderador
  • Me gera este erro:

    Agradeco se poder ajudar

     

    Msg 8101, Level 16, State 1, Line 2
    An explicit value for the identity column in table 'BancoTesteGenerico.dbo.TB_USUARIO' can only be specified when a column list is used and IDENTITY_INSERT is ON.

    quarta-feira, 15 de junho de 2011 19:42
  • Ita,

     

    Isso quer dizer que algum campo de sua tabela é identity, ou seja, auto-numeração, faça o seguinte.

     

    SET IDENTITY_INSERT DatabaseSemDados.dbo.TABELA ON

    FAÇA O CODIGO QUE ENVIEI ACIMA DE TRANSFERENCIA DOS DADOS

    SET IDENTITY_INSERT DatabaseSemDados.dbo.TABELA OFF


    Oracle OCA11g, MCC 2011! Dicas e novidades: www.fabrizziocaputo.wordpress.com
    quarta-feira, 15 de junho de 2011 19:45
    Moderador
  •  

    estou rodando isso em uma New Query no banco Original, mostra todos os registros, quando vou na tabela do banco teste. não tem nada

     

    Atte..

    SET IDENTITY_INSERT BancoTesteGenerico.dbo.usuario_sistema OFF SELECT * FROM BancoOrigem.dbo.usuario_sistema

    quarta-feira, 15 de junho de 2011 19:53
  • Ita,

     

    Vamos por partes, creio que voce fez confusão.

    1 - Em relação ao problema original (Perda dos dados)

    - A unica maneira é um backup, voce me disse que possui outro MDF e LDF desta base antes de ter sido deletado os dados certo?

    Se sim, Attache esses arquivos como uma nova base de dados.

    Rode um select: SELECT * FROM TABELA, na tabela que houve perda dos dados, para confirmar se essa tabela deste outro datafile possui seus dados

    Se sim, sera necessario realizar o INSERT SELECT, porem uma das colunas é identity, então voce deve:

    SET IDENTITY_INSERT BancoOriginalOndeOsDadosForamDeletados.Schema.TABELA ON

    INSERT INTO BancoOriginalOndeOsDadosForamDeletados.Schema.TABELA SELECT * FROM BancoAttachadoAgoraComOsDados.Schema.TABELA

    SET IDENTITY)INSERT BancoOriginalOndeOsDadosForamDeletados.Schema.TABELA OFF

     

    Agora, se ao rodar o select na tabela no banco recem attachado, infelizmente este datafile não serve, neste caso voltamos a primeira pergunta, existe algum outro backup?


    Oracle OCA11g, MCC 2011! Dicas e novidades: www.fabrizziocaputo.wordpress.com
    quarta-feira, 15 de junho de 2011 20:08
    Moderador
  • Amigo, este seria o código com dados reais, quero inseri na tabela do banco BancoTesteGenerico, já rodei tanto em um quanto no outro
    e gerou o erro :

    Msg 156, Level 15, State 1, Line 3
    Incorrect syntax near the keyword 'Schema'.
    Msg 156, Level 15, State 1, Line 3
    Incorrect syntax near the keyword 'Schema'.
    Msg 156, Level 15, State 1, Line 4
    Incorrect syntax near the keyword 'OFF'.

    Agradeço!!

     

    SET IDENTITY_INSERT BancoTesteGenerico.dbo.usuario_sistema  ON
    INSERT INTO BancoTesteGenerico.Schema.usuario_sistema  SELECT * FROM BancoDi.Schema.usuario_sistema
    SET IDENTITY)INSERT BancoTesteGenerico.dbo.usuario_sistema  OFF

    quarta-feira, 15 de junho de 2011 20:34
  • Ita,

     

    Veja que na terceira linha, ao invez de um _ voce colocou um ), altere isso.

    Outra coisa, a palavra schema, substitua pelo schema de suas tabelas, por default, se voce criou com o usuario SA, deve ser dbo.


    Oracle OCA11g, MCC 2011! Dicas e novidades: www.fabrizziocaputo.wordpress.com
    quarta-feira, 15 de junho de 2011 20:41
    Moderador
  • Ok! fiz as alterações e gerou um novo erro:

    Agradeço!!

     

    Msg 8101, Level 16, State 1, Line 2
    An explicit value for the identity column in table 'BancoTesteGenerico.dbo.usuario_sistema' can only be specified when a column list is used and IDENTITY_INSERT is ON.

    quarta-feira, 15 de junho de 2011 20:47
  • Ita,

     

    Execute uma linha por vez. Voce primeiro precisa habilitar o identity insert para inserir os valores.


    Oracle OCA11g, MCC 2011! Dicas e novidades: www.fabrizziocaputo.wordpress.com
    quarta-feira, 15 de junho de 2011 20:51
    Moderador
  • Ok!! fiz uma linda de cada vez

    gera o mesmo erro.

    Att.

    quarta-feira, 15 de junho de 2011 20:55
  • Ita,

     

    Uma coisa, no insert, na tabela que sera inserido os dados, deve-se especificas todas as colunas, segue script de exemplo:

     

    --CRIA TABELA 1

    CREATE TABLE funcionarios(id INT IDENTITY(1,1), nome VARCHAR(100))

    --CRIA TABELA 2

    CREATE TABLE funcionarios2(id INT IDENTITY(1,1), nome VARCHAR(100))

    --CARGA DE DADOS

    INSERT INTO funcionarios(nome) VALUES

    ('Funcionario 1'),

    ('Funcionario 2'),

    ('Funcionario 3')

    --SELECT

    SELECT * FROM funcionarios

    /*

    1 Funcionario 1

    2 Funcionario 2

    3 Funcionario 3

    */

    --INSERT

    INSERT INTO funcionarios2 SELECT * FROM funcionarios

    /*

    An explicit value for the identity column in table 'funcionarios2' can only be specified when a column list is used and IDENTITY_INSERT is ON.

    */

    --HABILITA IDENTITY_INSERT

    SET IDENTITY_INSERT funcionarios2 ON

    --INSERT

    INSERT INTO funcionarios2(id, nome) SELECT * FROM funcionarios

    --DESABILITA

    SET IDENTITY_INSERT funcionarios2 OFF


    Oracle OCA11g, MCC 2011! Dicas e novidades: www.fabrizziocaputo.wordpress.com
    quarta-feira, 15 de junho de 2011 21:00
    Moderador
  • Fiz assim, para dois campos apenas na tebela e gerou o mesmo erro:

    Agradeço!!

     

    SET IDENTITY_INSERT BancoTesteGenerico.dbo.usuario_sistema  ON
    INSERT INTO BancoTesteGenerico.dbo.usuario_sistema (controlefuncionario,nome)
    SELECT * FROM BancoDi.dbo.usuario_sistema
    SET IDENTITY_INSERT BancoTesteGenerico.dbo.usuario_sistema  OFF

    quarta-feira, 15 de junho de 2011 21:09
  • Estranho. Era pra funcionar.

    1. Tente colocar um Go entre as linhas;
    2. No luigar do *, informa a lista de campos.

    Testei aqui e funcionou certinho:

    SET IDENTITY_INSERT HumanResources.Department ON

    GO

     

    Insert Into HumanResources.Department (DepartmentID, Name, GroupName, ModifiedDate)

    Values (20,'Teste2','GroupName2',GETDATE())

    GO

     

    SET IDENTITY_INSERT HumanResources.Department OFF

    GO


    Roberson Ferreira - Database Developer

    Se esta sugestão for útil, por favor, classifique-a como útil.
    Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.

    • Marcado como Resposta Richard Juhasz terça-feira, 3 de janeiro de 2012 21:01
    quarta-feira, 15 de junho de 2011 21:50