한 서버에서 다른 서버로 (수백 개의) 테이블 복사 (SSMS 사용)


27

한 서버에서 다른 서버로 복사 해야하는 수백 개 (현재 466 개이지만 계속 커지는 테이블)가 있습니다.

나는 이것을 전에 한 번도 할 필요가 없었으므로 그것에 접근하는 방법에 대해 전혀 확신하지 못한다. 모든 테이블은 동일한 형식입니다.Cart<Eight character customer number>

이것은 모든 Cart<Number>테이블을 하나의 Carts테이블에 병합하는 더 큰 프로젝트의 일부 이지만 완전히 다른 질문입니다.

누구 든지이 모든 테이블을 복사하는 데 사용할 수있는 가장 좋은 방법이 있습니까? 도움이되는 경우 두 서버의 데이터베이스 이름이 동일합니다. 앞서 말했듯이 sa계정이 있으므로 A에서 B로 데이터를 가져 오는 데 필요한 모든 작업을 수행 할 수 있습니다. 두 서버 모두 동일한 서버 팜에 있습니다.


답변:


21

SQL Server Management Studio의 "데이터 내보내기"작업을 사용할 수 있습니다. SSMS에서 데이터베이스를 마우스 오른쪽 버튼으로 클릭하고 작업을 선택한 다음 "데이터 내보내기"를 선택하십시오. 인덱스를 직접 다시 작성해야하지만 한 서버에서 다른 서버로 테이블을 복사 할 수있는 대화식 마법사가 시작됩니다. 마법사는 임시 SSIS 패키지를 생성하지만 저장하도록 선택할 수도 있지만 비교적 빠릅니다.


4
관심이 있다면 PowerShell을 통해 동일한 내보내기 작업을 수행 할 수도 있습니다. 이 작업을 수행하는 비슷한 스크립트는 여기 내 대답에 있습니다 : dba.stackexchange.com/a/122149/507
Shawn Melton

가져 오기 / 내보내기가 색인과 종속성을 복사하지 않는 이유는 무엇입니까? 466 테이블에 대한 인덱스를 다시 작성하는 것이 어렵지 않습니까?
Vini

@Vini에서는 스크립트 생성 마법사를 사용하여 인덱스를 복사 할 수 있습니다 (필요한 종속성 순서로 스크립트를 안정적으로 생성하는지는 모르겠지만 항상 RedGate SQL 비교를 사용했습니다).
Aaron Bertrand

@AaronBertrand : OK. 나도 같은 질문을했다. 내가 가져올 때 날짜도 smalldatetime으로 변환 한
VINI

23

여기에는 충분한 권한, 데이터 정렬 호환성 및 데이터 액세스가 가능한 각 방향으로 연결된 서버 만 필요한 빠르고 더러운 접근 방식이 있습니다. 소스 링크 서버에서이를 실행하여 대상 링크 서버에서 실행될 동적 SQL을 생성하십시오.

DECLARE @sql NVARCHAR(MAX) = N'';

SELECT @sql += N'SELECT * INTO [database].dbo.' + QUOTENAME(name)
  + N' FROM [source_linked_server].[database].dbo.' + QUOTENAME(name) + N';'
FROM sys.tables
WHERE name LIKE N'Cart[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]';

PRINT @sql; -- this will only print 8K, enough to spot check
--EXEC [destination_linked_server].master.sys.sp_executesql @sql;

19

이것을 테스트하고 약간의 변경을 할 때 스크립트로 작성 될 수있는 것을 쉽게 다시 실행할 수있게하려면 여기에서 내 대답을 확인하십시오.

한 데이터베이스에서 다른 스크립트로 데이터 가져 오기

이 대답 SqlBulkCopy은 .NET 에서 클래스를 사용하는 SQLCLR 저장 프로 시저 사용을 설명합니다 . 해당 스토어드 프로 시저를 사용하면 테이블을 순환하는 커서에서 수행 할 수 있습니다. 이를 통해 프로세스를 쉽게 편집하고 새 테이블을 설명하거나 WHERE커서 쿼리 의 조건을 통해 하나 이상의 테이블을 쉽게 제외 할 수 있습니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.