Avalados por :

Cómo convertir columnas de IMAGEN a varbinary(MAX) en SQL Server 2008 r2 de manera eficiente

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

Problema 1:

¿Cuál es la mejor manera de convertir columnas de IMAGEN a varbinary(MAX)?

Solo estoy probando mi aplicación que se ejecuta en SQL 2008 r2 (pero en modo de compatibilidad 80 (SQL Server 2000).

Probablemente tenga mucho trabajo por hacer, principalmente con características obsoletas (como ya no se usa la sintaxis pb *= pero se usa inner join).

Así que descubro que el tipo de datos IMAGEN será obsoleto, pero debería ser una copia directa a varbinary(MAX).

Ahora, el problema aquí es que las 3 tablas más grandes de mi base de datos son de 76 GB, 32 GB, 7 GB.

ej. 1: esto podría funcionar (por favor avíseme si no). excepto que llena el registro de la base de datos y lo mata.

update tblcasereporttrans set userreportimage2 = userreportimage

GO

ALTER TABLE tblcasereporttrans DROP COLUMN userreportimage

GO

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

GO

Personalmente creo que una restauración desde la base de datos podría ser la mejor manera de hacerlo, pero ¿cómo puedo hacer que se restaure a un tipo de columna diferente?

Restaurar la base de datos completa en una base de datos de prueba lleva 13 minutos, 786.896 segundos (154.579 MB/seg).

Sospecho que cualquiera de las otras formas tomará mucho más tiempo.

-----

Problema 2:

Así que ahora estoy haciendo una prueba con (así que supongo que si es necesario, puedo repetirla 5000 veces y mantener el archivo de registro bajo control... (aún así, no va a ser bueno para mis copias de seguridad externas/instantáneas, creo)

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

luego voy y saco mis datos (documento de Word) y parece estar corrupto.

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 // FALLA AQUÍ

así que ¿alguna sugerencia mejor para ambos problemas?

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

4 Respuestas

0
Cargando...

Hola, te he marcado como correcto.

a) Intenté una conexión odbc usando el cliente nativo de SQL Server 10, pero no funcionó. (es decir, bajo odbc de Windows, el controlador seleccionado es el cliente nativo de SQL Server)

b) Mi pbodb125.ini se desplegó con la aplicación y también se actualizó en (tanto en el directorio de la aplicación como en la carpeta de archivos compartidos pb de la máquina de desarrollo), pero eso no ayuda (pbmaxblobsize se actualizó a

PBMaxBlobSize='2147483647'

PBMaxTextSize='2147483647'

)

cambiar mi inicio de sesión de base de datos a snc funcionó, aunque implicará toneladas de pruebas antes de que pueda implementarlo.

Supongo que procrastinaré en su lugar.

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

Si es posible, deberías hacer una verificación cruzada con SNC en lugar de ODBC. Podría ser que varbinary (max) no sea compatible con ODBC. No se afirma claramente que ODBC no funcionará, pero la documentación siempre menciona solo SNC.

SyBooks Online

SyBooks Online

[...] La interfaz SNC de PowerBuilder mapea el tipo de datos Varbinary(max) a un tipo de datos BLOB, por lo que para recuperar o actualizar datos de filestream, use las declaraciones SQL SelectBlob o UpdateBlob, respectivamente. [...]

¿Lo has intentado con blobs más pequeños para reducir el problema?

Dado que varbinary (max) se mapea a BLOBs, maxblobsize podría ser un 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...

Estoy utilizando ODBC para conectarme.

Los ajustes en pbodb125.ini solo necesitan estar allí para maxblobsize.

El problema ahora es que el código funciona para IMAGE, pero no para varbinary(MAX).

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

Hola,

Problema 1:

En relación con sus legítimas preocupaciones sobre el archivo de registro, podría probar a configurar el modelo de recuperación de la base de datos en SQL Server como 'simple' durante la conversión, lo que debería mantener el tamaño del archivo de registro bastante bajo.

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

Cuando hicimos nuestra conversión de imagen a varbinary (max) hace algún tiempo, incluso hicimos un ALTER TABLE directo sin utilizar una segunda columna.

ALTER TABLE tblcasereporttrans ALTER COLUMN userreportimage VARBINARY ( MAX );

Pero en nuestro caso, el tamaño máximo de la tabla afectada era de aproximadamente 20GB, mucho más pequeño que su ejemplo.

Problema 2:

Cuando cambiamos el tipo de datos no tuvimos que cambiar nada más en el código. Así que SELECTBLOB funciona bien con varbinary(max) (también usamos PB 12.5). ¿Podría ser un problema de controlador? ¿Cómo se conecta a su base de datos?

En nuestro caso, utilizamos SQLNCLI10 (Cliente nativo de SQL para SQL Server 2008).

Saludos

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?