Mostrando entradas con la etiqueta MSSQL. Mostrar todas las entradas
Mostrando entradas con la etiqueta MSSQL. Mostrar todas las entradas

domingo, 4 de febrero de 2018

Cómo volcar una BD SQL Server desde el RDS de AWS a un entorno on-premise (II)

Hola a todos!
En un primer post os estuve explicando cómo podéis hacer un export de una BD SQL Server en el RDS de AWS.

En este punto tenemos el backup del SQL en S3; para descargarlo necesitamos acceder a S3 y hacer que el archivo esté disponible desde internet. Para hacerlo, accede al panel de AWS y ve a S3; dentro del bucket tenemos el backup, con el mismo nombre que le has dado al hacer el export. Entra en este archivo y en la pestaña Overview hay un botón para hacerlo público:


También tienes el link externo del archivo. Cópialo y vamos al servidor donde vamos a importar esa base de datos

Recuerda borrar lo que vaya quedando en el bucket para que no se generen gastos no necesarios

Ahora tenemos que descargar e importar la base de datos en el entorno de on-premise. Vamos por partes:

1. Conéctate al servidor desde el que vas a lanzar la restauración, para descargar el backup en local.

2. Descarga el .BAK que hemos generado desde S3. Si ves que no te funciona el enlace por algún motivo, piensa que puedes entrar desde el servidor a la consola de AWS y descargarlo directamente. Ten localizada la descarga; yo la suelo mover a la raiz del disco en el que esté para tenerla controlada.

3. Abre el MS SQL y conecta al motor del SQL

4.Vamos a eliminar la BD. Recuerda avisar a quien sea necesario. Para eliminarla, ponla en modo offline primero para confirmar que no hay ninguna conexión abierta y de errores. Si lo haces con una query será algo así

ALTER DATABASE [database_name] SET OFFLINE WITH ROLLBACK IMMEDIATE
GO

Los corchetes “[“ y “]” no los quites, son parte de la query. Una vez la BD esté offline, podrás eliminarla sin problema.

5. Ahora ya podemos restaurar la BD. Lo vamos a hacer con esta otra query; modifica los campos que sean necesarios

RESTORE DATABASE [database_name] FROM DISK = 'c:\AAAAMMDD_backup.bak'
WITH MOVE 'database_mdf_name' TO 'C:\Program Files\Microsoft SQL
Server\MSSQL11.DEVW2012\MSSQL\DATA
\database_mdf_name.mdf',
MOVE 'database_log_name' TO 'C:\Program Files\Microsoft SQL
Server\MSSQL11.DEVW2012\MSSQL\DATA
\database_mdf_name.ldf
RECOVERY, REPLACE, STATS = 10;

6. Una vez acabe (puede tardar unos 5 o 10 minutos, dependiendo del tamaño), hay que habilitar el acceso a esta base de datos nueva. En Seguridad → Inicios de Sesion, busca el usuario que se utilizaba antes y vete a propiedades


Cuando se abra la ventana de propiedades, vete a Asignación de usuarios en el menú arriba a la izquierda

y selecciona la nueva base de datos en “Usuarios asignados a este inicio de sesión":


Una vez estén asignados, acepta y el backup estará restaurado del todo.

miércoles, 24 de enero de 2018

Cómo volcar una BD SQL Server desde el RDS de AWS a un entorno on-premise (I)

Hola! Hoy os traigo un tutorial algo más elaborado, y el primero (creo) en el que trabajo con AWS. Espero que no sea el único!

Para exportar una BD SQL Server desde AWS a un entorno on-premise, vamos a hacer un export a S3 y desde allí lo descargamos e importamos desde el entorno on premise.

En esta primera parte del tutorial vamos a hacer el export, y en una segunda parte, la importación en destino

Lo que primero vamos a necesitas será un usuario con permisos suficientes para poder exportar el backup y volcarlo en un bucket de S3; después necesitas tener ese bucket. Y por último, tener la opción SQLSERVER_BACKUP_RESTORE añadida a un grupo de opciones en tu instancia RDS.


Si ya tienes un usuario IAM puedes crear y asignarle la política específica para hacer exports/restores RDS o puedes crear un rol y asignarlo. En cualquier caso, la política que tienes que crear debería ser una de las tres definidas aquí.

Para hacer el export del SQLServer nos conectamos a la consola y ejecutamos este comando

exec msdb.dbo.rds_backup_database 
        @source_db_name='database_name',
        @s3_arn_to_backup_to='arn:aws:s3:::bucket_name/file_name_and_extension',
        @kms_master_key_arn='arn:aws:kms:region:account-id:key/key-id',
        @overwrite_S3_backup_file=1,
        @type='differential/FULL';

donde
  • @source_db_name hace referencia a la BD que vas a exportar
  • @s3_arn_to_backup_to hace referncia al bucket donde vas a exportar y al nombre del fichero con que se va a guardar
  • @kms_master_key_arn hace referencia a la encriptación del fichero, y es OPCIONAL
  • @overwrite_S3_backup_file hace referencia a si quieres sobreescribir el fichero en caso de que exista; 1 equivale a Sí y 0 a No. Es OPCIONAL, y por defecto es "1"
  • @type hace referencia al tipo de backup, si es diferencial o completo. Esta opción también es OPCIONAL y por defecto equivale a FULL. Para el backup diferencial se toma como punto de referencia el último backup FULL que se ha hecho. Se puede consultar cuándo se ha hecho con esta query:
select top 1 
database_name
,  backup_start_date
,  backup_finish_date 
from    msdb.dbo.backupset 
where   database_name='database_name'
and     type = 'D' 
order by backup_start_date desc;

Este export no es instantáneo y va a depender sobre todo del tamaño de la BD; para ver su evolución, lo hacemos con esta query:

exec msdb.dbo.rds_task_status @db_name='database_name';
 
Si quisiéramos restaurar la base de datos, la query sería


exec msdb.dbo.rds_restore_database
@restore_db_name=’database_name';
@s3_arn_to_restore_from='arn:aws:s3:::bucket_name/file_name_and_extension';


Bien, y hasta aquí la parte de AWS; en el siguiente post os explico cómo lo hago yo para importar el export en un SQL Server.



Gracias!

miércoles, 31 de agosto de 2011

MSSQL: Error al importar

Hoy he tenido que importar una BBDD MSSQL 2000 en MSSQL 2008. Y me daba una pequeña crujida:

El conjunto de copia de seguridad contiene una copia de una base de datos distinta de la existente
(The Backup set holds a backup of a database other than existing database)

y luego un montón de códigos raros a los MS es tan aficionado del tipo:

Microsoft.SqlServer.SmoExtended
System.Data.SqlClient.SqlError

El caso es que googleando he visto que lo único que tenía que hacer mientras importaba la BBDD era activar la opción WITH_REPLACE en las Opciones. Y ya está, la BBDD se ha importado correctamente ;)


Puedes consultar la fuente directamente aquí.

jueves, 19 de agosto de 2010

Moviendo archivos de MS SQL Server

Hoy me he encontrado con que, debido al crecimiento de una base de datos, tenía que mover los archivos (el .mdf -datos- y el .ldf -log-) a otro disco. Hasta ahora (con SQLs más antiguos), paraba la base de datos, editaba las propiedades, movía los archivos y levantaba el SQL. Y todo bien, oiga. Era consciente de que había una manera "más elegante" de hacerlo, pero como eso me iba bien, para qué iba a molestarme...

El caso es que hoy he tenido que mover los archivos correspondientes a un MS SQL Server 2005 Express, y no he podido hacerlo con mi fórmula de siempre. Así que me he buscado un poco la vida... y ningún problema.

Esto es lo que he hecho (desde la misma consola del SQL)
[ bbdd es la base de datos que quería mover, C:\xxx la localización inicial y D:\xxx la final ]

Primero desconecto la base de datos...

use master
go
sp_detach_db 'bbdd'
go

Ejecuto. Todo bien, me devuelve un mensaje según el cual se ha hecho bien. Después lo que hago es mover los archivos .mdf y .ldf a su nueva ubicación. Una vez estén copiados, simplemente vuelvo a conectar la base de datos pero diciéndole qué archivos utilizar. Lo hago así:

use master
go
sp_attach_db 'mydb','C:\xxx\bbdd.mdf','D:\xxx\bbdd.ldf'
go

Ejecuto. La base de datos vuelve a estar online y disponible, y con muuuuucho espacio para crecer. Como último, si quiero comprobar que estos son los valores correctos y no los anteriores, hago una consulta de estado para la base de datos; lo hago ejecutando:

use bbdd
go
sp_helpfile
go

Como respuesta, la última consulta me devuelve cuáles son los archivos de datos y de log de la tabla consultada, y, en efecto, están apuntando a la nueva localización. La verdad es que es fácil y rápido, efectivo, y bastante elegante. No se puede pedir más.

Ah, bueno, y las versiones. Por lo que he visto, sirve para cualquier MS SQL Server, pero podréis encontrar más información en la página oficial de MS:
http://support.microsoft.com/kb/224071


Ale, que vaya bien!

martes, 16 de febrero de 2010

Error al restaurar una base de datos MSSQL 2005

Si al restaurar una base de datos en MSSQL Management 2005 nos devuelve el siguiente error

System.Data.SqlClient.SqlError: El conjunto de copia de seguridad contiene una copia de base de datos distinta de la existente (Microsoft.SqlServer.Smo)

lo podemos solucionar fácilmente si sobreescribimos, aunque la base de datos de destino la acabemos de crear.

Hacemos click en el botón derecho sobre el panel de la izquiera, en la base de datos que queremos restaurar, y seleccionamos Tareas --> Restaurar --> Base de datos
Si tenemos el backup, seleccionaremos "Origen de la restauración --> Desde dispositivo" y buscaremos el backup en el disco duro. Cuando lo tengamos, nos saldrá debajo, y deberemos marcar el checkbox que corresponda al campo Restaurar.

En la parte de la izquierda veremos un campo que se llama "Seleccionar una página" y ahí seleccionamos "Opciones".
En "Opciones de restauración" debemos marcar la opción

"Sobreescribir la base de datos existente"

y ya podemos restaurar la base de datos sin ningún problema!