Cómo sincronizar el contenido de dos bases de datos SQLServer
¿Cómo sincronizar el contenido de dos bases de datos SQLServer? El código del programa puede tener CVS de administración de versiones para la administración de sincronización, pero la sincronización de la base de datos es muy problemática. Solo puede cambiar una antes de cambiar la otra. Si olvida cambiar la otra, la estructura o el contenido de las dos bases de datos a menudo serán inconsistentes. ¿Cuál es la mejor manera?
A. Distribución y Replicación
Utilice suscripciones forzadas para sincronizar las operaciones de la base de datos. Se pueden procesar grandes cantidades y lotes de datos utilizando el mecanismo de sincronización de la base de datos:
//
Descripción:
Para facilitar la operación, todas las operaciones se realizan en el servidor de publicación (servidor de distribución) y usar el modo push
Usar suscripción forzada en la máquina cliente. zlp
Sistema operativo: servidor windows 2000
Versión de la base de datos: versión personal del servidor sql 2000
2: Crear una cuenta de usuario
Activado el servidor Cree una cuenta de usuario de dominio en el cliente
Administración de Mi Computadora->Usuarios y grupos locales->.Usuarios->Crear
nombre de usuario:zlp
userpwd:zlp
3: Reiniciar el servidor mssqlserver
Mi PC->Panel de control->Herramientas administrativas->Servicios->Servicio mssqlserver
(Cambiado a : Cuenta de usuario de dominio, nuestro usuario zlp recién creado.
\zlp, contraseña: zlp)
4: Instalar el servidor de distribución
a: Configurar el servidor de distribución
Herramientas->Copiar->Configurar servidores de publicación y suscripción y Distribuir->Siguiente->Siguiente (todos usan la configuración predeterminada)
b: Configurar el servidor de publicación
Herramientas->Copiar->Crear y administrar publicaciones->Seleccionar para publicar la base de datos (tamaño )->Siguiente paso->Publicación de instantáneas->Siguiente paso->Seleccionar el contenido a publicar->Siguiente paso->Siguiente paso->Completar
c: Forzar configuración del suscriptor (modo push) el modo pull es el mismo)
Herramientas->Replicación->Configurar publicaciones, suscriptores y distribución->Suscriptores->Nuevo->base de datos del servidor SQL->Ingrese el nombre del servidor cliente (zlp)->Usar sql autenticación del servidor (sa, contraseña vacía)->. Aceptar->Aplicar->Aceptar
d: Inicializar suscripción
Monitor de replicación->Servidor de publicación (zehuadb)->Haga doble clic. Suscripción->Forzar nuevo->Siguiente->Seleccione un suscriptor habilitado->zlp->Siguiente->Siguiente->Siguiente->Siguiente->Siguiente->Finalizar
5: ¿La configuración de prueba es exitosa?
Copiar monitor->¿Publicar? ¿traer? zehuadb)->Haga doble clic en sz:sz->Haga clic en Estado->Haga clic en Ejecutar agente ahora
Ver:
Copiar Monitor->Publicar servidor (zehuadb)->sz:sz - >Seleccione zlp: sz (tipo requerido) -> Botón derecho del mouse -> Iniciar procesamiento de sincronización
Si no hay ninguna marca de error (cruz roja), felicidades por la configuración exitosa
6 : Datos de prueba
Ejecutar en el servidor:
Seleccione una tabla y ejecute el siguiente sql: insertar en wq_newsgroup_s seleccione 'Prueba exitosa',5
Copiar Monitor ->Publicar servidor (zehuadb) ->sz:sz->instantánea->iniciar agente->zlp:sz (obligatorio)->iniciar procesamiento de sincronización
Vaya a wq_newsgroup_s sincronizados para ver si se insertan nuevos registros
La prueba se completa y se supera.
7: Modifique el tiempo de sincronización de la base de datos, generalmente elija realizar la sincronización de la base de datos por la noche
(se omite la operación específica): d
/* p>
Nota:
El servidor no puede publicar ni distribuir datos (localmente). Debe eliminar el registro y luego cambiar el nombre recién registrado por el nombre de la computadora local.
Desinstalar: Herramientas: Herramientas Desinstalar: Herramienta: wq_newsgroup_s, el nombre de la computadora local es la computadora local y luego realizar un nuevo registro
Verifique si los nuevos registros de wq_newsgroup_s se insertan sincrónicamente.
Desinstalar: Herramientas->Copiar->Desactivar publicación->Es para publicar estáticamente "zehuadb" y desinstalar todos los servidores de configuración de sincronización de bases de datos
Nota: en el servidor de publicación y en el servidor de distribución Se debe iniciar el servicio sqlserveragent
Utilice el modo push: "d:\microsoft sql server\mssql\repldata\unc "Los archivos en el directorio se pueden configurar sin *** compartir
Modo pull: ¡Necesitas ***disfrutar~!
*/
El uso de activadores puede lograr una pequeña sincronización de la base de datos y solo se puede sincronizar una tabla.
3. Posibles problemas durante el proceso de configuración
Antes de configurar y utilizar la replicación de bases de datos en SQL Server 2000, primero debe verificar los siguientes aspectos de los servidores SQL Server relevantes. puntos cumplidos:
1. Si los servicios mssqlserver y sqlserveragent son usuarios de dominio. Los servicios mssqlserver y sqlserveragent se inician y ejecutan como usuarios de dominio (también se pueden usar usuarios .\administrator)
<. p> Si inicia sesión utilizando la cuenta del sistema local, no tiene capacidades de red y generará el siguiente error:El proceso no pudo conectarse al distribuidor '@nombre del servidor'
(Si su servidor ya ha utilizado el servicio de búsqueda de texto completo de SQL Server, no modifique el inicio local de los servicios mssqlserver y sqlserveragent.
(Si su servidor ya ha utilizado el servicio de búsqueda de texto completo, no modifique el inicio local de los servicios mssqlserver y sqlserveragent. Cambie otra máquina como servidor de distribución para la replicación de SQL Server 2000.
Cambiar el usuario de inicio de sesión al iniciar. El servicio requiere reiniciar los servicios mssqlserver y sqlserveragent para que surta efecto.
2. Compruebe si se han cambiado los nombres de varios servidores SQL relacionados (srvid=0 en la máquina local, srvname y datasource deben ser cambiados). lo mismo)
Ejecutar en el analizador de consultas:
usar master
p>seleccionar srvid,srvname, datasource de sysservers
Si no hay srvid=0 o srvid=0 (es decir, srvid=0 o srvname=0 en la máquina local), pero sí srvname
Debe reiniciar los servicios mssqlserver y sqlserveragent (esta máquina ), pero el nombre de servicio y la fuente de datos son diferentes, debe cambiarlos de acuerdo con los siguientes pasos:
Usar master
ir
-- Establecer dos variables
Declare @serverproperty_servername varchar(100),
@servername varchar(100)
- Obtenga información del servidor Windows NT y de la instancia asociada con el SQL Server especificado instancia. Información de instancia
select @serverproperty_servername = convert(varchar(100), serverproperty('servername'))
: devuelve el nombre del servidor local que ejecuta Microsoft SQL Server.
Nombre del servidor
seleccione @servername = convert(varchar(100), @@servername)
- Muestra los dos parámetros recuperados
seleccione @serverproperty_servername,@ servername
-- Si @serverproperty_servername es diferente de @servername (porque cambiaste el nombre de la computadora), ejecuta el siguiente comando nuevamente
-- Elimina el nombre de servidor incorrecto
exec sp_dropserver @server= @servername
-- Agregue el nombre de servidor correcto
exec sp_addserver @server=@serverproperty_servername, @local='local'
Cambiar este parámetro requiere reiniciar los servicios mssqlserver y sqlserveragent para que surtan efecto.
De esta manera los errores 18482 y 18483 no ocurrirán durante la creación de la replicación.
3. Compruebe si los nombres de registro del servidor SQL relacionados en el administrador empresarial del servidor SQL son consistentes con el nombre srv introducido en el segundo punto anterior.
El nombre de registro de la dirección IP no puede ser usado.
(Podemos eliminar el registro de la dirección IP, crear un nuevo nombre de servidor y registrarnos como usuario de nivel administrador del servidor SQL)
De esta manera, podemos 14010, 20084, 18456 , 18482 y 18483 ya no aparecerán.
4. Compruebe si se puede acceder normalmente a la red de varios servidores SQL relacionados.
Si puede hacer ping a la dirección IP del host pero no puede hacer ping al nombre del host, debe
winnt\system32\drivers\etc\hosts (win2000)
windows\system32\drivers\etc\hosts (win2000)
windows\system32\drivers \ La relación correspondiente entre la dirección IP y el nombre de host del servidor de la base de datos debe escribirse en el archivo etc\hosts (win2003)
.
Por ejemplo:
127.0.0.1 localhost
192.168.0.35 oracledb oracledb
192.168.0.65 fengyu02 fengyu02
202.84.10.193 bj_db bj_db
O cree un alias en la utilidad de red del cliente del servidor SQL, por ejemplo:
5. Si existen los procedimientos almacenados extendidos requeridos por el sistema (si no, es necesario restaurarlo):
sp_addextendedproc 'xp_regenumvalues',@dllname ='xpstar.dll'
go
sp_addextendedproc 'xp_regdeletevalue',@dllname ='xpstar .dll'
ir
sp_addextendedproc ' xp_regdeletekey',@dllname ='xpstar.dll'
ir
sp_addextendedproc xp_cmdshell ,@ dllname ='xplog70.dll'
El siguiente paso es configurar la replicación de la base de datos usando el servidor SQL Enterprise Manager [Replicación] -> Haga clic derecho y seleccione -> [Configurar editores, suscriptores y distribución ] GUI.
Los pasos para configurar la replicación se enumeran a continuación:
1. Configure el servidor de publicación y distribución
[Bienvenido al Asistente para configurar publicación y distribución]- > [Seleccione el servidor de distribución]-> [Haga que "@servername" sea su propio servidor de distribución, y el servidor SQL creará la base de datos de distribución y registrará. )
->[Crear carpeta de instantáneas] ->[Configuración personalizada] ->[No, use la siguiente configuración predeterminada] ->[Completar]
Después de completar los pasos anteriores, Se creará un repositorio de distribución en la base de datos del servidor SQL "@servername" actual y se creará un usuario de nivel administrador distribuidor_admin (podemos cambiar la contraseña a voluntad).
Se han agregado cuatro nuevos trabajos al servidor:
[Borrado del historial del agente: Distribución]
[Borrado de distribución: Distribución]
[Repetir verificación de proxy]
[Reinicializar las suscripciones que fallaron en la validación de datos]
Se agregó un nuevo trabajo a Server Enterprise Manager. A través de monitores de replicación adicionales en Server Enterprise Manager, la máquina actual puede publicar, distribuir y suscribirse.
Ingresamos nuevamente al servidor sql Enterprise Manager [Copiar] ->clic derecho y seleccionamos ->[Configurar Publicación, Suscriptor y Distribución]
Podemos ir a [Publicación y Distribución] Encuentre esta información en la ventana Propiedades del servidor] ->[Propiedades del servidor de publicación y distribución] ->[Propiedades del servidor de publicación] ->[Propiedades del servidor de publicación] ->[Propiedades del servidor de publicación] -> [Agregar] -; > [Aceptar] -> [Publicar base de datos] -> [Transacción]/[Fusionar] -> [Aceptar] -> [Suscriptor] -> [Agregar] -> [Aceptar]
Agregar otro servidor SQL servidores de la red como servidores de publicación o de suscripción.
Opciones para agregar un nuevo editor:
Utilicé la prueba de usuario de la base de datos de nivel de administrador para conectarme al editor jin001 recién creado.
La opción de ingresar una contraseña para el enlace administrativo del editor está seleccionada de forma predeterminada.
Cree y publique un editor en el servidor de editor jin001 recién creado fengyu/fengyu. En el servidor de editor jin001 recién creado, debe ingresar la contraseña del usuario distribuidor_admin. Puede desmarcar la casilla de contraseña para los enlaces de administrador a los servidores de distribución, lo que significa que no necesita una contraseña para establecer un enlace al servidor de distribución (por supuesto, esto es inseguro y puede usarse en un entorno de prueba).
2. Seleccione el servidor de distribución en otro servidor de publicación (por ejemplo, jin001) en la red recién creada
[Bienvenido al Asistente de configuración de publicación y distribución] -> [Seleccione el servidor de distribución]
-> Utilice los siguientes servidores (el servidor seleccionado debe haber sido configurado como servidor de distribución) -> [Servidor seleccionado] (por ejemplo, fengyu/fengyu/fengyu) -> [Servidor seleccionado ] (por ejemplo, fengyu/ fengyu/fengyu/fengyu/fengyu) fengyu/fengyu)
-> [Siguiente] -> [Ingrese la contraseña del usuario distribuidor_admin del servidor de distribución (por ejemplo, fengyu /fengyu) dos veces]
-> [Siguiente] -> [Personalizar configuración] -> [No, use la siguiente configuración predeterminada]
-> [Siguiente] -> [Finalizar ] -> [Aceptar]
Proceso de creación de una publicación de base de datos replicada:
[Replicación] -> [Contenido de publicación] -> Haga clic derecho y seleccione -> [Nueva publicación]
-> [Siguiente] -> [Seleccionar base de datos de publicación] -> [Seleccionar una base de datos para publicar]
->[Siguiente] -> [Seleccionar tipo de publicación] - > [Publicación transaccional]/[Publicación fusionada] p>
-> [Siguiente] -> [Especifique el tipo de servidor al que suscribirse] -> [Ejecutando un servidor SQL Server 2000]
->[Siguiente] -> [Especificar el elemento] -> [En la publicación transaccional solo se pueden publicar tablas con claves primarias] -> [Marque una tabla a publicar que tenga una clave primaria]
-> [En la publicación combinada, se agregan índices únicos a la tabla y un campo de identificador único para el atributo rowguidcol [rowguid], que por defecto es newid()]
(Agregar una nueva columna provocará la inserción declaración falle sin mostrar la nueva columna): provoca que la declaración de inserción esté en Falla sin una lista de columnas, aumenta el tamaño de la tabla y aumenta el tiempo necesario para generar la primera instantánea)
-> [Seleccione una tabla para publicar]
-> [Siguiente] ->[Elija un nombre de publicación y una descripción] ->
-> [Siguiente] -> [Personalizar propiedades de publicación ] -> [No, cree la publicación como se especifica]
-> [Siguiente] -> [Finalizar] -> [Cerrar]
Hay muchas opciones útiles en las propiedades de la publicación : establece el tiempo de vencimiento de la suscripción (por ejemplo, 24 horas)
Configurar las propiedades de la publicación es una opción muy útil.
Establecer propiedades del proyecto para publicar tablas:
La ventana General le permite especificar un nombre para la tabla con fines de publicación, que puede ser diferente del nombre de la tabla original.
La siguiente figura muestra las columnas de la ventana de comandos y la ventana de instantáneas
(La tecnología de replicación de bases de datos de SQL Server en realidad utiliza operaciones de inserción, actualización y eliminación en el suscriptor para rehacer la transacción del editor operaciones
Al observar la documentación, debe configurar la base de datos de publicación en modo de recuperación completa para que las transacciones no se pierdan
Por ejemplo, para seleccionar solo algunos de los registros de la tabla que cumplan con los criterios, podemos escribir manualmente declaraciones SQL de filtrado:
La opción de suscripción de la tabla de publicación puede crear una suscripción obligatoria:
Después de que la publicación se haya creado correctamente, se creará una nueva tarea. se agregarán en el servidor de publicación: [Suscripciones ya vencidas borradas]
Se agregaron dos nuevas tareas en el editor:
[ jin001-dack-dack-5 ] escriba [ instantánea de respuesta ]
[ jin001-dack-3 ] tipo [ lector de registro de respuesta ]
El nombre en la parte azul de arriba se numerará de manera diferente según el nombre del editor, el nombre de la publicación y la primera publicación.
El trabajo de instantánea de respuesta es un requisito previo para la replicación del servidor SQL. Primero publicará la estructura de la tabla, los datos, los índices, las restricciones, etc. en el archivo del directorio del sistema operativo del editor
(cuando. hay una suscripción que generarse, cuando el lector de registros reppl en la replicación transaccional siempre se ejecuta cuando se inicializa o genera una solicitud de suscripción según un cronograma)
(Se puede ejecutar según un cronograma programado durante la replicación combinada)
Procedimiento para configurar una suscripción de replicación de base de datos:
[Replicación] -> [Suscripciones] -> Haga clic derecho y seleccione -> [Nueva solicitud de suscripción]
-> [Siguiente] -> [Buscar versiones] -> [Ver versiones realizadas por servidores registrados]
-> [Buscar versiones] -> [Ver versiones realizadas por servidores registrados] -> [Ver versiones realizadas por servidores registrados] ->[Ver la versión publicada por el servidor registrado] -> [Ver la versión publicada por el servidor registrado]
-> [Siguiente paso] -> [Seleccionar publicación] -> [Verificar el nombre de la base de datos publicada en el servidor de publicación establecido]
-> [Siguiente paso] -> [Especificar inicio de sesión del agente de sincronización] -> [Cuando el agente se conecta Al ir al servidor proxy: use la autenticación del servidor SQL]
(Ingrese el nombre de usuario y la contraseña de distribuidor_admin en el servidor de distribución)
-> [Siguiente paso] -> [Seleccione la base de datos de destino] - > [Seleccione el nombre de la base de datos en la que desea crear la suscripción] -> [Seleccione el nombre de la base de datos en la que desea crear la suscripción]/[También puede; cree un nuevo nombre para la biblioteca]
-> [Siguiente] -> [ Permitir suscripción anónima] -> [Sí, generar suscripción anónima]
-> [Siguiente] -> [Inicializar suscripción] -> [Sí, inicializar esquema y datos]
-> ;[Siguiente] -> [Entrega de instantáneas] -> [Usar el archivo de instantáneas en la carpeta de instantáneas predeterminada para esta publicación]
(El suscriptor debería poder acceder a la carpeta repldata del editor. Si hay un problema, puede configurar manualmente ****disfrute de la red y ****permisos de disfrute)
-> [Siguiente] -> [Entrega de instantáneas] -> [Usar instantáneas de la carpeta de instantáneas predeterminada para este archivo de publicación]
-> [Siguiente] -> [Configurar el programador del agente de distribución] -> [Usar el siguiente programador] -> [Cambiar] -> [Por ejemplo, usar el siguiente programador g., por Programado una vez cada cinco minutos]
-> [Siguiente paso] -> [Iniciar el servicio solicitado] -> [Esta suscripción requiere que el servicio sqlserveragent se ejecute en el servidor de distribución]
-> [ Siguiente] -> [Completo] -> [Aceptar]
Después la suscripción se crea exitosamente, se agregará un nuevo trabajo con la categoría [repl-distribute] al suscriptor (la categoría para la replicación combinada es [repl-merge])
Ejecutará la replicación de sincronización de la base de datos Trabajo según el horario que le damos.
3. Situaciones anormales que pueden aparecer en el registro del experimento después de que el servidor SQL copia la configuración:
1. Cuando el servidor de distribución se desconecta, el servicio del servidor SQL se cierra y se reinicia. o cerrar, la replicación que se ha configurado no tendrá mucho impacto
Durante la interrupción, la distribución y la suscripción no pueden recibir mensajes de transacciones replicadas
p>2. el servidor se desconecta, el servicio del servidor SQL Al apagar, reiniciar o apagar, habrá algún impacto en la replicación que se ha configurado
Durante la interrupción, la cola de transacciones en el distribuidor aumentará p>
(si está configurado para un período de tiempo más largo La opción para eliminar suscripciones caducadas dentro
El suscriptor lo volverá a intentar repetidamente porque no puede acceder al editor
Podemos configurar el número de reintentos y el intervalo de reintento (el número máximo de reintentos es 9999, si lo reintenta una vez cada minuto, puede soportar aproximadamente 6,9 días sin errores)
Después de que el servicio del servidor SQL en el servidor de publicación esté iniciado y la red está conectada, los trabajos apilados en el servidor de publicación se aplicarán en orden cronológico a la máquina suscriptora. El trabajo se aplicará a la máquina suscriptora en orden cronológico:
Tomará mucho tiempo. tiempo (todas las declaraciones de inserción, actualización y eliminación de transacciones realmente generadas se ejecutan en el servidor de suscripción)
Experimentamos con 58 transacciones y 100,228 comandos en una PC normal, y la ejecución tomó 7 minutos y 28 segundos.
3. El suscriptor se desconectó y el servicio del servidor SQL se cerró, reinició y apagó. El impacto de la replicación es relativamente grande y es posible que sea necesario volver a probarlo.
Nuestro entorno experimental. (suscriptor) se cerró inesperadamente a las 18:46 y se reinició a las 8:40 del día siguiente. La replicación establecida se reinició a las 8:40. Después de las 8:40 a. m., la replicación comenzó a ejecutarse normalmente y los trabajos apilados en el editor se aplicaron. las máquinas del suscriptor en orden cronológico, pero el administrador de replicación mostró un mensaje de error sobre la instantánea, que puede ser necesario reiniciar la instantánea y es posible que sea necesario reiniciar la replicación (la máquina en nuestro entorno experimental no tomó una instantánea durante la primera). prueba y la replicación aún se ejecutó correctamente)
4. Puede eliminar las publicaciones y suscripciones creadas directamente. Quitar el botón Eliminar
Siempre tendemos a eliminar la suscripción primero y luego eliminarla. la publicación y finalmente deshabilite el orden de publicación.
Si desea eliminar completamente la configuración de replicación en el servidor SQL, puede hacer esta Operación:
[Replicación] ->. Haga clic derecho y seleccione [Deshabilitar publicación] -> [Bienvenido al Asistente para deshabilitar publicación y distribución]
-> [Siguiente] -> [Deshabilitar publicación] -> [Para deshabilitar la publicación del "@ nombredelservidor"]
-> [Siguiente] -> [Terminar de deshabilitar el asistente de Publicación y Distribución] ->[Completar]
También podemos usar el comando t-sql para completar la creación y eliminación de publicaciones y suscripciones en replicación seleccionando las publicaciones y suscripciones que se han configurado y luego haciendo clic en Propiedades y haciendo clic derecho en ellas para [Generar secuencia de comandos SQL]. (No entraré en detalles aquí, los sitios web recomendados tendrán más detalles más adelante)
Cuando intentas eliminar o cambiar una tabla, aparecerá el siguiente error
servidor: msg 3724, nivel 16, estado 2, línea 1
No se puede eliminar la tabla 'nombre_objeto' porque se está utilizando para la replicación.
Lo más habitual es que la tabla se utilizara para la replicación, pero la replicación se eliminó posteriormente.
Método de procesamiento:
seleccionar * de sysobjects donde replinfo >'0'
sp_configure 'permitir actualizaciones', 1
ir
Reconfigurar usando override
ir
comenzar transacción
actualizar sysobjects establecer replinfo = '0' donde replinfo >0' p >
Confirmar transacción
ir
Revertir transacción
ir
sp_configure 'permitir actualizaciones', 0
ir
Reconfigurar usando anulaciones
ir