How to configure SQL Mirron in SQL Server 2005 sp1
For purposes of ilustrate this method:
PRINCIPAL will be the PRINCIPAL database server
MIRROR will be the MIRROR database server
myDB will be the database
MIRRORBackup the folder created in PRINCIPAL to store the backups
EP5022 will be the endpoint name and I will use the port 5022 to configure it
I will create an anonymous login and grant it access to connect using the endpoint, this is not very secure, so you may wan to change it
No witness is configured, if you need one, you’ll have to configure it as well
For each Database do:
Set Recovery mode, execute in PRINCIPAL:
ALTER DATABASE MyDB SET RECOVERY FULL
Create Backup Folder in PRINCIPAL(i.e. c:\backup)
Share the Backup Folder (make sure other users can modify the folder)
Create Endpoints:
Execute in PRINCIPAL
if Not Exists (SELECT name, role_desc, state_desc FROM sys.database_MIRRORing_endpoints where name = 'EP5022')
Begin
CREATE ENDPOINT EP5022
STATE=STARTED
AS TCP ( LISTENER_PORT = 5022 ) FOR DATABASE_MIRRORING(ROLE = PARTNER)
End
if not exists( select * from sys.syslogins where loginname = 'NT AUTHORITY\ANONYMOUS LOGON')
Begin
Create Login [NT AUTHORITY\ANONYMOUS LOGON] from windows
End
GRANT CONNECT ON ENDPOINT::EP5022 TO [NT AUTHORITY\ANONYMOUS LOGON]
Execute in MIRROR
if Not Exists (SELECT name, role_desc, state_desc FROM sys.database_MIRRORing_endpoints where name = 'EP5022')
Begin
CREATE ENDPOINT EP5022
STATE=STARTED
AS TCP ( LISTENER_PORT = 5022 ) FOR DATABASE_MIRRORING(ROLE = ALL)
End
if not exists( select * from sys.syslogins where loginname = 'NT AUTHORITY\ANONYMOUS LOGON')
Begin
Create Login [NT AUTHORITY\ANONYMOUS LOGON] from windows
End
GRANT CONNECT ON ENDPOINT::EP5022 TO [NT AUTHORITY\ANONYMOUS LOGON]
Backup Database, Execute in PRINCIPAL
BACKUP DATABASE MyDB TO DISK = '\\PRINCIPAL\MIRRORBackup\MyDB.bak' WITH FORMAT
Kill Connections, Execute in PRINCIPAL
declare @sql nvarchar(1000)
declare @spid as int
declare processcursor cursor fast_forward for
select SPID
from SYS.SYSPROCESSES p inner join sys.sysdatabases d on p.dbid= d.dbid and d.name = 'MyDB'
where SPID > 50
AND spid <> @@spid
open processcursor
fetch next from processcursor into @spid
while @@fetch_status = 0
begin
set @sql = ' kill ' + convert(varchar, @spid)
exec (@sql)
fetch next from processcursor into @spid
end
close processcursor
deallocate processcursor
Restore Database, Execute in MIRROR
if not exists(select * from sys.databases where name='MyDB')
Begin
Create Database MyDB
End
RESTORE DATABASE MyDB FROM DISK = '\\PRINCIPAL\MIRRORBackup\MyDB.bak' WITH REPLACE, NORECOVERY'
Backup Log, Execute in PRINCIPAL
BACKUP Log MyDB TO DISK = '\\PRINCIPAL\MIRRORBackup\MyDB_log.bak'
Kill Connections, Execute in MIRROR
declare @sql nvarchar(1000)
declare @spid as int
declare processcursor cursor fast_forward for
select SPID
from SYS.SYSPROCESSES p inner join sys.sysdatabases d on p.dbid= d.dbid and d.name = 'MyDB'
where SPID > 50
AND spid <> @@spid
open processcursor
fetch next from processcursor into @spid
while @@fetch_status = 0
begin
set @sql = ' kill ' + convert(varchar, @spid)
exec (@sql)
fetch next from processcursor into @spid
end
close processcursor
deallocate processcursor
Restore Log, Execute in MIRROR,
RESTORE Log MyDB FROM DISK = '\\PRINCIPAL\MIRRORBackup\MyDB_log.bak' WITH NORECOVERY'
Enable MIRRORing:
Execute in PRINCIPAL
ALTER DATABASE MyDB SET PARTNER = 'TCP://PRINCIPAL.mydomain.com:5022'
Execute in MIRROR
ALTER DATABASE MyDB SET PARTNER = 'TCP://MIRROR.mydomain.com:5022'
Now everything should be ok now, and the Database is already configured.
Comments
Anonymous
October 02, 2007
PingBack from http://www.artofbam.com/wordpress/?p=4595Anonymous
October 02, 2007
How about with a witness using standard security?Anonymous
October 02, 2007
you should be ok using a user in your domain that has the right permissions or just use "mydomaynmyuser" instead of "NT AUTHORITYANONYMOUS LOGON" but I really haven't tried that. to add a witness, just follow this excelent guide http://msdn2.microsoft.com/en-us/library/ms190430.aspx Greetings. -- OLL