SWick

A table tennis power machine

Entries from April 2009.

PC Support
13th April 2009

Auf Lifehacker war kürzlich eine nette Umfrage, wer Familie und Freunden bei PC Problemen hilft und ob er dafür auch Geld verlangt.

Falls man Geld verlangt, gibt es eine nette Liste, an der man sich orientieren kann:

 10 € - Du hast ein Computerproblem und ich soll es lösen.
 20 € - Du hast ein Computerproblem und ich soll es Dir erklären.
 30 € - Du hast ein Computerproblem und möchtest bei der Lösung zusehen.
200 € - Du hast ein Computerproblem und hast schon selber versucht es zu lösen.
No tags
Automatisches Backup von gespiegelten MS-SQL 2005 Datenbanken
15th April 2009

Problem

In einem MS-SQL 2005 Mirroring Setup können Datenbanken auf dem MIRROR nicht angesprochen werden und somit kann ein Backup nur auf dem PRINCIPAL stattfinden. Ein Job im SQL-Server-Agent würde bei einem Failover nicht mehr funktionieren.

Lösung A

If Exists (Select * from sys.database_mirroring where database_id=yourdbid and mirroring_role=1)
Backup database dbname to disk='Path\filename.bak' With INIT

Lösung B

Macht ein Backup aller Datenbanken außer den Systemdatenbanken und Datenbanken, die nicht angesprochen werden können.

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')
    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 = datename(dw, getdate()) + ' - ' + 
                       replace(replace(@DBName,':','_'),'\','_')

    exec ('BACKUP DATABASE [' + @DBName + '] TO  DISK = N''c:\db backup\' + 
        @DBFileName + ''' WITH NOFORMAT, INIT,  NAME = N''' + 
        @DBName + '-Full Database Backup'', SKIP, NOREWIND, NOUNLOAD,  STATS = 100')

    FETCH NEXT FROM DATABASES_CURSOR INTO @DBName
END

CLOSE DATABASES_CURSOR
DEALLOCATE DATABASES_CURSOR

Hier macht es vor allem die Funktion has_dbaccess möglich, dass der Job auch auf dem MIRROR laufen kann und das Backup nach einem Failover weiter funktioniert.

Tags: backup, db, mssql, tsql.

RSS Feed

"People said I should accept the world. Bullshit! I don't accept the world." -- Stallman