Moving from SQL 7 server to SQL 2000 server

  • 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

  • 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

  • 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