1. 데이터 전송

- SQL Server 데이터를 다른 서버로 복사 또는 다른 서버의 데이터를 SQL Server로 복사하는 과정

- 엑셀 워크시트나 텍스트 파일과도 데이터 전송이 가능하다


1) 데이터 전송 시 고려 사항

- 보안 문제

- 성능 문제: 

대량의 데이터를 읽고 전송하는 경우 SQL Server 부하가 생길 수 있기 때문에, 

대량의 데이터 전송은 서버 사용량이 적은 시간에 이루어지도록 일정 관리가 필요하다. 

- 데이터 정합성 문제:

이기종 간 데이터 전송은 서로 다른 데이터 형식으로 인해 전송 불가, 의도하지 않는 형태의 데이터가 될 우려가 있다.


2. 가장 쉬운 데이터 전송

1) SSMS에서 Ctrl+C, Ctrl+V : 모든 데이터가 메모리에 복사된다

2) 다른 이름으로 저장하기 : 결과 형태에 따라 CSV(엑셀), RPT(텍스트) 파일로 저장할 수 있다.  

3) 엑셀에서 데이터 가져가기(엑셀 기능): [엑셀메뉴]-[데이터]-[외부 데이터 가져오기]-[기타 원본에서]-[SQL Server]


3. 가져오기/내보내기 마법사(Import/Export Wizard)

1) SQL Server 간의 데이터 전송

- 데이터 원본선택 -> 대상 선택 -> 테이블 복사/쿼리 지정 -> 원본 테이블 및 뷰 선택 -> 전송 설정 -> 매핑 설정 -> 패키지 실행

2) 엑셀 워크시트로 내보내기

- 대상 DB 선택 -> [태스크] -> [데이터 내보내기] 선택

- 대상선택(Microsoft Excel) -> 첫 행은 열 이름으로 옵션 선택 -> 테이블 선택 -> 엑셀 시트 이름 변경 -> 데이터 형식 매핑 검토 ->  결과확인

- 대상 선택 후, 공급자 오류 발생시 

--> 공급자 파일은 전송받아 설치해야하고 64bit, 32bit 둘 다 설치

--> 엑셀 버전을 Microsoft Excel 97-2003으로 선택 


4. 연결된 서버 (Linked Server)

- 다른 서버의 데이터에 지속적인 접근이 필요한 경우, 대상 서버의 연결 정보를 미리 저장해둔 서버이다. 

 (이기종 DBMS, 엑셀 워크 시트, 텍스트 파일도 설정 가능)


1) OPENDATASOURCE 사용


-- 1) Ad Hoc Distributed Queries 옵션 활성화

EXEC sp_configure 'show advanced options', 1

RECONFIGURE

GO


EXEC sp_configure 'ad hoc distributed queries', 1

RECONFIGURE

GO


-- 2) OPENDATASOURCE 사용

-- Windows 인증으로 연결

SELECT * FROM OPENDATASOURCE('SQLNCI', 'Data Source=TestDB;Integrated Security=SSPI').Test1DB.dbo.TblSample

GO


-- SQL Server 인증으로 연결

SELECT * FROM OPENDATASOURCE('SQLNCLI', 'Data Source=TestDB;User ID = user1;Password= Password13').Test1DB.dbo.TblSample

GO


2) OPENROWSET 사용

- 다른 SQL Server 데이터를 가져오는 기능 외 텍스트 파일, XML 파일, 이미지 파일 등을 읽거나 가져올 수 있다.

-- Windows 인증

SELECT e.* FROM OPENROWSET('SQLNCLI', 'Server=TestDB;Trusted_Connection=yes;', 'SELECT * FROM Test1DB.dbo.TblSample') AS e 

GO


-- SQL Server 인증

SELECT e.* FROM OPENROWSET('SQLNCLI', 'Server=TestDB;UID=user1;PWD=Password12;', 'SELECT * FROM Test1DB.dbo.TblSample') AS e

GO


3) 연결된 서버 만들기

- [서버 개체] - [연결된 서버] - (우클릭) - [새 연결된 서버(N)...]

- 서버 정보 입력: SQL Server 이름(명명된 인스턴스 이름) / IP 주소 입력

- 보안 정보 입력: 

- 로컬 서버 로그인과 원격 서버 로그인 매핑

- 개별적으로 로그인 매핑이 되지 않은 로그인 계정에 대해 로그인 설정

--> 연결안함 (연결된 서버 쓸 수 없다)

--> 보안 컨텍스트 없이 연결 (연결된 서버 쓸 수 없다)

--> 로그인의 현재 보안 컨텍스트를 사용하여 연결 (로컬과 원격 서버에 동일 계정이 있어야 한다)

--> 다음 보안 컨텍스트를 사용하여 연결 (원격서버에 계정이 있고 접근하고자하는 데이터에 대한 충분한 권한이 필요하다)

4) 연결된 서버 쿼리

- 직접 연결된 서버 쿼리

-- [서버명].[DB명].[스키마명].[테이블명]

SELECT * FROM TestDB.Test1DB.dbo.TblSample

GO

 


- OPENQUERY  사용

SELECT e.* FROM OPENQUERY(TestDB. 'SELECT * FROM TestDB.Test1DB.dbo.TblSample') AS e 


-->  OpenQuery는 연결된 서버에서 대상 데이터를 추출하여 결과만 가져오기 때문에 4 Part Name 사용보다 부하가 적고, 성능이 좋다.


+ Recent posts