kernelvn
Starting Member
4 Posts |
Posted - 2007-05-03 : 00:51:55
|
Dear all,I'm having a problem with configure Mirroring. When I use graphical inteface to config the Mirror, it is ok. But when using sql, there are an error that I can not understand.Here is the code::SETVAR PrincipalServer DEMO\PARTNERA:SETVAR MirrorServer DEMO\PARTNERB:SETVAR WitnessServer DEMO\WITNESS:SETVAR Database2Mirror AdventureWorksDWgo:ON ERROR EXITgo:CONNECT $(PrincipalServer)-- Mirroring ONLY supports the FULL Recovery ModelALTER DATABASE $(Database2Mirror)SET RECOVERY FULLgoUSE $(Database2Mirror)goCREATE ENDPOINT MirroringSTATE=STARTED AS TCP (LISTENER_PORT=5022) FOR DATABASE_MIRRORING (ROLE=PARTNER)GO:CONNECT $(MirrorServer)CREATE ENDPOINT MirroringSTATE=STARTED AS TCP (LISTENER_PORT=5023) FOR DATABASE_MIRRORING (ROLE=PARTNER)GO:CONNECT $(WitnessServer)CREATE ENDPOINT MirroringSTATE=STARTED AS TCP (LISTENER_PORT=5024) FOR DATABASE_MIRRORING (ROLE=WITNESS)GO:CONNECT $(PrincipalServer)BACKUP DATABASE $(Database2Mirror)TO DISK = 'C:\TechReady\$(Database2Mirror).bak'WITH INITGO:CONNECT $(MirrorServer)DECLARE @InstanceName sql_variant,@InstanceDir sql_variant,@SQLDataRoot nvarchar(512),@ExecStr nvarchar(max)SELECT @InstanceName = ISNULL(SERVERPROPERTY('InstanceName'), 'MSSQLServer')EXECUTE master.dbo.xp_regread 'HKEY_LOCAL_MACHINE', 'SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQL', @InstanceName, @InstanceDir OUTPUTSELECT @ExecStr = 'EXECUTE master.dbo.xp_regread '+ '''HKEY_LOCAL_MACHINE'', ' + '''SOFTWARE\Microsoft\Microsoft SQL Server\' + convert(varchar, @InstanceDir) + '\Setup'', ''SQLDataRoot'', @SQLDataRoot OUTPUT'EXEC master.dbo.sp_executesql @ExecStr, N'@SQLDataRoot nvarchar(512) OUTPUT', @SQLDataRoot OUTPUTIF @SQLDataRoot IS NULLBEGINRAISERROR ('Did not find the correct SQL Data Root Directory. Cannot proceed. Databases backed up but not yet restored.', 16, -1)ENDCREATE TABLE #BackupFileList( LogicalName sysname NULL, PhysicalName sysname NULL, [Type] char(1), FileGroupName sysname NULL, Size bigint, MaxSize bigint, FileId smallint, CreateLSN numeric(25,0), DropLSN numeric(25,0), UniqueId uniqueidentifier, ReadOnlyLSN numeric(25,0), ReadWriteLSN numeric(25,0), BackupSizeInBytes bigint, SourceBlockSize bigint, FileGroupId smallint, LogGroupGUID uniqueidentifier, DifferentialBaseLSN numeric(25,0), DifferentialBaseGUID uniqueidentifier, IsReadOnly bit, IsPresent bit)INSERT #BackupFileListEXEC('LOAD FILELISTONLY FROM DISK = ''C:\TechReady\$(Database2Mirror).bak''')UPDATE #BackupFileListSET PhysicalName = @SQLDataRoot + N'\Data\' + REVERSE(SUBSTRING(REVERSE(PhysicalName), 1, PATINDEX('%\%', REVERSE(PhysicalName)) -1))DECLARE @LogicalName sysname, @PhysicalName sysnameDECLARE FileListCursor CURSOR FAST_FORWARD FOR SELECT LogicalName, PhysicalNameFROM #BackupFileListOPEN FileListCursorFETCH NEXT FROM FileListCursor INTO @LogicalName, @PhysicalNameSELECT @ExecStr = N'RESTORE DATABASE $(Database2Mirror)' +N' FROM DISK = ''c:\TechReady\$(Database2Mirror).bak''' +N' WITH MOVE ''' + @LogicalName + N''' TO ''' + @PhysicalName + N''''FETCH NEXT FROM FileListCursor INTO @LogicalName, @PhysicalNameWHILE @@FETCH_STATUS <> -1BEGINSELECT @ExecStr = @ExecStr + N', MOVE ''' + @LogicalName + ''' TO ''' + @PhysicalName + ''''FETCH NEXT FROM FileListCursor INTO @LogicalName, @PhysicalNameEND-- NORECOVERY is required for Database Mirroring, replace is not. -- Replace is used here solely to allow repetitive use of this script.SELECT @ExecStr = @ExecStr + N' , NORECOVERY, REPLACE'-- Useful for testing-- Only return the string and then comment out the EXEC line below.-- SELECT @ExecStrEXEC (@ExecStr)DEALLOCATE FileListCursorGO:CONNECT $(PrincipalServer)SELECT DATABASEPROPERTYEX(N'$(Database2Mirror)', N'Status') -- Returns ONLINESELECT db_name(sd.[database_id]) AS [Database Name], sd.mirroring_guid, sd.mirroring_state, sd.mirroring_state_desc, sd.mirroring_partner_name, sd.mirroring_witness_name, sd.mirroring_witness_state, sd.mirroring_witness_state_desc, sd.mirroring_role, sd.mirroring_role_desc, sd.mirroring_role_sequence, sd.mirroring_safety_level, sd.mirroring_safety_level_desc, sd.mirroring_safety_sequence, sd.mirroring_failover_lsn FROM sys.database_mirroring AS sdWHERE sd.[database_id] = db_id(N'$(Database2Mirror)')go:CONNECT $(MirrorServer)SELECT DATABASEPROPERTYEX(N'$(Database2Mirror)', N'Status') -- Returns RESTORINGSELECT db_name(sd.[database_id]) AS [Database Name], sd.mirroring_guid, sd.mirroring_state, sd.mirroring_state_desc, sd.mirroring_partner_name, sd.mirroring_witness_name, sd.mirroring_witness_state, sd.mirroring_witness_state_desc, sd.mirroring_role, sd.mirroring_role_desc, sd.mirroring_role_sequence, sd.mirroring_safety_level, sd.mirroring_safety_level_desc, sd.mirroring_safety_sequence, sd.mirroring_failover_lsn FROM sys.database_mirroring AS sdWHERE sd.[database_id] = db_id(N'$(Database2Mirror)')go:CONNECT $(MirrorServer)ALTER DATABASE $(Database2Mirror)SET PARTNER = 'TCP://DEMO:5023'-- SET PARTNER = 'TCP://Server.fully.qualified.dns.name:5091'-- SET PARTNER = 'TCP://SQLIDW15HA.redmond.corp.microsoft.com:5091'GO:CONNECT $(PrincipalServer)ALTER DATABASE $(Database2Mirror)SET PARTNER = 'TCP://DEMO:5022'-- SET PARTNER = 'TCP://Server.fully.qualified.dns.name:5092'-- SET PARTNER = 'TCP://SQLIDW15HA.redmond.corp.microsoft.com:5092'GOALTER DATABASE $(Database2Mirror)SET WITNESS = 'TCP://DEMO:5024'-- SET WITNESS = 'TCP://Server.fully.qualified.dns.name:5090'-- SET WITNESS = 'TCP://SQLIDW15HA.redmond.corp.microsoft.com:5090'GOSELECT db_name(sd.[database_id]) AS [Database Name], sd.mirroring_guid, sd.mirroring_state, sd.mirroring_state_desc, sd.mirroring_partner_name, sd.mirroring_witness_name, sd.mirroring_witness_state, sd.mirroring_witness_state_desc, sd.mirroring_role, sd.mirroring_role_desc, sd.mirroring_role_sequence, sd.mirroring_safety_level, sd.mirroring_safety_level_desc, sd.mirroring_safety_sequence, sd.mirroring_failover_lsn FROM sys.database_mirroring AS sdWHERE sd.[database_id] = db_id(N'$(Database2Mirror)')and the log is: Msg 1452, Level 16, State 6, Line 3The partner server instance name must be distinct from the server instance that manages the database. The ALTER DATABASE SET PARTNER command failed.** An error was encountered during execution of batch. Exiting.I Think the error is begin at: ALTER DATABASE $(Database2Mirror)SET PARTNER = 'TCP://DEMO:5023'-- SET PARTNER = 'TCP://Server.fully.qualified.dns.name:5091'-- SET PARTNER = 'TCP://SQLIDW15HA.redmond.corp.microsoft.com:5091'GO:CONNECT $(PrincipalServer)ALTER DATABASE $(Database2Mirror)SET PARTNER = 'TCP://DEMO:5022'-- SET PARTNER = 'TCP://Server.fully.qualified.dns.name:5092'-- SET PARTNER = 'TCP://SQLIDW15HA.redmond.corp.microsoft.com:5092'GOALTER DATABASE $(Database2Mirror)SET WITNESS = 'TCP://DEMO:5024'-- SET WITNESS = 'TCP://Server.fully.qualified.dns.name:5090'-- SET WITNESS = 'TCP://SQLIDW15HA.redmond.corp.microsoft.com:5090'GObut I can not find out the solution. Turn back to grafical interface, everything is done Please help! |
|