Interfaz de Usuario
Introducción
El interfaz de usuario sirve de asistente para la creación, administración y parametrización de Configuraciones de carga. Una vez creadas, se pueden ejecutar desde la propia interfaz de usuario, o bien, por línea de comandos.
- El capítulo "Gestión de Configuraciones" describe aquella parte del interfaz de usuario que es independiente del objetivo de Insert Bulk Bestia.
- Este capítulo describe aquella parte del interfaz de usuario que permite la parametrización de las Configuraciones para esta aplicación.
- En este capítulo y capítulos posteriores se analizarán las diferentes opciones de parametrización para el origen, el destino y la carga y su implicación en la carga de datos.
Panel de Conexiones
Este panel será el que aparezca tras pulsar el botón "Editar" cuando se tenga seleccionada una configuración. A partir de aquí, se comienza la parametrización de dicha configuración.
Panel de Conexiones
En primer lugar, se deben suministrar las cadenas de conexión a las bases de datos origen y destino. Para ello dispone de una asistente que le ayudará a establecerlas.
Insert Bulk Bestia impone determinadas propiedades a la cadena de conexión para que pueda funcionar correctamente:
Asynchronous Processing=True;MultipleActiveResultSets=True;Application Name="Insert Bulk Bestia";ApplicationIntent=ReadWrite.
Las cadenas de conexión se almacenarán en el fichero ".ini" SIN CIFRAR , por lo que quedará comprometida su seguridad ya que en ellas se almacenará la contraseña. En futuras versiones, se solventará esta situación.
-
Permisos de Usuario
Para poder realizar determinadas tareas en la base de datos, el usuario utilizado para conectarse debe poseer determinados permisos. En el "Panel de Resultados", tras establecer una cadena de conexión, se muestra un ejemplo de cómo crear un usuario para poder utilizarlo con Insert Bulk Bestia y que posea los permisos adecuados. Dicho script, se muestra a continuación:
CREACION DE UN USUARIO PARA IBB
--En el ejemplo aquí descrito se creará un usuario "UserIbb".
--Los scripts se deberán ejecutar con permisos de "sysadmin".
--
--Se parte de un LOGIN con rol 'public' en el servidor:
-- Nota: Poner una contraseña segura.
USE [master]
GO
CREATE LOGIN [UserIbb] WITH PASSWORD=N'UserIbb', DEFAULT_DATABASE=[master],
DEFAULT_LANGUAGE=[Español], CHECK_EXPIRATION=OFF, CHECK_POLICY=ON
GO
--Se crea el usuario correspondiente en la Base de Datos master
-- Es necesario crearlo aquí para introducir el certificado. Más tarde, si se desea, se puede
-- eliminar, aunque podría volver a ser necesario para la actualización de
-- la aplicación.
USE [master]
GO
CREATE USER [UserIbb] FOR LOGIN [UserIbb] WITH DEFAULT_SCHEMA=[dbo]
GO
--Se le asignan los permisos de suplantar al usuario 'dbo' en [master]:
-- IBB añadirá el Certificado [InforCustomCryptCert] a [master] y a partir
-- de él, creará un Login(Inicio de sesión) sobre ese Certificado con el
-- que poder ejecutar Assemblies firmados y autenticados con dicho
-- Certificado.
-- Es el procedimiento adecuado sin tener que poner la Base de Datos en
-- un estado inseguro: TRUSTWORTHY ON
--
--También se desea que los Assemblies instalados puedan ser utilizados por
--desarrollos ajenos a IBB, por lo que se le asignará el usuario 'dbo'
--como propietario.
USE [master]
GO
GRANT IMPERSONATE ON USER::[dbo] TO [UserIbb]
GO
USE [master]
GO
GRANT ALTER ANY LOGIN TO [UserIbb]
GO
--Se le asignan permisos para alterar la configuración del servidor
--ya que IBB debe poder ejecutar ensamblados de .NET
USE [master]
GO
GRANT ALTER SETTINGS TO [UserIbb]
GO
--Las instrucciones que se van a ejecutar en IBB son:
USE [master]
EXEC sp_configure 'show advanced options', 1
RECONFIGURE
GO
USE [master]
EXEC sp_configure 'clr enabled', 1
RECONFIGURE
GO
--Los Assemblies que ejecutan tareas en paralelo necesitan permisos para
--ver el número de CPUs
USE [master]
GO
GRANT VIEW SERVER STATE TO [UserIbb]
GO
USE [master]
GO
GRANT CREATE CERTIFICATE TO [UserIbb]
GO
USE [master]
GO
GRANT ALTER ANY CERTIFICATE TO [UserIbb]
GO
USE [master]
GO
GRANT CREATE ASSEMBLY TO [UserIbb]
GO
USE [master]
GO
GRANT ALTER ANY ASSEMBLY TO [UserIbb]
GO
USE [master]
GO
GRANT EXTERNAL ACCESS ASSEMBLY TO [UserIbb] WITH GRANT OPTION
GO
USE [master]
GO
GRANT UNSAFE ASSEMBLY TO [UserIbb] WITH GRANT OPTION
GO
--Se crea el usuario correspondiente en las Bases de Datos Origen y Destino
USE [BaseDatosOrigenDestino]
GO
CREATE USER [UserIbb] FOR LOGIN [UserIbb] WITH DEFAULT_SCHEMA=[dbo]
GO
--Se le asignan los permisos de suplantar al usuario 'dbo' en ambas Bases
--de Datos.
-- Ello permitirá que los objetos que se creen pertenezcan al usuario
-- 'dbo', además de al usuario "UserIbb". De esta forma los objetos
-- podrán ser utilizados por otros usuarios.
-- También permite crear esquemas con la sentencia:
-- CREATE SCHEMA esquema AUTHORIZATION dbo
USE [BaseDatosOrigenDestino]
GO
GRANT IMPERSONATE ON USER::[dbo] TO [UserIbb]
GO
--Se le asignan los roles 'db_datareader' y 'db_datawriter' y 'db_ddladmin'
--al usuario en ambas Bases de Datos (Origen y Destino)
USE [BaseDatosOrigenDestino]
GO
ALTER ROLE [db_datareader] ADD MEMBER [UserIbb]
GO
ALTER ROLE [db_datawriter] ADD MEMBER [UserIbb]
GO
ALTER ROLE [db_ddladmin] ADD MEMBER [UserIbb]
GO
--Se le asignan los permisos para poder ejecutar procedimientos almacenados
--al usuario en ambas Bases de Datos (Origen y Destino)
USE [BaseDatosOrigenDestino]
GO
GRANT EXECUTE TO [UserIbb]
GO
USE [BaseDatosOrigenDestino]
GO
GRANT EXECUTE ON SCHEMA::[dbo] TO [UserIbb]
GO
USE [BaseDatosOrigenDestino]
GO
GRANT CREATE ASSEMBLY TO [UserIbb]
GO
USE [BaseDatosOrigenDestino]
GO
GRANT ALTER ANY ASSEMBLY TO [UserIbb]
GO
--Se le asignan los permisos para poder ver el estado de la Base de Datos
--en ambas Bases de Datos (Origen y Destino)
USE [BaseDatosOrigenDestino]
GO
GRANT VIEW DATABASE STATE TO [UserIbb]
GO
Panel Origen
En el "Panel de Conexiones", al pulsar sobre el botón "Parametrizar Origen", se muestra el "Panel Origen" que permite decidir qué acciones se realizarán en el origen. Como se puede apreciar en la figura, cada opción tiene asociado un tooltip con exhaustiva información.
Panel Origen
-
Crear Objetos en Origen
En el capítulo Estrategia de Copia de Datos, se supuso que hay una base de datos principal (producción), que se desea replicar en el resto de entornos. Si Insert Bulk Bestia puede crear sus objetos en dicha base de datos, el operador podrá realizar allí sus adaptaciones. Posteriormente, al replicar la estructura del origen, dichas adaptaciones serán llevadas al resto de destinos. De esta forma, el control de dichas adaptaciones está centralizado en la base de datos principal.
Si por el contrario, no se crean dichos objetos en la base de datos origen, Insert Bulk Bestia debe obtener la información del origen de otra forma. La extraerá de la base de datos de destino, ya que se parte de la hipótesis de que ambas bases de datos son idénticas o similares.
Nota: Este comportamiento cambiará en futuras versiones para así poder ampliar los posibles orígenes de datos, como Oracle, etc.
No crear los objetos en el origen también tiene como consecuencia que las adaptaciones realizadas por el operador para la copia de datos deberá realizarlas en el destino. Por tanto, cuando replique la estructura de la base de datos origen en el destino, perderá dichas adaptaciones.
-
Actualizar Lista de Secuencias
Ejecuta el procedimiento almacenado ibb.Cargar_Tablas_Actualiza_Secuencias indicando que es la base de datos origen: Añade a ibb.Cargar_Tablas_Secuencias registros con las nuevas secuencias y elimina los registros correspondiente a las que han desaparecido. El operador deberá indicar cómo se reinicializan las nuevas secuencias.
-
Actualizar Lista de Tablas
Ejecuta el procedimiento almacenado ibb.Cargar_Tablas_Actualiza indicando que es la base de datos origen. La utilidad de este parámetro se puede comprender con la descripción realizada en el apartado 1º Lectura de la Estructura del Origen.
-
Actualizar Cláusula SELECT
Parámetro que se le pasa al procedimiento almacenado ibb.Cargar_Tablas_Actualiza para indicarle que actualice las cláusulas SELECT de cada tabla por si éstas han sufrido modificaciones desde la última vez que se actualizó esta tabla. La utilidad de este parámetro se puede comprender con la descripción realizada en los apartados 1º Lectura de la Estructura del Origen y 3º Actualización del Destino con la Estructura del Origen.
Se ha de tener en cuenta que activar este parámetro hará que las modificaciones realizadas manualmente en las cláusulas SELECT se pierdan, pero si no lo activa, perderá las nuevas modificaciones que se hayan realizado en la base de datos. Para ello, las acciones personalizadas en el origen son la alternativa perfecta para realizar las modificaciones deseadas en las cláusulas SELECT y WHERE. De esta forma, por un lado, la tabla se actualizará con los cambios que se hayan producido en el origen, y por otro, se conservarán las modificaciones que usted desea realizar.
-
-
Ejecutar Acciones Personalizadas
Ejecuta el procedimiento almacenado ibb.Cargar_Tablas_Acciones_Programables_Origen. En él, el operador puede programar acciones personalizadas que alteren las dos tablas anteriores tras su actualización. Por ejemplo, puede clasificar automáticamente las nuevas tablas que aparezcan, o bien, puede cambiar las cláusulas SELECT de forma automática.
-
Copiar Lista de Secuencias al Destino
Indica copiar el contenido de ibb.Cargar_Tablas_Secuencias desde el origen a ibb.Cargar_Tablas_Secuencias_Copia en el destino.
Marcar esta opción hace que automáticamente se marque la opción Actualizar Lista de Secuencias en el "Panel Destino".
-
Copiar Lista Tablas al Destino
Indica copiar el contenido de ibb.Cargar_Tablas desde el origen a ibb.Cargar_Tablas_Copia_Origen en el destino. La utilidad de este parámetro se puede comprender con la descripción realizada en el apartado 2º Traspaso de la Estructura del Origen al Destino.
-
Panel Destino
En el "Panel de Conexiones", al pulsar sobre el botón "Parametrizar Destino", se muestra el "Panel Destino", que permite decidir qué acciones se realizarán en el destino.
Panel Destino
-
Actualizar Lista de Secuencias
Ejecuta el procedimiento almacenado ibb.Cargar_Tablas_Actualiza_Secuencias indicando que es la base de datos destino. La utilidad de este parámetro se puede comprender con la descripción realizada en los apartados 3º Actualización del Destino con la Estructura del Origen y 4º Actualización del Destino con la Estructura del Destino.
-
Actualizar Lista de Tablas
Las Tablas a Copiar tienen el mismo planteamiento que las secuencias: que el operador tenga centralizadas en el origen las alteraciones que desea trasladar al resto de destinos.
Sin embargo, aquí es más fácil de entender, ya que en la tabla ibb.Cargar_Tablas existen una serie de campos para el origen y otra serie de campos para el destino. Con esta opción, se le está indicando que en el destino se deben actualizar los campos correspondientes al origen con la información proveniente del origen. Y la del destino que se actualice con la estructura que posea la base de datos de destino, añadiendo o eliminando tablas según el destino haya sufrido modificaciones.
-
Actualizar Cláusula SELECT
Parámetro que se le pasa al procedimiento almacenado ibb.Cargar_Tablas_Actualiza para indicarle que actualice las cláusulas SELECT de cada tabla por si éstas han sufrido modificaciones desde la última vez que se actualizó esta tabla. La utilidad de este parámetro se puede comprender con la descripción realizada en los apartados 1º Lectura de la Estructura del Origen y 3º Actualización del Destino con la Estructura del Origen.
Se ha de tener en cuenta que activar este parámetro hará que las modificaciones realizadas manualmente en las cláusulas SELECT se pierdan, pero si no lo activa, perderá las nuevas modificaciones que se hayan realizado en la base de datos. Para ello, las acciones personalizadas en el destino son la alternativa perfecta para realizar las modificaciones deseadas en las cláusulas SELECT y WHERE. De esta forma, por un lado, la tabla se actualizará con los cambios que se hayan producido en el destino, y por otro, se conservarán las modificaciones que usted desea realizar.
-
-
Stop Tras Actualizar Tablas
La primera vez que se ejecuta una configuración, lo normal es que se desee comprobar qué datos se van a cargar y cómo se van a cargar. Activando esta opción, la ejecución de la carga se para en este punto (punto 8 del aparatado Algoritmo de Copia de Datos), permitiendo al usuario revisar la carga.
Este es el momento e que el usuario debería programar las acciones personalizadas, tanto en el origen como en el destino, para personalizar la carga. Una vez realizadas estas acciones, puede volver a ejecutar la configuración sin marcar esta opción, con lo que la carga de datos se realizaría ya con la adaptación deseada.
-
Ejecutar Acciones Personalizadas Iniciales
Marcando esta opción, se ejecuta el procedimiento almacenado ibb.Cargar_Tablas_Acciones_Programables_Destino_Iniciales. En él, el operador puede programar acciones personalizadas que alteren las dos tablas anteriores tras su actualización. Por ejemplo, puede clasificar automáticamente las nuevas tablas que aparezcan, o bien, puede cambiar las cláusulas SELECT de forma automática.
-
Vaciado Previo de Tablas
Normalmente, cuando se ejecuta una configuración, se realizará un borrado de las tablas antes de proceder a su carga. Sin embargo, habrá ocasiones en que sólo desee cargar una determinada tabla y sólo unos determinados registros, indicados en las sentencias WHERE, sin vaciar la tabla de destino. Desmarcando esta opción, no se realiza el vaciado previo de tablas.
-
Sólo Copiar Datos
NO OPERATIVO
Ante determinados problemas en la base de datos origen, como una excesiva fragmentación de los ficheros de base de datos, o algún otro problema por el estilo, es útil disponer de soluciones del tipo:
Copiar lo más rápidamente posible los datos desde una base de datos origen a otro destino. Con Insert Bulk Bestia sólo se realizaría la copia de datos, sin la regeneración de la estructura del destino, ahorrándose así un considerable tiempo en bases de datos de gran tamaño. Posteriormente, reparar la base de datos origen, y volver a recuperar los datos desde la base de datos de destino.
Con el fin de aumentar la eficiencia para el retorno de los datos a la base de datos origen, Insert Bulk Bestia si regeneraría todos los índices de las tablas segmentadas.
-
Eliminar Registros Foreing Keys
Cuando está marcado, eliminarán los registros necesarios de la tabla hija para poder levantar una Foreing Key. Es útil cuando los datos que se están copiando proceden de una base de datos que se encuentra ONLINE, ya que, durante la copia, es posible que en primer lugar se copien los registros de la tabla padre. En el tiempo que transcurre hasta que se copian los registros de la tabla hija, se pueden producir insercciones en la tabla padre y en la hija. En ese caso, la tabla hija tendrá registros huérfanos, lo cual hará que la Foreing Key no se pueda levantar.
Si no está marcado, indica que no levantarán aquellas Foreing Keys que tengan registros huérfanos en la tabla hija.
-
-
Ejecutar Acciones Personalizadas Finales
Marcando esta opción, se ejecuta el procedimiento almacenado ibb.Cargar_Tablas_Acciones_Programables_Destino_Finales. En él, el operador puede programar acciones personalizadas que alteren los datos copiados, como enmascarar de forma manual determinados datos, o bien, cambiar los paths almacenados en tablas.
Panel Carga
En el "Panel de Conexiones", al pulsar sobre el botón "Parametrizar Carga", se muestra el "Panel Carga", que permite decidir cómo se realizará la transferencia de datos:
Panel Carga
-
Selección de Tablas por Campo 'Clasificación'
Insert Bulk Bestia carga todas las tablas que tienen el campo 'CargarTabla' a 1 en la tabla ibb.Cargar_Tablas Mediante esta opción se le indica a Insert Bulk Bestia que marque con un 1 aquellas tablas cuyo campo 'ClasificacionTabla' coincida con los indicados en la siguiente opción. Si se desmarca esta opción, será responsabilidad del usuario marcar las tablas que desea cargar y de realizar las inicializaciones pertinentes. Dicha acción la puede realizar con las ibb.Cargar_Tablas_Acciones_Programables_Destino_Iniciales.
-
Clasificaciones de Tablas para Cargar
Lista de valores del campo 'ClasificacionTabla' de la tabla ibb.Cargar_Tablas separados por ,(coma) que servirá para indicar las tablas que se desean cargar.
NULL(sin texto) si no se desea realizar ninguna selección automática de tablas a cargar. Sin embargo, se realizan las inicializaciones pertinentes.
-
-
Índices
-
Tamaño (KB) mínimo para no eliminar índice Cluster
Tamaño en KB que ocupan todos los índices de una determinada tabla a partir del cual no se elimina el índice cluster de dicha tabla. El resto de índices si se eliminan. Este parámetro se debe fijar de forma experimental, ya que dependiendo del hardware disponible es posible que en tablas muy grandes se obtengan mayores prestaciones no eliminando el índice cluster.
Valores posibles:
0 -> Deja todos los índices cluster
NULL -> Elimina todos los índices cluster
>0 -> Elimina los índices cluster de aquellas tablas cuyo espacio en KB ocupado por los índices sea inferior al indicado
-
Usar TEMPDB para Crear Índices
Utilizar la base de datos Tempdb para ordenar los índices cuando se construyen.
Este parámetro, junto con el siguiente, son claves para mejorar la continuidad de los índices, es decir, mejorar las prestaciones finales de la Base de Datos.
Si se marca esta opción, se reduce el tiempo de la construcción de los índices a costa de utilizar espacio en la Base de Datos Tempdb, por lo que ésta debe estar dimensionada de forma adecuada. Además, mejora la continuidad de los mismos.
No se debe marcar esta opción cuando el tamaño de esta base de datos es crítico o es utilizada por otras bases de datos cuyo uso es crítico y no se desea hacer un uso intensivo de esta base de datos.
-
Creación de Índices con MAXDOP = 0 ó MAXDOP = 1
Utilizar el máximo grado de paralelismo en la creación de índices o serializar dicho proceso.
Si se marca esta opción se reduce el tiempo de la construcción de los índices a costa de utilizar todas las CPU disponibles. Sin embargo, empeora la continuidad de los índices, empeorando las prestaciones finales de la Base de Datos.
Nota: Como alternativa a esta configuración, se recomienda poner este parámetro a False y utilizar la construcción de índices en paralelo. De esta forma, se utilizará cada CPU para construir un sólo índice, pero se construirán en paralelo tantos índices como CPU disponibles en el servidor.
-
Creación de Índices en Paralelo
Utilizar las librerías integradas en SQL Server de Insert Bulk Bestia para la ejecución de procesos en paralelo Es posible que determinados tipos de licencia no contemplen esta posibilidad.
Si se marca esta opción se crean los índices en paralelo haciendo un uso muy intensivo de CPU y Discos.
-
-
Lotes de Registros
-
Tamaño del Lote
Nº de registros que son enviados al destino en cada lote.
Un valor de 0 indica que se envían en un lote todos los registros desde el origen al destino. Si se indica 'Usar Transacciones Internas', cada lote es enviado al destino en una transacción independiente.
Nota: El uso de transacciones grandes implica que en la Base de Datos Destino, el Registro de Transacciones debe está correctamente dimensionado. También implica un mayor tiempo en la copia de datos. En caso de error, los registros del lote no serán insertados.
-
Usar Transacciones Internas
Usar una transacción para cada lote de registros enviados al Destino.
-
Nº de Reintentos para la Carga de Datos
Insert Bulk Bestia puede reintentar (tantas veces como se indique en este parámetro) la carga de aquellas tablas (o segmentos) que han fallado. Está pensado para protegerse ante cortes de Red.
Si 'Tamaño del Lote' es distinto de 0, Insert Bulk Bestia vaciará la tabla (o segmento) y lo volverá a intentar. Si lo que desea es añadir registros a una determinada tabla, debe indicar un 'Tamaño del Lote' de 0 y marcar la opción 'Usar Transacciones Internas'. En ese caso, cuando se produzca un fallo, la tabla Destino quedará en su estado original, ya que Insert Bulk Bestia no vaciará dicha tabla Destino.
-
-
Nº de Cargas Simultáneas Máximo
Nº de threads o Nº de tablas que se cargarán simultáneamente. Es posible que determinados tipos de licencia no contemplen esta posibilidad.
Es el parámetro clave que permite acelerar la carga de datos desde una Base de Datos Origen a la Destino. Se debe modificar con extrema precaución en función del Hardware disponible, del Origen y del Destino.
Por ejemplo: Si se desean copiar los datos desde una Base de Datos de Producción mientras ésta se encuentra ONLINE, se recomienda poner un valor bajo (3-5) en este parámetro, de forma que no sature dicha Base de Datos. Por el contrario, si se desean copiar los datos desde una Base de Datos de Staging a una de Desarrollo, se puede poner un valor alto para este parámetro (10-20) para reducir el tiempo de copia haciendo un uso muy intensivo de CPU, Red y Discos.
Si se detectan problemas, este número máximo podrá ser reducido a 1 por Insert Bulk Bestia durante la carga.
Conclusión: Eficiencia, Seguridad y Velocidad
Con esta configuración, Insert Bulk Bestia puede crear los objetos que necesita en la base de datos origen, lo que le permite obtener la información de la estructura del origen de forma rápida y sencilla. Además, al no tener que poner la base de datos en un estado inseguro (Trustworthy ON), se garantiza la seguridad de la base de datos. Por último, al poder ejecutar ensamblados en paralelo, se consigue una gran velocidad en la copia de datos.
En definitiva, Insert Bulk Bestia no es solo una herramienta de copia; es una solución integral diseñada para eliminar la complejidad de las migraciones de bases de datos. Al combinar una interfaz intuitiva con algoritmos de procesamiento por lotes (bulk), permitimos que equipos técnicos se enfoquen en lo importante, reduciendo errores humanos y tiempos de inactividad. Optimiza tu flujo de trabajo hoy mismo con la tecnología de carga más rápida del mercado.
| Característica | Scripts SQL Manuales | Insert Bulk Bestia |
|---|---|---|
| Tiempo de Preparación | Alto (Escribir y depurar código) | Mínimo (Configuración visual) |
| Riesgo de Error | Alto (Sintaxis o tipos de datos) | Bajo (Validación previa) |
| Velocidad de Carga | Limitada (Fila por fila) | Máxima (Bulk Copy Optimizado) |
| Manejo de Errores | Manual y tedioso | Automático con logs detallados |
| Soporte Multi-motor | Difícil (Requiere cambios de sintaxis) | Nativo (SQL Server, MySQL, Oracle, etc.) |
| Bloqueo de Tablas | Común sin gestión experta | Optimizado por lotes controlados |