При создании этой статьи были использованы ресурсы:
Для перехода SQL Server 7.0 на SQL Server 2000 можно просто установить SQL Server 2000 поверх SQL Server 7.0. А можно установить SQL Server 2000 параллельно с SQL Server 7.0 и переносить данные вручную. Эта статья и описывает процесс полного переноса всего необходимого со старого сервера на новый при параллельной установке.
Порядок действий при переносе или копировании баз данных средствами Copy Database Wizard:
Используя Copy Database Wizard, можно перемещать и копировать базы данных и связанные с ними метаданные с SQL Server 7.0 на экземпляр SQL Server 2000 без необходимости выключать сервер из работы. Преимущества онлайн переноса баз данных:
Нет необходимости выключать сервер для переноса.
Database Copy Wizard работает, используя возможность отсоединять и присоединять пользовательскую базу, для перемещения (копирования) с SQL Server 7.0 на SQL Server 2000. Действия по копированию выполняет пакет службы переноса данных (DTS). Возможно создание задания, которое выполнит процесс перемещения (копирования) баз в установленное время.
Copy Database Wizard не может быть использован в следующих случаях:
Для предотвращения повреждения баз данных неплохо, если бы они были в режиме только для чтения и не могли быть переименованы по ходу процесса переноса. Любые конфликты между источником и целевым серверами должны быть разрешены вручную до начала процесса переноса (копирования).
Если вы перемещаете или копируете несколько баз данных за раз, то каждая база переносится по отдельности. То есть база отсоединяется, копируются файлы баз данных и присоединяются. DTS сообщает о возникших проблемах или успешном выполнении операции во время процесса переноса (копирования) баз.
После переноса баз данных с одного сервера на другой некоторые пользователи не смогут залогиниться на новом сервере. При этом получая сообщение Msg 18456, Level 16, State 1 Login failed for user ‘%ls’. Это означает, что необходимо перенести логины и пароли на новый сервер.
Для переноса логинов и паролей с SQL Server 7.0 на экземпляр SQL Server 2000 или между двумя экземплярами SQL Server 2000 можно использовать DTS Package Transfer Logins Task из SQL Server 2000. Для этого необходимо проделать следующее:
Компоненты DTS не доступны в 64-битной версии SQL Server 2000.
Этот метод перенесет пароли, но не оригинальные SID. Если логин создан с неоригинальным SID, то после переноса базы данных пользователь не сможет работать в базе данных из-за несоответствия логина и его SID. Во избежание подобных проблем необходимо использовать приведенный ниже скрипт.
Запустить скрипт, который создаст хранимую процедуру sp_help_revlogin. После того как скрипт отработает и будет создана нужная хранимая процедура, на целевом сервере нужно выполнить процедуру sp_help_revlogin, которая создаст логины с оригинальными SID. Скрипт
----- 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 ----- |
Пример запуска хранимой процедуры sp_help_revlogin:
EXEC master..sp_help_revlogin |
Наиболее эффективный способ переноса пакетов DTS с одного сервера на другой это создание нового пакета DTS, который и выполнит перенос других пакетов.
Для перемещения пакетов DTS:
We decided to use an Azure App Configuration to store configs of backend. App Configuration…
I have encountered an issue with az acr login --name <acr_name> command. It hanged and…
I have tried to learn terraform from scratch and found pretty simple tutorial for beginners.…
При внедрении Swagger в проекте .Net Core Web API потребовалось скрыть одно поле из примера,…
Около года назад я решил попробовать заработать на фондовой бирже, покупая и продавая акции. Изучая…
Во время установки .NET Framework столкнулся с ошибкой Installation failed with error code: (0x00000490), "Element…