Softcanon Softcannon Games

Comunicación y Marketing Digital

ATENCION:
Este sitio web esta desactualizado y no es el actual vigente. Esta al aire solo para referencia y consulta del contenido. Por favor dirijase a www.softcanon.com para consultar el sitio actual.

Con el siguiente script es facil programar un backup de todas las bases de datos, de una instancia de MS Sql Server.

Primero hay que tener en cuenta cuales son los metodos de recuperación con que esta configurada cada base de datos, ya que de esto depente el tamaño del backup y si se hace backup del registro de transacciones (log).

Modos de Recuperación de SQL Server (Modos de Registro o Recovery Model)

Ahora que ya entendemos qué es una Operación de Registro Mínimo en SQL Server y sabemos qué operaciones y en que escenarios son consideradas Operaciones de Registro Mínimo, estamos en situación de explicar las diferentes alternativas del Modo de Recuperación de SQL Server (también conocido como Modelo de Recuperación o Modo de Registro), y su impacto en las estrategias de Copia de Seguridad y Restauración (Plan de Contingencias - Backup y Restore), así como de crecimiento de LOG.

  • Modo de Recuperación Simple o Sencillo (Simple Recovery Model).
    • Las Operaciones de Registro Mínimo realizarán un registro mínimo en el LOG de SQL Server, minimizando las escrituras en LOG y maximizando el Rendimiento de SQL Server.
    • Todas las transacciones serán registradas en LOG, sin embargo, una vez que la transacción finaliza, el espacio de LOG utilizado por dicha transacción podrá ser reutilizado para el registro de otras transacciones. No es necesario realizar copias de seguridad del LOG para poder reutilizar su espacio.
    • Sólo se permiten Copias de Seguridad Completas o Diferenciales. No se puede recuperar (RESTORE) a un momento en el tiempo (STOPAT).


  • Modo de Recuperación Completo (Full Recovery Model).
    • Las Operaciones de Registro Mínimo no se comportarán como tal, realizándose siempre un registro completo en el LOG de SQL Server.
    • Todas las transacciones serán registradas en LOG. Sólo la ejecución de una sentencia BACKUP LOG permitirá reutilizar el espacio de LOG ocupado por transacciones antiguas almacenadas en el Backup del LOG. Es decir, hasta que una transacción del LOG de SQL Server no se guarda en un BACKUP, no se permite su eliminación del LOG, con la excepción de la sentencia BACKUP LOG WITH TRUNCATE_ONLY (o BACKUP LOG WITH NO_LOG), la cual permite vaciar el LOG sin realizar físicamente una copia de seguridad (ojo: sólo se debe usar en caso de emergencia). Si no se realizan copias de seguridad de LOG periódicamente, el LOG de SQL Server crecerá indefinidamente.
    • Se permite cualquier tipo de Copia de Seguridad (BACKUP): Completas, Diferenciales, de Fichero, de Grupo de Ficheros (FILEGROUP), y de LOG. Es posible recuperar (RESTORE) a un momento del tiempo (STOPAT).


  • Modo de Recuperación de Registro Masivo (Bulk-Logged Recovery Model). Este Modo de Recuperación sólo debe ser utilizado de forma intermitente o eventual para mejorar el rendimiento de las Operaciones de Registro Mínimo.
    • Las Operaciones de Registro Mínimo realizarán un registro mínimo en el LOG de SQL Server, minimizando las escrituras en LOG y maximizando el Rendimiento de SQL Server.
    • Todas las transacciones serán registradas en LOG. Sólo la ejecución de una sentencia BACKUP LOG permitirá reutilizar el espacio de LOG ocupado por transacciones antiguas almacenadas en el Backup del LOG. Es decir, hasta que una transacción del LOG de SQL Server no se guarda en un BACKUP, no se permite su eliminación del LOG, con la excepción de la sentencia BACKUP LOG WITH TRUNCATE_ONLY (o BACKUP LOG WITH NO_LOG), la cual permite vaciar el LOG sin realizar físicamente una copia de seguridad (sólo usar en caso de emergencia). Si no se realizan copias de seguridad de LOG periódicamente, el LOG de SQL Server crecerá indefinidamente.
      Debe tenerse en cuenta, que al realizar una copia del LOG (Backup LOG) durante un periodo de tiempo en el que han ocurrido Operaciones de Registro Mínimo, la copia del LOG almacenará tanto el contenido del LOG (o Transaction LOG), como el contenido de las páginas de datos afectadas (que se leerá de los correspondientes ficheros de datos). Es decir, tendremos un tamaño de LOG relativamente pequeño, pero sin embargo, la copia del LOG (Backup LOG) podría tener un tamaño considerablemente grande.
    • Se permite cualquier tipo de Copia de Seguridad (BACKUP): Completas, Diferenciales, de Fichero, de Grupo de Ficheros (FILEGROUP), y de LOG, pero no se puede recuperar (RESTORE) a un momento en el tiempo (STOPAT).


Una conocida estrategia de configuración de bases de datos SQL Server es mantener un Modo de Recuperación Completo (FULL) durante toda la jornada, y en periodos de carga masiva o de operaciones de mantenimiento, utilizar un Modo de Recuperación de Registro Masivo (Bulk Logged), con el objetivo de mejorar el rendimiento de Operaciones de Registro Mínimo (SELECT INTO, BULK INSERT, BCP.EXE, operaciones INDEX DDL como CREATE INDEX o DROP INDEX, etc.). La utilización de una estrategia mixta de Modo de Registro Completo y Registro Masivo (FULL y Bulk-Logged) probablemente requiera una actualización del Plan de Contingencias o Políticas de Backups y Restores de SQL Server.

También debe tenerse en cuenta, que determinadas configuraciones requieren del Modo de Recuperación Completo para su funcionamiento. Por ejemplo, si deseamos implementar Database Mirroring (disponible de SQL Server 2005), será necesario utilizar el Modo de Recuperación Completo.

T-SCRIPT

DECLARE @path VARCHAR(256) -- path for backup files
SET @path = 'C:\BACKUPS\'


DECLARE @DBName varchar(255)
DECLARE @DATABASES_Fetch int

DECLARE DATABASES_CURSOR CURSOR FOR
    select
        DATABASE_NAME   = db_name(s_mf.database_id)
    from
        sys.master_files s_mf
    where
       -- ONLINE
        s_mf.state = 0

       -- Only look at databases to which we have access
    and has_dbaccess(db_name(s_mf.database_id)) = 1

        -- Not master, tempdb or model
    and db_name(s_mf.database_id) not in ('
Master','tempdb','model','msdb')
    group by s_mf.database_id
    order by 1

OPEN DATABASES_CURSOR

FETCH NEXT FROM DATABASES_CURSOR INTO @DBName

WHILE @@FETCH_STATUS = 0
BEGIN
    declare @DBFileName varchar(256)    
    set @DBFileName = CAST(DATEPART(yyyy, getdate()) AS VARCHAR(4)) + '
-' + CAST(DATEPART(mm, getdate()) AS VARCHAR(2)) + '-' + CAST(DATEPART(dd, getdate()) AS VARCHAR(2)) + '-' +
                       replace(replace(@DBName,'
:','_'),'\','_') + '.bak'

    PRINT '
-- Making DATA Backup ' + @path + @DBFileName
    exec ('
BACKUP DATABASE [' + @DBName + '] TO  DISK = N''' + @path + @DBFileName + '''')

    -- check the recuperation mode, for no error if is simple

    IF(SELECT recovery_model_desc FROM sys.databases WHERE name = @DBName) != '
SIMPLE'
    BEGIN
    set @DBFileName = CAST(DATEPART(yyyy, getdate()) AS VARCHAR(4)) + '
-' + CAST(DATEPART(mm, getdate()) AS VARCHAR(2)) + '-' + CAST(DATEPART(dd, getdate()) AS VARCHAR(2)) + '-' +
                       replace(replace(@DBName,'
:','_'),'\','_') + '-LOG.bak'   
    
    PRINT '
-- Making LOG Backup ' + @path + @DBFileName    
    exec ('
BACKUP LOG [' + @DBName + '] TO  DISK = N''' + @path + @DBFileName + '''')

    END
    
    FETCH NEXT FROM DATABASES_CURSOR INTO @DBName
END

CLOSE DATABASES_CURSOR
DEALLOCATE DATABASES_CURSOR

Comparte: Share/Save/Bookmark

Una de las cosas que se extraña de estas nuevas versiones de los motores de base de datos de Microsoft Sql Server 2005 y 2008, es la utilidad de la barra de tareas, con la cual podiamos habilitar, suspender o deshabilitar los servicios de bases de datos.

Con este pequeña aplicación, tenemos de nuevo esta herramienta (haga click en la imagen para descargarla):

 

sm2005.gif

Para Windows Vista u otras noticias, visite el sitio web del autor: http://www.sqldbatips.com/showarticle.asp?ID=46

Comparte: Share/Save/Bookmark

¿Que es el archivo Global.asax?

El archivo Global.asax, también conocido como el archivo de aplicación de ASP.NET, es un archivo opcional que contiene código para responder a eventos del nivel de la aplicación y de la sesión provocados por ASP.NET o por módulos HTTP. El archivo Global.asax reside en el directorio raíz de una aplicación de ASP.NET. En tiempo de ejecución, Global.asax se analiza y se compila en una clase de .NET Framework generada dinámicamente que se deriva de la clase base HttpApplication. ASP.NET está configurado para que se rechace automáticamente cualquier solicitud directa de dirección URL del archivo Global.asax; los usuarios externos no pueden descargar ni ver el código que contiene.

El archivo Global.asax es opcional. Se crea únicamente si se desea controlar los eventos de aplicación o de sesión. (msdn.microsoft.com).


 

Los sitios web para ASP.NET, desde su versión 2.0 se pueden desarrollar de 2 formas:

1. Aplicación Web: Lo más parecido a una aplicación convencional donde usted debe primero de compilar el codigo para poderlo ejectuar.

2. Sitio Web: Los archivos no necesitan ser compilados, solo los hace y los pone en el servidor web, el cual internamente va creando una versión compilada conforme se va necesitando.

Se sale del tema de este artículo dar mas detalles, diferencias, pros y contras de cada forma de realizar los sitios web, podrá encontrar más información buscando por internet al respecto (Google).

Sin embargo mi apreciación y sugerencia es utilizar un intermedio, es decir desarrollar el proyecto del tipo "Sitio Web" y el codigo fuente que desee proteger o optimizar compilandolo, lo genere como una librería aparte (.dll), la cual incorpora luego al sitio web.  Esto con el fin de tener el beneficio principal de este tipo de proyecto, el cual consiste en que usted como programador o diseñador gráfico, puede actualizar una página del sitio web, mientras el sitio es visitado por cientos de personas, es decir en producción.

Para este tipo de proyecto (sitio web), el archivo de configuración glogal.asax, no tiene aparte el archivo de codigo fuente convencional (.cs o .vb), si no que al agregarlo lo genera como un archivo script.

Con el siguiente metodo podra tener nuevamente el codigo fuente aparte para el archivo global.asax:

1. Reemplaze todo el codigo del archivo global.asax con esta línea:

<%@ Application Inherits="Global" Language="C#" %>

2. Ahora cree un archivo de codigo fuente que se llame global.cs y guardelo en la carpeta App_Code, en este archivo puede colocar el codigo convencional, como ejemplo:

using System;

using System.Globalization;

using System.Web;

public class Global : System.Web.HttpApplication {

void Application_Start(object sender, EventArgs e) { // Código que se ejecuta al iniciarse la aplicación }

void Application_End(object sender, EventArgs e) { // Código que se ejecuta cuando se cierra la aplicación }

void Application_Error(object sender, EventArgs e) { // Código que se ejecuta al producirse un error no controlado }

void Session_Start(object sender, EventArgs e) { // Código que se ejecuta cuando se inicia una nueva sesión }

void Session_End(object sender, EventArgs e) { // Código que se ejecuta cuando finaliza una sesión.}

protected void Application_BeginRequest(Object sender, EventArgs e) { }

}

Si desea una lista completa de todos los métodos, visite este excelente artículo: Trabajando con el Global.asax

Comparte: Share/Save/Bookmark