-
[MSSQL] 연결된서버(LinkedServer) 스크립트 추출SQL Server/스크립트 2023. 9. 18. 14:08
SQL Server에서 GUI를 바탕으로 연결된서버 Export스크립트화가 가능하지만
스크립트로 Export하는 쿼리를 작성해보았다.
(패스워드는 복호화 불가능함)
테스트는 SQL Server 2012, 2019에서 실행
SQL Server 2008 R2이상 버전에서 사용 가능
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191USE masterGODECLARE @server_id INTDECLARE @name NVARCHAR(20)DECLARE @product NVARCHAR(20)DECLARE @provider NVARCHAR(20)DECLARE @provider_string NVARCHAR(100)DECLARE @data_source NVARCHAR(20)DECLARE @catalog NVARCHAR(50)DECLARE @clocallogin NVARCHAR(20)DECLARE @rmtuser NVARCHAR(100)DECLARE @useself NVARCHAR(100)DECLARE @locallogin NVARCHAR(100)DECLARE @collation_compatible NVARCHAR(100)DECLARE @data_access NVARCHAR(100)DECLARE @dist NVARCHAR(100)DECLARE @pub NVARCHAR(100)DECLARE @rpc NVARCHAR(100)DECLARE @rpc_out NVARCHAR(100)DECLARE @sub NVARCHAR(100)DECLARE @connect_timeout NVARCHAR(100)DECLARE @collation_name NVARCHAR(100)DECLARE @lazy_schema_validation NVARCHAR(100)DECLARE @query_timeout NVARCHAR(100)DECLARE @use_remote_collation NVARCHAR(100)DECLARE @remote_proc_transaction_promotion NVARCHAR(100)DECLARE Type_cursor SCROLL CURSOR FORSELECT a.[server_id],a.name,a.product,a.[provider],CASE WHEN a.provider_string IS NULL THEN 'NULL' ELSE a.provider_string END as provider_string,a.[data_source],CAST (CASE WHEN a.catalog IS NULL THEN '' ELSE '' + a.catalog + '' END as nvarchar) as catalog,CAST (CASE WHEN a.is_collation_compatible = 0 THEN 'false' ELSE 'true' END as nvarchar) as [collation compatible],CAST (CASE WHEN a.is_data_access_enabled = 0 THEN 'false' ELSE 'true' END as nvarchar) as [data access],CAST (CASE WHEN a.is_distributor = 0 THEN 'false' ELSE 'true' END as nvarchar) as [dist],CAST (CASE WHEN a.is_publisher = 0 THEN 'false' ELSE 'true' END as nvarchar) as [pub],CAST (CASE WHEN a.is_remote_login_enabled = 0 THEN 'false' ELSE 'true' END as nvarchar) as [rpc],CAST (CASE WHEN a.is_rpc_out_enabled = 0 THEN 'false' ELSE 'true' END as nvarchar) as [rpc out],CAST (CASE WHEN a.is_subscriber = 0 THEN 'false' ELSE 'true' END as nvarchar) as [sub],CAST (CASE WHEN a.connect_timeout = 0 THEN '0' ELSE a.connect_timeout END as nvarchar) as [connect timeout],CASE WHEN a.collation_name IS NULL THEN 'null' ELSE '' END as [collation name],CAST (CASE WHEN a.lazy_schema_validation = 0 THEN 'false' ELSE 'true' END as nvarchar) as [lazy schema validation],CAST (CASE WHEN a.query_timeout = 0 THEN '0' ELSE a.query_timeout END as nvarchar) as [query timeout],CAST (CASE WHEN a.uses_remote_collation = 0 THEN 'false' ELSE 'true' END as nvarchar) as [use remote collation],CAST (CASE WHEN a.is_remote_proc_transaction_promotion_enabled = 0 THEN 'false' ELSE 'true' END as nvarchar) as [remote proc transaction promotion]FROM sys.servers aWHERE a.server_id > 0/*조건에 연결된 서버명을 입력하면 해당서버만 추출*/--AND a.name IN ('')ORDER BY a.name ASCFOR READ ONLYOPEN Type_cursorFETCH FIRST FROM Type_cursorINTO @server_id, @name, @product, @provider, @provider_string, @data_source, @catalog,@collation_compatible, @data_access, @dist, @pub, @rpc, @rpc_out, @sub, @connect_timeout,@collation_name, @lazy_schema_validation, @query_timeout,@use_remote_collation, @remote_proc_transaction_promotionWHILE (@@FETCH_STATUS = 0)BEGINPRINT '/***** Linked Server ' + @name + ' Script Export *****/'PRINT 'USE [master]GO' + CHAR(10)PRINT 'IF EXISTS (SELECT srv.name FROM sys.servers srv WHERE srv.server_id != 0 AND srv.name = N''' + @name + ''')'PRINT 'EXEC master.dbo.sp_dropserver @server =N'''+ @name + ''', @droplogins=''droplogins''GO' + CHAR(10)IF (@provider_string = 'NULL')BEGINIF (@product = 'SQL Server')BEGINPRINT 'EXEC master.dbo.sp_addlinkedserver @server = N''' + @name + ''', @srvproduct=N''' + @product + '''' + CHAR(10)ENDELSE IF (@product = '')BEGINIF(@catalog= '')BEGINPRINT 'EXEC master.dbo.sp_addlinkedserver @server = N''' + @name + ''', @srvproduct=N''' + @product + ''', @provider=N'''+ @provider +''', @datasrc=N''' + @data_source +'''' + CHAR(10)ENDELSEBEGINPRINT 'EXEC master.dbo.sp_addlinkedserver @server = N''' + @name + ''', @srvproduct=N''' + @product + ''', @provider=N'''+ @provider +''', @datasrc=N''' + @data_source +''', @catalog=N''' + @catalog+'''' + CHAR(10)ENDENDELSEBEGINIF(@catalog = '')BEGINPRINT 'EXEC master.dbo.sp_addlinkedserver @server = N'''+ @name + ''', @srvproduct=N''' + @product + ''', @provider=N'''+ @provider +''', @datasrc=N''' + @data_source +'''' + CHAR(10)ENDELSEBEGINPRINT 'EXEC master.dbo.sp_addlinkedserver @server = N'''+ @name + ''', @srvproduct=N''' + @product + ''', @provider=N'''+ @provider +''', @datasrc=N''' + @data_source +''' + @catalog=N''' + @catalog+'''' + CHAR(10)ENDENDENDELSE IF (@provider_string IS NOT NULL)BEGINIF (@catalog= '')BEGINPRINT 'EXEC master.dbo.sp_addlinkedserver @server = N''' + @name + ''', @srvproduct=N''' + @product + ''', @provider=N'''+ @provider +''', @provstr=N''' + @provider_string +'''' + CHAR(10)ENDELSE IF (@catalog IS NOT NULL)BEGINPRINT 'EXEC master.dbo.sp_addlinkedserver @server = N''' + @name + ''', @srvproduct=N''' + @product + ''', @provider=N'''+ @provider +''', @provstr=N''' + @provider_string +''', @catalog=N''' + @catalog +'''' + CHAR(10)ENDENDDECLARE Type_cursor2 SCROLL CURSOR FORSELECT a.[server_id],a.name,a.product,a.[provider],CASE WHEN a.provider_string IS NULL THEN 'NULL' ELSE a.provider_string END as provider_string,a.[data_source],CAST (CASE WHEN a.catalog IS NULL THEN '' ELSE '' + a.catalog + '' END as nvarchar) as catalog,c.name, --as clocallogin,CAST (CASE WHEN b.remote_name IS NULL THEN 'NULL' ELSE 'N''' + b.remote_name + '''' END as nvarchar) as rmtuser,CAST (CASE WHEN b.uses_self_credential = 0 THEN 'False' ELSE 'True' END as nvarchar) as useself,CAST (CASE WHEN b.local_principal_id = 0 THEN 'NULL' ELSE 'N''' + c.name + '''' END as nvarchar) as localloginFROM sys.servers aLEFT OUTER JOIN sys.linked_logins b ON b.server_id = a.server_idLEFT OUTER JOIN sys.server_principals c ON c.principal_id = b.local_principal_idWHERE a.server_id <> 0 AND a.name = @nameORDER BY c.name ASCFOR READ ONLYOPEN Type_cursor2FETCH NEXT FROM Type_cursor2INTO @server_id, @name, @product, @provider, @provider_string, @data_source, @catalog,@clocallogin, @rmtuser, @useself, @localloginWHILE (@@FETCH_STATUS = 0)BEGINIF (@useself = 'True') OR (@useself = 'False' AND @locallogin = 'NULL' AND @rmtuser = 'NULL')BEGINPRINT 'EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N''' + @name + ''', @useself=N''' + @useself + ''', @locallogin='+@locallogin+', @rmtuser=' + @rmtuser+', @rmtpassword=NULL'ENDELSEBEGINPRINT 'EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N''' + @name + ''', @useself=N''' + @useself + ''', @locallogin='+@locallogin+', @rmtuser=' + @rmtuser+', @rmtpassword=''########'''ENDFETCH NEXT FROM Type_cursor2INTO @server_id, @name, @product, @provider, @provider_string, @data_source, @catalog,@clocallogin, @rmtuser, @useself, @localloginENDCLOSE Type_cursor2DEALLOCATE Type_cursor2PRINT 'GO' + CHAR(10)PRINT 'EXEC master.dbo.sp_serveroption @server=N''' + @name + ''', @optname=N''collation compatible'', @optvalue=N''' + @collation_compatible +'''GO' + CHAR(10)PRINT 'EXEC master.dbo.sp_serveroption @server=N''' + @name + ''', @optname=N''data access'', @optvalue=N''' + @data_access +'''GO' + CHAR(10)PRINT 'EXEC master.dbo.sp_serveroption @server=N''' + @name + ''', @optname=N''dist'', @optvalue=N''' + @dist +'''GO' + CHAR(10)PRINT 'EXEC master.dbo.sp_serveroption @server=N''' + @name + ''', @optname=N''pub'', @optvalue=N''' + @pub +'''GO' + CHAR(10)PRINT 'EXEC master.dbo.sp_serveroption @server=N''' + @name + ''', @optname=N''rpc'', @optvalue=N''' + @rpc +'''GO' + CHAR(10)PRINT 'EXEC master.dbo.sp_serveroption @server=N''' + @name + ''', @optname=N''rpc out'', @optvalue=N''' + @rpc_out +'''GO' + CHAR(10)PRINT 'EXEC master.dbo.sp_serveroption @server=N''' + @name + ''', @optname=N''sub'', @optvalue=N''' + @sub +'''GO' + CHAR(10)PRINT 'EXEC master.dbo.sp_serveroption @server=N''' + @name + ''', @optname=N''connect timeout'', @optvalue=N''' + @connect_timeout +'''GO' + CHAR(10)PRINT 'EXEC master.dbo.sp_serveroption @server=N''' + @name + ''', @optname=N''collation name'', @optvalue=' + @collation_name +'GO' + CHAR(10)PRINT 'EXEC master.dbo.sp_serveroption @server=N''' + @name + ''', @optname=N''lazy schema validation'', @optvalue=N''' + @lazy_schema_validation +'''GO' + CHAR(10)PRINT 'EXEC master.dbo.sp_serveroption @server=N''' + @name + ''', @optname=N''query timeout'', @optvalue=N''' + @query_timeout +'''GO' + CHAR(10)PRINT 'EXEC master.dbo.sp_serveroption @server=N''' + @name + ''', @optname=N''use remote collation'', @optvalue=N''' + @use_remote_collation +'''GO' + CHAR(10)PRINT 'EXEC master.dbo.sp_serveroption @server=N''' + @name + ''', @optname=N''remote proc transaction promotion'', @optvalue=N''' + @remote_proc_transaction_promotion +'''GO' + CHAR(10)FETCH NEXT FROM Type_cursorINTO @server_id, @name, @product, @provider, @provider_string, @data_source, @catalog,@collation_compatible, @data_access, @dist, @pub, @rpc, @rpc_out, @sub, @connect_timeout,@collation_name, @lazy_schema_validation, @query_timeout,@use_remote_collation, @remote_proc_transaction_promotionENDCLOSE Type_cursorDEALLOCATE Type_cursorcs <출처 : 본인 작성>
이상
'SQL Server > 스크립트' 카테고리의 다른 글
[MSSQL] 에이전트잡(AgentJob) 스크립트 추출 (0) 2023.09.18 [MSSQL] 테이블 건수 확인(Row) (0) 2022.04.09 [MSSQL] MSSQL2012 사용자계정 추출 (0) 2022.04.09 [MSSQL] MSSQL2000 사용자계정 추출 (0) 2022.04.09 [MSSQL] 트리거(Trigger) 스크립트 추출 (0) 2022.04.09