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 사용보다 부하가 적고, 성능이 좋다.