July 27, 2005 at 4:57 am
Hello everyone.
Hope you can offer some simple checks and steps in a project I have regarding moving SQL 7 system and user databases from an NT4 server to a new W2003 , SQL 2000 server.
Need to move and upgrade so was wondering what the issues to look out for are. Require the master database from the SQL 7 box as I need to retain all the exsiting users.
Any help or tips on what to check out before the starting the process , and how to plan and start the proceedure would be much appreciated.
Thanks all
July 27, 2005 at 4:03 pm
I did have an experience upgrading Master from 6.5 to 7.0 on the same machine, went OK. I never upgraded Master to another machine, but I moved Master to another machine having the same service pack and patch level and same database and drive layout.
Unless someone actually tried 2-machine upgrade with moving Master and can share the experience, I would suggest in the TEST environment to upgrade to SQL Server 2000 on the same NT4 box, Install SQL Server 2000 on Windows 2003 box, make sure service pack and patch level are the same disk and database layout are the same , stop both SQL Servers and move Data / TR Log directories from NT4 to Windows 2003 machine.
Local Integrated Logins will not work after that, file system dependancies like files that are stored in the file system but hate references in it in the database should be moved too.
Check if you need to adjust for the new server name - read the article Renaming SQL Server.
Test eveything first
Yelena
Regards,Yelena Varsha
July 28, 2005 at 3:01 am
Dont move your master. You can't upgrade it to SQL2000 anyway. The users aren't a problem though. All you need to is script them out . Run the attached script to create an sp to do this. If you look at the end of the SP you will see the syntax of how to get the users out. Need to have query analyser in text mode.
All you need to do then is run sp_dettach on the databases you want to move. Copy them over to your new machine. Run SP_attachdb and then update the stats in each DB or else it will run like a dog.
Job Done.
----- Begin Script, Create sp_help_revlogin procedure -----
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(256) OUTPUT
AS
DECLARE @charvalue varchar(256)
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 @xstatus int
DECLARE @binpwd varbinary (256)
DECLARE @txtpwd sysname
DECLARE @tmpstr varchar (256)
DECLARE @SID_varbinary varbinary(85)
DECLARE @SID_string varchar(256)
IF (@login_name IS NULL)
DECLARE login_curs CURSOR FOR
SELECT sid, name, xstatus, password FROM master..sysxlogins
WHERE srvid IS NULL AND name <> 'sa'
ELSE
DECLARE login_curs CURSOR FOR
SELECT sid, name, xstatus, password FROM master..sysxlogins
WHERE srvid IS NULL AND name = @login_name
OPEN login_curs
FETCH NEXT FROM login_curs INTO @SID_varbinary, @name, @xstatus, @binpwd
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 ''
PRINT 'DECLARE @pwd sysname'
WHILE (@@fetch_status <> -1)
BEGIN
IF (@@fetch_status <> -2)
BEGIN
PRINT ''
SET @tmpstr = '-- Login: ' + @name
PRINT @tmpstr
IF (@xstatus & 4) = 4
BEGIN -- NT authenticated account/group
IF (@xstatus & 1) = 1
BEGIN -- NT login is denied access
SET @tmpstr = 'EXEC master..sp_denylogin ''' + @name + ''''
PRINT @tmpstr
END
ELSE BEGIN -- NT login has access
SET @tmpstr = 'EXEC master..sp_grantlogin ''' + @name + ''''
PRINT @tmpstr
END
END
ELSE BEGIN -- SQL Server authentication
IF (@binpwd IS NOT NULL)
BEGIN -- Non-null password
EXEC sp_hexadecimal @binpwd, @txtpwd OUT
IF (@xstatus & 2048) = 2048
SET @tmpstr = 'SET @pwd = CONVERT (varchar(256), ' + @txtpwd + ')'
ELSE
SET @tmpstr = 'SET @pwd = CONVERT (varbinary(256), ' + @txtpwd + ')'
PRINT @tmpstr
EXEC sp_hexadecimal @SID_varbinary,@SID_string OUT
SET @tmpstr = 'EXEC master..sp_addlogin ''' + @name
+ ''', @pwd, @sid = ' + @SID_string + ', @encryptopt = '
END
ELSE BEGIN
-- Null password
EXEC sp_hexadecimal @SID_varbinary,@SID_string OUT
SET @tmpstr = 'EXEC master..sp_addlogin ''' + @name
+ ''', NULL, @sid = ' + @SID_string + ', @encryptopt = '
END
IF (@xstatus & 2048) = 2048
-- login upgraded from 6.5
SET @tmpstr = @tmpstr + '''skip_encryption_old'''
ELSE
SET @tmpstr = @tmpstr + '''skip_encryption'''
PRINT @tmpstr
END
END
FETCH NEXT FROM login_curs INTO @SID_varbinary, @name, @xstatus, @binpwd
END
CLOSE login_curs
DEALLOCATE login_curs
RETURN 0
GO
----- End Script -----
--After you create the sp_help_revlogin stored procedure, execute the sp_help_revlogin procedure
--from Query Analyzer on the source server. The sp_help_revlogin stored procedure can be used on
--both SQL Server 7.0 and SQL Server 2000. The output of the sp_help_revlogin stored procedure
--is login scripts that create logins with the original SID and password. Save the output and
--then paste and execute it in Query Analyzer on the destination SQL Server.
--EXEC master..sp_help_revlogin
Viewing 3 posts - 1 through 2 (of 2 total)
You must be logged in to reply to this topic. Login to reply