none
Exportar objetos de um BD RRS feed

  • Pergunta

  • Olá,

    Estou passando pela seguinte situação:

    Tenho um BD que esta com a collate:  "Latin1_General_CI_AS" porém me solicitaram para alterar para a collate "SQL_Latin1_General_CP1_CI_AI" pois, falaram que a aplicação pode vir a ter problemas futuros. Então achei melhor criar um novo BD e importar os dados e tabelas (via wizard do management studio), funcionou perfeitamente, porém para minha surpresa ao executar o comando:

    SELECT * FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
    WHERE TABLE_SCHEMA = TABLE_SCHEMA AND TABLE_NAME = TABLE_NAME
    order by ORDINAL_POSITION

    Observei que não havia importado nenhum objeto, quando executo o mesmo comando no BD que esta com a collate "errada" é listado estes objetos (FK_OFITEMPROBLATENDIMENTO_PR, EFKEALUGABEGAB, PKSCVFINANPESQUISA) e mais 4805 objetos.

    Também tentei gerar script somente dos objetos (pelo assistente) ele executa alguns e os demais ficam com status de parado.

    (Estou simulando tudo em uma VM com win XP e SQL Server 2008 Standard)

    Desde já, agradeço o auxilio.

    quinta-feira, 17 de janeiro de 2013 19:24

Todas as Respostas

  • Neia_S,

    Como exatamente você fez a exportação dessa base? Criou um banco novo e depois pelo IMPORT/EXPORT DATA selecionou todas as tabelas no Wizard?
    Se fez isso, fazendo com que a estrutura da nova base fosse criada pelo próprio wizard, as suas FKs, PKs, Indices não são criados na nova base e por isso seu select não retornou dados.

    Na sua tentativa de gerar o script de estrutura, ele dá algum erro ou simplesmente fica "parado eternamente"?

    []'s


    Mariana Del Nero /* Se a resposta foi útil, não esqueça de marcá-la */

    quinta-feira, 17 de janeiro de 2013 20:48
  • Neia,

    Após selecionar todas as tabelas para criar o script, você tera uma opção que será a escolha de onde vai salvar os scripts gerados, nele você vai encontrar um botão "Advanced" ou "Avançado" e com isso poderá escolher o que está sendo criado ou não.

    Por via das duvidas, quando você diz que a exportação fica parada eternamente, você poderia verificar o errorlog do SQL Server, ou até mesmo verificar a tabela de sistema sys.dm_exec_requests para entender o que está acontecendo naquele momento.

    Se a resposta foi útil, classifique-a


    Att,
    Marcos Freccia [MTA|MCTS|MCITP|MCT SQL Server 2008]
    Blog|Twitter
    Assine também os feeds clicando aqui

    sexta-feira, 18 de janeiro de 2013 11:25
  • Mariana,

    Foi essa mesma, a forma como exportei os dados.

    Abaixo estou disponibilizando parte do log da tentativa de gerar o script..

    OBS: lembrando que estou fazendo estas tentativa com usuário administrador da maquina no win XP e usuario sa no SQL Server Standard 2008.

    Progresso da Geração de Script

    - Determinando os objetos do banco de dados 'teste' cujo script será gerado. (Êxito)

    - dbo.DEF_DLOGICONULL (Êxito)

    - sysdba (Êxito)

    - dbo.sp_campolog (Erro)
    Mensagens
    * A propriedade TextHeader não está disponível para StoredProcedure '[dbo].[sp_campolog]'. Talvez essa propriedade não exista para esse objeto ou não seja possível recuperá-la devido a direitos insuficientes de acesso.  O texto está criptografado. (Microsoft.SqlServer.Smo)

    Os links que aparecem após o erro acima para obter ajuda da Microsoft não abrem.

    Após este erro, todos os demais 4.000,00 objetos ficam com o status abaixo:

    - dbo.sp_criatriggers (Parado)

    - dbo.sp_montatrigger (Parado)

    - dbo.sp_montatriggerdelete (Parado)

    - dbo.sp_montatriggerinsert (Parado)

    - dbo.sp_montatriggerupdate (Parado)

    - dbo.sp_removetrigger (Parado)

    - dbo.sp_removetriggers (Parado)

    - dbo.sp_tipocampo (Parado)

    - dbo.SPC_ACESSAGLOBAIS (Parado)

    Achei que fosse pouca memória na minha VM, então tentei diretamente no ambiente de produção, um servidor com 16GB de RAM, e aconteceu a mesma coisa.

    sexta-feira, 18 de janeiro de 2013 11:52
  • Neia,

    Procure a procedure na qual aconteceu o erro e verifque se ela está com uma especie de cadeado nela, ou execute esse comando na base de dados que você esta tentando copiar.

    exec sp_helptext 'sp_campolog'

    E verifique se esse resultado aparece: 

    The text for object 'sp_campolog' is encrypted.

    Se isso acontecer, é pelo fato da procedure estar criptografada e com isso você não conseguirá realizar a copia. Você terá que retirar a criptografia dessa procedure.

    Se a resposta foi útil, classifique-a



    Att,
    Marcos Freccia [MTA|MCTS|MCITP|MCT SQL Server 2008]
    Blog|Twitter
    Assine também os feeds clicando aqui

    sexta-feira, 18 de janeiro de 2013 12:02
  • Exatamente o retorno foi:

    O texto do objeto 'sp_campolog' está criptografado.

    Marcos, você tem algum link para me indicar como fazer a retirada desta criptografia? Pois, nunca fiz tal procedimento.

    Hoje as tabelas estão com a collate Latin1_General_CI_AS e tenho que alterar para sql_latin1_general_cp1_ci_ai

    sexta-feira, 18 de janeiro de 2013 12:17
  • Neia,

    Você tem duas saídas.

    1) A empresa do Software passa o texto dessa procedure para você. Você pega essa procedure e apenas retira a clausula WITH ENCRYPTION.

    2) Se eles não quiserem passar a procedure para você, a empresa Red-Gate tem uma ferramenta chamada SQL Prompt que é paga, mas vc pode usar ela trial por 15 dias e essa ferramenta consegue pegar o texto da procedure. Segue o link para você ver a ferramenta e realizar o download: http://www.red-gate.com/products/sql-development/sql-prompt/

    Se a resposta for útil, classifique-a

     


    Att,
    Marcos Freccia [MTA|MCTS|MCITP|MCT SQL Server 2008]
    Blog|Twitter
    Assine também os feeds clicando aqui

    sexta-feira, 18 de janeiro de 2013 12:21
  • Muito obrigada,

    Acabei de abrir chamado junto a empresa, para me enviar o código desta SP. Se eu não tiver sucesso com meu pedido vou usar esta ferramenta sim.

    Muito obrigada pelo auxilio.

    sexta-feira, 18 de janeiro de 2013 12:27
  • Olá Neia,

    Fico contente em ter ajudado!! Não esqueça de Propor como resposta as questões.

    Até! 


    Att,
    Marcos Freccia [MTA|MCTS|MCITP|MCT SQL Server 2008]
    Blog|Twitter
    Assine também os feeds clicando aqui

    sexta-feira, 18 de janeiro de 2013 12:29
  • Marcos, 

    Fiquei um tempo sem dar retorno, porque a empresa disse que alterar a collate não é urgente agora, mas que tenho que alterar para o futuro. Agora que as demais alterações e testes estão prontos, estou voltando a este assunto.

    Pedi o código das SPs mas o retorno que ele me deram foi o seguinte :[pode remover a procedure,pois ao instalar o log de auditoria e criado novamente na base de dados.] Nunca fiz tal procedimento, procurei rapidamente na net e não achei nada sobre instalar log de auditoria. Você ja fez tal procedimento?

    Atenciosamente

    terça-feira, 29 de janeiro de 2013 18:57
  • Neia, ao inves de voce exportar todos os objetos, não seria possivel fazer um backup e restaurar na base que voce deseja ? com isto tudo o que tem na base com certeza teria na outra.

    Alexandre Matayosi Conde Mauricio. 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.

    terça-feira, 29 de janeiro de 2013 19:09
  • Alexandre, o problema de quando faço este procedimento é que ele restura a collate que estava no momento do backup e não a collate que esta no BD.

    Então eu optei por:

    1)Criar um BD zerado

    2) via wizard do SQL Server, copiei todas as tabelas e dados para o novo BD

    3) via wizard exportei os objetos para restaura-los no novo BD, porém o wizard não consegue exportar as SPs que estão criptografadas, e a ferramenta SQL Prompt não exibi o código das SPs criptografadas na versão trial.

    terça-feira, 29 de janeiro de 2013 19:14
  • Entendi, mas depois de fazer o restore voce poderia fazer a alteração do collate.

    Alexandre Matayosi Conde Mauricio. 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.

    terça-feira, 29 de janeiro de 2013 19:18
  • Quando tento alterar o collate, tenho este retorno:

    TÍTULO: Microsoft SQL Server Management Studio
    ------------------------------

    Alterar falhou para Banco de dados 'XXXXX'.  (Microsoft.SqlServer.Smo)

    Para obter ajuda, clique em: http://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Server&ProdVer=10.0.5500.0+((Katmai_PCU_Main).110921-2358+)&EvtSrc=Microsoft.SqlServer.Management.Smo.ExceptionTemplates.FailedOperationExceptionText&EvtID=Alterar+Database&LinkId=20476

    ------------------------------
    INFORMAÇÕES ADICIONAIS:

    Ocorreu uma exceção ao executar um lote ou uma instrução Transact-SQL. (Microsoft.SqlServer.ConnectionInfo)

    ------------------------------
    Detalhe aqui o BD esta com usuário restrito e estou logada com sa e mesmo assim apresenta que não é possivel bloquear.
    Não foi possível bloquear exclusivamente o banco de dados para executar a operação.
    Falha em ALTER DATABASE. Não é possível definir o agrupamento padrão do banco de dados 'XXXXX' como SQL_Latin1_General_CP1_CI_AI. (Microsoft SQL Server, Erro: 5030)

    Para obter ajuda, clique em: http://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Server&ProdVer=10.00.5500&EvtSrc=MSSQLServer&EvtID=5030&LinkId=20476

    ------------------------------
    BOTÕES:

    OK
    ------------------------------

    E os links que são listados na mensagem de erro, não são encontrados :(

    terça-feira, 29 de janeiro de 2013 19:32
  • Boa tarde Néia,

    Talvez vc jah tenha lido esse post....mas segue:
    http://www.mcdbabrasil.com.br/modules.php?name=Forums&file=viewtopic&t=4057

    at.
    rafael

    terça-feira, 29 de janeiro de 2013 19:45
  • A empresa disponibilizou o Log de Auditoria, para eu fazer a instalação.

    Vou torcer que todos os objetos sejam restaurados, com sucesso.

    Me desejem sorte.

    Obrigada a todos que me ajudaram de um forma ou de outra.

    quarta-feira, 30 de janeiro de 2013 11:02
  • Neia_S, só um adendo, trocar o collate da base não altera o collate das colunas já criadas. Acredito que criar um banco novo já com o collate correto e fazer a transferência através do Export Data seja a melhor forma.
    quarta-feira, 30 de janeiro de 2013 11:15