Categories: SQL Server

Simple Step by Step Database Mirroring

  1. Set the recovery model of the database to the Full Recovery model if not already set. You can make this change in SQL Server Management Studio (SSMS) on the Options tab of the Database Properties dialog. You can also manually make the change with the following command :
    Alter Database [Adventureworks] Set Recovery Full;

  2. Set the compatibility level of your database to level 90 or higher. Level 90 is SQL Server 2005 compatibility, and level 100 is SQL Server 2008 compatibility. You can set the compatibility level of your database in SSMS on the Options tab of the Database Properties dialog, or you can manually make the change with T-SQL. You can use the following commands to change your database’s compatibility level.
    Alter Database [Adventureworks] Set Compatibility_Level = 100;

  3. Copy all server logins from the principal server instance to the mirror server instance. First, run this script on your principal server :
    USE master

    GO

    IF OBJECT_ID ('sp_hexadecimal') IS NOT NULL

      DROP PROCEDURE sp_hexadecimal

    GO

    CREATE PROCEDURE sp_hexadecimal

        @binvalue varbinary(256),

        @hexvalue varchar (514) OUTPUT

    AS

    DECLARE @charvalue varchar (514)

    DECLARE @i int

    DECLARE @length int

    DECLARE @hexstring char(16)

    SELECT @charvalue = '0x'

    SELECT @i = 1

    SELECT @length = DATALENGTH (@binvalue)

    SELECT @hexstring = '0123456789ABCDEF'

    WHILE (@i <= @length)

    BEGIN

      DECLARE @tempint int

      DECLARE @firstint int

      DECLARE @secondint int

      SELECT @tempint = CONVERT(int, SUBSTRING(@binvalue,@i,1))

      SELECT @firstint = FLOOR(@tempint/16)

      SELECT @secondint = @tempint - (@firstint*16)

      SELECT @charvalue = @charvalue +

        SUBSTRING(@hexstring, @firstint+1, 1) +

        SUBSTRING(@hexstring, @secondint+1, 1)

      SELECT @i = @i + 1

    END

     

    SELECT @hexvalue = @charvalue

    GO

     

    IF OBJECT_ID ('sp_help_revlogin') IS NOT NULL

      DROP PROCEDURE sp_help_revlogin

    GO

    CREATE PROCEDURE sp_help_revlogin @login_name sysname = NULL AS

    DECLARE @name sysname

    DECLARE @type varchar (1)

    DECLARE @hasaccess int

    DECLARE @denylogin int

    DECLARE @is_disabled int

    DECLARE @PWD_varbinary  varbinary (256)

    DECLARE @PWD_string  varchar (514)

    DECLARE @SID_varbinary varbinary (85)

    DECLARE @SID_string varchar (514)

    DECLARE @tmpstr  varchar (1024)

    DECLARE @is_policy_checked varchar (3)

    DECLARE @is_expiration_checked varchar (3)

     

    DECLARE @defaultdb sysname

     

    IF (@login_name IS NULL)

      DECLARE login_curs CURSOR FOR

     

          SELECT p.sid, p.name, p.type, p.is_disabled, p.default_database_name, l.hasaccess, l.denylogin FROM 

    sys.server_principals p LEFT JOIN sys.syslogins l

          ON ( l.name = p.name ) WHERE p.type IN ( 'S', 'G', 'U' ) AND p.name <> 'sa'

    ELSE

      DECLARE login_curs CURSOR FOR

     

     

          SELECT p.sid, p.name, p.type, p.is_disabled, p.default_database_name, l.hasaccess, l.denylogin FROM 

    sys.server_principals p LEFT JOIN sys.syslogins l

          ON ( l.name = p.name ) WHERE p.type IN ( 'S', 'G', 'U' ) AND p.name = @login_name

    OPEN login_curs

     

    FETCH NEXT FROM login_curs INTO @SID_varbinary, @name, @type, @is_disabled, @defaultdb, @hasaccess, @denylogin

    IF (@@fetch_status = -1)

    BEGIN

      PRINT 'No login(s) found.'

      CLOSE login_curs

      DEALLOCATE login_curs

      RETURN -1

    END

    SET @tmpstr = '/* sp_help_revlogin script '

    PRINT @tmpstr

    SET @tmpstr = '** Generated ' + CONVERT (varchar, GETDATE()) + ' on ' + @@SERVERNAME + ' */'

    PRINT @tmpstr

    PRINT ''

    WHILE (@@fetch_status <> -1)

    BEGIN

      IF (@@fetch_status <> -2)

      BEGIN

        PRINT ''

        SET @tmpstr = '-- Login: ' + @name

        PRINT @tmpstr

        IF (@type IN ( 'G', 'U'))

        BEGIN -- NT authenticated account/group

     

          SET @tmpstr = 'CREATE LOGIN ' + QUOTENAME( @name ) + ' FROM WINDOWS WITH DEFAULT_DATABASE = [' + @defaultdb + ']'

        END

        ELSE BEGIN -- SQL Server authentication

            -- obtain password and sid

                SET @PWD_varbinary = CAST( LOGINPROPERTY( @name, 'PasswordHash' ) AS varbinary (256) )

            EXEC sp_hexadecimal @PWD_varbinary, @PWD_string OUT

            EXEC sp_hexadecimal @SID_varbinary,@SID_string OUT

     

            -- obtain password policy state

            SELECT @is_policy_checked = CASE is_policy_checked WHEN 1 THEN 'ON' WHEN 0 THEN 'OFF' ELSE NULL END FROM sys.sql_logins WHERE name = @name

            SELECT @is_expiration_checked = CASE is_expiration_checked WHEN 1 THEN 'ON' WHEN 0 THEN 'OFF' ELSE NULL END FROM sys.sql_logins WHERE name = @name

     

                SET @tmpstr = 'CREATE LOGIN ' + QUOTENAME( @name ) + ' WITH PASSWORD = ' + @PWD_string + ' HASHED, SID = ' + @SID_string + ', DEFAULT_DATABASE = [' + @defaultdb + ']'

     

            IF ( @is_policy_checked IS NOT NULL )

            BEGIN

              SET @tmpstr = @tmpstr + ', CHECK_POLICY = ' + @is_policy_checked

            END

            IF ( @is_expiration_checked IS NOT NULL )

            BEGIN

              SET @tmpstr = @tmpstr + ', CHECK_EXPIRATION = ' + @is_expiration_checked

            END

        END

        IF (@denylogin = 1)

        BEGIN -- login is denied access

          SET @tmpstr = @tmpstr + '; DENY CONNECT SQL TO ' + QUOTENAME( @name )

        END

        ELSE IF (@hasaccess = 0)

        BEGIN -- login exists but does not have access

          SET @tmpstr = @tmpstr + '; REVOKE CONNECT SQL TO ' + QUOTENAME( @name )

        END

        IF (@is_disabled = 1)

        BEGIN -- login is disabled

          SET @tmpstr = @tmpstr + '; ALTER LOGIN ' + QUOTENAME( @name ) + ' DISABLE'

        END

        PRINT @tmpstr

      END

     

      FETCH NEXT FROM login_curs INTO @SID_varbinary, @name, @type, @is_disabled, @defaultdb, @hasaccess, @denylogin

       END

    CLOSE login_curs

    DEALLOCATE login_curs

    RETURN 0

    GO

  4. After that, run this procedure
    EXEC sp_help_revlogin

    The output script that is generated by the sp_help_revlogin stored procedure is the login script. This login script creates the logins that have the original Security Identifier (SID) and the original password.

  5. On server B, start SQL Server Management Studio, and then connect to the instance of SQL Server to which you moved the database.

    For complete documentation about copy login, you can learn it here http://support.microsoft.com/kb/918992

  6. Backup your Database on principal server
    backup database Adventureworks 

    to disk = 'D:\BackupMirroring\Adventureworks\AW.bak' with format

    go

    backup log Adventureworks to disk = 'D:\BackupMirroring\Adventureworks\AWLog.bak'

    go

  7. Create Database Adventureworks at Mirror Server. And then restore it on Mirror Server
    restore database Adventureworks from disk = 'E:\Adventureworks\AW.BAK' with replace, norecovery

    go

    restore log Adventureworks from disk = 'E:\Adventureworks\AWlog.BAK' with norecovery

    Go

     

     

     

  8. Now that you have prepared your database, you can move on to setting up database mirroring by using the Database Mirroring Wizard.
  9. if you do not use a wizard or prefer to use T-SQL to create a database mirroring, please continue to Setting up Database Mirroring in SQL Server 2008 R2 using T-SQL
admin

Recent Posts

Workshop GIS di PT. AIR MINUM INTAN BANJAR (PERSERODA)

Alhamdulillah telah dipercaya untuk memberikan workshop GIS dengan menggunakan perangkat lunak QGIS di PT. AIR…

1 year ago

Workshop GIS di PERUMDA AM Tirta Ratu Samban

Terimakasih atas kepercayaannya kepada kami sehingga terselenggara Workshop QGIS utk PERUMDA AM Tirta Ratu Samba…

1 year ago

Workshop QGIS Online di Tirta Kahuripan

terimakasih atas kepercayaan Perumda Tirta Kahuripan Kab Bogor kepada saya utk mengimplementasikan GIS Online yang…

1 year ago

Digitasi Vector Menggunakan Spesific Length, Angles or Coordinates

Para operator #GIS kadang mendapatkan sebuah gambar situasi yang diperoleh dari kondisi dilapangan yang kemudian…

2 years ago

Video Seri Belajar Snapping di QGIS

Snapping di QGIS. teknik ini sifatnya wajib untuk dikuasai oleh para operator QGIS dalam kegiatan…

2 years ago

Video Seri Belajar EPANET

Epanet (Environmental Protection Agency Network ) adalah sebuah program komputer yang memiliki kemampuan melaksanakan simulasi…

2 years ago