시나리오 : 서버에서 전체 SQL Server 백업을 복원하고 트랜잭션 로그를 적용하는 C#에서 관리 도구를 만듭니다. db가 나타나면. 아래에 표시된 스크립트를 실행했습니다.코드 섹션 작성에 대한 아이디어가 필요합니다.
use master
EXEC sp_addlogin '<destsid>', '<sidadmpass>','<dbname>'
use <dbname>
EXEC sp_grantdbaccess '<destsid>'
EXEC sp_addrolemember 'db_owner', '<destsid>'
EXEC sp_change_users_login 'Update_One','<destsid>','<destsid>'
use master
EXEC sp_grantdbaccess '<destsid>'
EXEC sp_addrolemember 'db_owner', '<destsid>'
use msdb
EXEC sp_grantdbaccess '<destsid>'
EXEC sp_addrolemember 'db_owner', '<destsid>'
use model
EXEC sp_grantdbaccess '<destsid>'
EXEC sp_addrolemember 'db_owner', '<destsid>'
use tempdb
EXEC sp_grantdbaccess '<destsid>'
EXEC sp_addrolemember 'db_owner', '<destsid>'
use master
grant all on xp_cmdshell to <destsid>
EXEC sp_addsrvrolemember '<destsid>', 'serveradmin'
EXEC sp_addsrvrolemember '<destsid>', 'dbcreator'
EXEC sp_addsrvrolemember '<destsid>', 'bulkadmin'
use <dbname>
if object_id('sp_change_sapuser') is not null
drop procedure sp_change_sapuser
create procedure sp_change_sapuser @oldid sysname, @newid sysname
as begin
declare @oldid_uid smallint
declare @newid_uid smallint
declare @object sysname
declare @object_full nvarchar(999)
set @oldid_uid = user_id(@oldid)
set @newid_uid = user_id(@newid)
if @oldid_uid is not null and @newid_uid is not null
begin
declare object_cursor cursor local for
select name from sysobjects where((xtype='U' and name <> 'dtproperties') or (xtype='V' and name not in ('syssegments','sysconstraints')) or (xtype='P' and name not like 'dt_%') or (xtype='D' and name not like 'DF__dtpropert%') or (xtype in ('FN','TF','IF'))) and @oldid_uid = uid
open object_cursor
fetch next from object_cursor into @object
while @@fetch_status=0
begin
set @object_full = user_name(@oldid_uid) + '.' + @object
exec sp_changeobjectowner @object_full, @newid
fetch next from object_cursor into @object
end
end
else
if @oldid_uid is null
begin
print '*** old database user does not exist ***'
end
if @newid_uid is null
begin
print '*** new database user does not exist ***'
end
end
exec sp_change_sapuser '<sourcesid>', '<destsid>'
use master
EXEC sp_grantlogin 'AMR\<destsid>adm'
EXEC sp_grantlogin 'AMR\SAPService<dbname>'
EXEC sp_defaultdb 'AMR\<destsid>adm','<dbname>'
EXEC sp_defaultdb 'AMR\SAPService<dbname>','<dbname>'
EXEC sp_addsrvrolemember 'AMR\<destsid>adm', 'sysadmin'
EXEC sp_addsrvrolemember 'AMR\SAPService<dbname>', 'sysadmin'
EXEC xp_sqlagent_proxy_account 'SET', '<servername>', 'SAPMssXPUser',N'<sidadmpass>'
use master
EXEC sp_addlogin '<destsid>', '<sidadmpass>', <dbname>
use <dbname>
EXEC sp_change_users_login 'Update_One','<destsid>','<destsid>'
EXEC sp_grantdbaccess '<destsid>'
EXEC sp_addrolemember 'db_owner', '<destsid>'
use master
EXEC sp_grantdbaccess '<destsid>'
EXEC sp_addrolemember 'db_owner', '<destsid>'
use msdb
EXEC sp_grantdbaccess '<destsid>'
EXEC sp_addrolemember 'db_owner', '<destsid>'
use model
EXEC sp_grantdbaccess '<destsid>'
EXEC sp_addrolemember 'db_owner', '<destsid>'
use tempdb
EXEC sp_grantdbaccess '<destsid>'
EXEC sp_addrolemember 'db_owner', '<destsid>'
use master
grant all on xp_cmdshell to <destsid>
EXEC sp_addsrvrolemember '<destsid>', 'serveradmin'
EXEC sp_addsrvrolemember '<destsid>', 'dbcreator'
EXEC sp_addsrvrolemember '<destsid>', 'bulkadmin'
--EXEC xp_sqlagent_proxy_account 'SET', '<servername>', 'SAPMssXPUser', N'<sidadmpass>'
EXEC sp_grantlogin '<destsid>adm'
EXEC sp_grantlogin 'SAPService<dbname>'
EXEC sp_defaultdb '<destsid>adm','<dbname>'
EXEC sp_defaultdb 'SAPService<dbname>','<dbname>'
EXEC sp_addsrvrolemember '<destsid>adm', 'sysadmin'
EXEC sp_addsrvrolemember 'SAPService<dbname>', 'sysadmin'
참고 : 주어진 값은 실제 값으로 대체됩니다.
이러한 스크립트를 실행하는 동안 예외가 발생하지 않을 수 있습니다. 하지만 일부 스크립트에서 오류가 발생하더라도 계속 진행하고 싶습니다. 또한 서버에 별도의 dll을 추가 할 수 없기 때문에 GO (배치 터미네이터)를 제거했습니다. 이 문제를 해결할 수있는 아이디어를 제안하십시오.
세부 사항 : 프로그래밍 랭 : C# DB -는 SQL 서버에 2005,08
안녕하세요. 감사. 한 가지 의심. 분리 된 배치에 "use db"가 포함되어 있으면 사용 여부가 필요합니다. –
@ Yes-kaY - 대개는 - 또는 별도의 데이터베이스를 다루는 경우 적절한 연결 문자열을 사용하여 별도의'SqlConnection' 개체를 만들 수 있습니다. –
@ Damien_The_Unbeliever - 고마워. 대단히 필요하다. 다시 한번 감사드립니다. –