Avalados por :

Como converter colunas de IMAGEM para varbinary(MAX) no SQL Server 2008 R2 de forma eficiente

  • Creado 01/03/2024
  • Modificado 01/03/2024
  • 40 Vistas
0
Cargando...

Problema 1:

Qual é a melhor maneira de converter colunas de IMAGEM para varbinary(MAX)?

Estou apenas testando minha aplicação que roda no SQL 2008 r2 (mas em modo de compatibilidade 80 - SQL Server 2000).

Provavelmente tenho muito trabalho a fazer, principalmente com recursos obsoletos (como a sintaxe pb *= que não é mais usada, mas sim inner join).

Descubro que o tipo de dados IMAGEM será obsoleto, mas deve ser uma cópia direta para varbinary(MAX).

Agora, o problema aqui é que as 3 maiores tabelas do meu banco de dados têm 76 GB, 32 GB, 7 GB.

ex. 1: isso pode funcionar (por favor me avise se não). exceto que enche o log do banco de dados e o mata.

update tblcasereporttrans set userreportimage2 = userreportimage

GO

ALTER TABLE tblcasereporttrans DROP COLUMN userreportimage

GO

exec sp_rename 'tblcasereporttrans.userreportimage2','userreportimage','COLUMN'

GO

Pessoalmente, acredito que uma restauração do banco de dados pode ser a melhor maneira de fazer isso, mas como posso fazer para restaurar em um tipo de coluna diferente?

Restaurar o banco de dados completo em um banco de dados de teste leva 13 minutos, 786.896 segundos (154.579 MB/seg).

Suspeito que qualquer outra forma levará muito mais tempo.

-----

Problema 2:

Agora estou fazendo um teste com (então suponho que, se necessário, posso repeti-lo 5000 vezes e manter o arquivo de log sob controle... (ainda assim, não será bom para minhas cópias de segurança externas/instantâneas, acredito)

SET ROWCOUNT 40

GO

WHILE EXISTS (SELECT * FROM tblcasereporttrans where userreportimage2 is null)

BEGIN

update tblcasereporttrans set userreportimage2 = userreportimage where userreportimage2 is null

END

GO

ALTER TABLE tblcasereporttrans DROP COLUMN userreportimage

GO

exec sp_rename 'tblcasereporttrans.userreportimage2','userreportimage','COLUMN'

GO

então eu pego meus dados (documento do Word) e parece estar corrompido.

selectblob tblCaseReportTrans.UserReportImage

into :lb_doc

from tblCaseReportTrans

where tblCaseReportTrans.JobReferenceNo = :ls_refno and

tblCaseReportTrans.Reportid = :ls_reportid and

tblCaseReportTrans.create_date = :ldt_create;

if SQLCA.SQLCode < 0 then

f_display_msg("E", 5000, SQLCA.SQLErrText)

end if

if IsNull(lb_doc) then

Messagebox("error","error in blobdata")

return

end if

f_write_blob(lb_doc, f_gettemppath() + "CTSTEMP-CO-" +ls_reportid +"-" + string(f_getdate(),"yyyymmddhhmm") + "-" + ls_refno + ".doc")

ole_1.objectdata = lb_doc // FALHA AQUI

então alguma sugestão melhor para ambos os problemas?

Pedro Pascal
Se unió el 07/03/2018
Pinterest
Telegram
Linkedin
Whatsapp

4 Respuestas

0
Cargando...

Olá, marquei você como correto.

a) Tentei uma conexão ODBC usando o cliente nativo do SQL Server 10, mas não funcionou. (ou seja, sob o ODBC do Windows, o driver selecionado é o cliente nativo do SQL Server)

b) Meu pbodb125.ini foi implantado com o aplicativo e também foi atualizado (tanto no diretório do aplicativo quanto na pasta de arquivos compartilhados pb da máquina de desenvolvimento), mas isso não ajudou (pbmaxblobsize foi atualizado para

PBMaxBlobSize='2147483647'

PBMaxTextSize='2147483647'

)

alterar meu login de banco de dados para snc funcionou, embora envolva toneladas de testes antes que eu possa implementá-lo.

Acho que procrastinarei em vez disso.

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

Se possível, você deve fazer uma verificação cruzada com SNC em vez de ODBC. Pode ser que varbinary (max) não seja compatível com ODBC. Não é afirmado claramente que ODBC não funcionará, mas a documentação sempre menciona apenas SNC.

SyBooks Online

SyBooks Online

[...] A interface SNC do PowerBuilder mapeia o tipo de dados Varbinary(max) para um tipo de dados BLOB, então para recuperar ou atualizar dados de filestream, use as declarações SQL SelectBlob ou UpdateBlob, respectivamente. [...]

Já tentou com blobs menores para reduzir o problema?

Dado que varbinary (max) é mapeado para BLOBs, maxblobsize pode ser um problema.

FYI:

http://www.linkedin.com/groups/Help-on-varbinary-max-issue-1082737.S.245805926

SAP Sybase Forums - PowerBuilder - Database - UPDATEBLOB on MS SQL Server 2008 - Function Sequence E...

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

Estou utilizando ODBC para me conectar.

As configurações em pbodb125.ini só precisam estar lá para maxblobsize.

O problema agora é que o código funciona para IMAGE, mas não para varbinary(MAX).

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019
0
Cargando...

Olá,

Problema 1:

Em relação às suas legítimas preocupações sobre o arquivo de log, você pode tentar configurar o modelo de recuperação do banco de dados no SQL Server como 'simples' durante a conversão, o que deve manter o tamanho do arquivo de log bastante baixo.

http://msdn.microsoft.com/de-de/library/ms189275.aspx

Quando fizemos nossa conversão de imagem para varbinary (max) algum tempo atrás, até realizamos um ALTER TABLE direto sem usar uma segunda coluna.

ALTER TABLE tblcasereporttrans ALTER COLUMN userreportimage VARBINARY ( MAX );

Mas em nosso caso, o tamanho máximo da tabela afetada era de aproximadamente 20GB, muito menor que o seu exemplo.

Problema 2:

Quando mudamos o tipo de dados, não precisamos mudar mais nada no código. Então, SELECTBLOB funciona bem com varbinary(max) (também usamos PB 12.5). Pode ser um problema de driver? Como você se conecta ao seu banco de dados?

No nosso caso, usamos SQLNCLI10 (Cliente nativo do SQL para SQL Server 2008).

Saudações

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019

contacto@primeinstitute.com

(+51) 1641 9379
(+57) 1489 6964

© 2024 Copyright. Todos los derechos reservados.

Desarrollado por Prime Institute

¡Hola! Soy Diana, asesora académica de Prime Institute, indícame en que curso estas interesado, saludos!
Hola ¿Puedo ayudarte?