SQL Server의 서버 간에 모든 데이터를 마이그레이션하는 단계

페이지 생성 날짜 :

환경

SQL 서버
  • SQL 서버 2019
  • SQL 서버 2012

데이터 마이그레이션 방법 및 각 마이그레이션의 장점과 단점

SQL Server 데이터베이스 데이터를 다른 서버의 SQL Server로 대량으로 마이그레이션하는 방법에는 여러 가지가 있습니다. 각각은 마이그레이션 중에 장점과 단점이 있으므로 환경에 가장 적합한 방법을 선택하십시오.

서버
마이그레이션 방법간의 네트워크 연결 이전 버전으로 마이그레이션하는 동안 파일 크기 테이블 레이아웃의 사전 동기식 인증
데이터베이스 백업 및 복원 필요하지 않음(파일 이동) 나쁘다 일반 필요 없음(자동 전체 교체) 불필요한
데이터를 SQL로 출력 필요하지 않음(파일 이동) 상당한 테이블에 필요하거나 삭제됨 불필요한
데이터 가져오기 및 내보내기 도구 사용 필수 불가결성 상당한 없이 마이그레이션 설정에 따라 다름 필요성

전제 조건

  • SQL Server 및 SQL Server Management Studio가 각 서버에 설치되어 있다고 가정합니다.
  • 이 팁은 SQL 서버 버전을 다르게 만듭니다.

샘플 데이터 만들기

데이터 마이그레이션에 대해 논의할 때 다음 테이블 구성을 사용하여 데이터베이스에서 이를 수행합니다.

데이터 마이그레이션 원본

SQL 서버 2012

  • 표 1(열:키, 값)
  • 표 2(열:키, 값, 설명)
  • 표 3(열:키, 값)

다음은 데이터베이스 작성 스크립트입니다. 적시에 경로를 변경하십시오.

USE [master]
GO

CREATE DATABASE [SampleDatabase]
 CONTAINMENT = NONE
 ON  PRIMARY 
( NAME = N'SampleDatabase', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\SampleDatabase.mdf' , SIZE = 5120KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB )
 LOG ON 
( NAME = N'SampleDatabase_log', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\SampleDatabase_log.ldf' , SIZE = 2048KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)
GO

다음은 테이블 작성 스크립트입니다.

USE [SampleDatabase]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[テーブル1](
	[キー] [int] NOT NULL,
	[値] [nvarchar](50) NULL,
 CONSTRAINT [PK_テーブル1] PRIMARY KEY CLUSTERED 
(
	[キー] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[テーブル2](
	[キー] [int] NOT NULL,
	[値] [nvarchar](50) NULL,
	[備考] [nvarchar](50) NULL,
 CONSTRAINT [PK_テーブル2] PRIMARY KEY CLUSTERED 
(
	[キー] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[テーブル3](
	[キー] [int] NOT NULL,
	[値] [nvarchar](50) NULL,
 CONSTRAINT [PK_テーブル3] PRIMARY KEY CLUSTERED 
(
	[キー] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

다음은 추가 레코드 스크립트입니다.

USE [SampleDatabase]
GO
INSERT [dbo].[テーブル1] ([キー], [値]) VALUES (1, N'1aaa')
GO
INSERT [dbo].[テーブル1] ([キー], [値]) VALUES (2, N'1bbb')
GO
INSERT [dbo].[テーブル2] ([キー], [値], [備考]) VALUES (1, N'2aaa', N'2remarks')
GO
INSERT [dbo].[テーブル2] ([キー], [値], [備考]) VALUES (2, N'2bbb', N'2remarks')
GO
INSERT [dbo].[テーブル3] ([キー], [値]) VALUES (1, N'3aaa')
GO
INSERT [dbo].[テーブル3] ([キー], [値]) VALUES (2, N'3bbb')
GO

데이터 마이그레이션 대상

SQL 서버 2019

  • 표 1(열:키, 값)
  • 표 2(열:키, 값)

각 테이블의 레코드는 비어 있습니다.

다음은 데이터베이스 작성 스크립트입니다. 적시에 경로를 변경하십시오.

USE [master]
GO

CREATE DATABASE [SampleDatabase]
 CONTAINMENT = NONE
 ON  PRIMARY 
( NAME = N'SampleDatabase', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL15.SQLEXPRESS\MSSQL\DATA\SampleDatabase.mdf' , SIZE = 8192KB , MAXSIZE = UNLIMITED, FILEGROWTH = 65536KB )
 LOG ON 
( NAME = N'SampleDatabase_log', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL15.SQLEXPRESS\MSSQL\DATA\SampleDatabase_log.ldf' , SIZE = 8192KB , MAXSIZE = 2048GB , FILEGROWTH = 65536KB )
 WITH CATALOG_COLLATION = DATABASE_DEFAULT
GO

다음은 테이블 작성 스크립트입니다.

USE [SampleDatabase]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[テーブル1](
	[キー] [int] NOT NULL,
	[値] [nvarchar](50) NULL,
 CONSTRAINT [PK_テーブル1] PRIMARY KEY CLUSTERED 
(
	[キー] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[テーブル2](
	[キー] [int] NOT NULL,
	[値] [nvarchar](50) NULL,
 CONSTRAINT [PK_Table_1] PRIMARY KEY CLUSTERED 
(
	[キー] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO

데이터베이스 백업 및 복원 마이그레이션 방법

이 방법은 전체 데이터베이스를 원본 서버의 파일로 백업하고 대상 서버에 복사한 다음 수집하는 것입니다. 따라서 모든 테이블 구성이 대상으로 설정되며 모두 원본과 동일합니다.

또한 이 방법을 사용하면 최신 버전의 SQL Server에서 이전 버전으로 마이그레이션할 수 없습니다. (버전 차이가 작 으면 가능할 수 있습니다))

절차

소스에서 SQL 서버 관리 스튜디오를 시작합니다. SQL Server 버전과 일치하는 폴더를 선택합니다.

대상 서버에 로그인합니다. SQL Server Management Studio를 사용하는 PC는 다른 PC에서는 괜찮지 만 이 팁을 사용하면 모두 자신의 서버에서 작업 할 수 있습니다.

개체 탐색기에서 데이터베이스를 마우스 오른쪽 단추로 클릭하고 작업에 대한 백업을 선택합니다.

오른쪽 아래 모서리에 있는 백업 대상 목록에서 초기 백업 경로를 삭제합니다.

삭제하면 추가 단추를 클릭합니다.

경로 변경 단추를 클릭합니다.

"백업"폴더가 기본적으로 선택되어 있다고 생각하므로 아래 파일 이름에 백업 할 파일 이름을 입력하고 확인 버튼을 클릭하십시오. 파일 이름은 선택 사항이므로 이해하기 쉽게 만듭니다.

확인 단추를 클릭합니다.

목록에 추가되었는지 확인하고 확인 단추를 클릭합니다.

백업 파일이 다음 폴더에 만들어지기 때문에이 파일을 마이그레이션하려는 서버로 가져옵니다. 폴더 경로는 SQL Server 버전과 인스턴스 이름에 따라 다르므로 적시에 확인하십시오.

C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Backup

대상 서버에 복사한 후의 상태입니다. SQL Server의 백업 폴더에 넣으면 로드하기가 더 쉽기 때문에 다음 폴더에 배치됩니다. 또한 SQL Server 버전과 인스턴스 이름에 따라 다르므로 적시에 확인하십시오.

C:\Program Files\Microsoft SQL Server\MSSQL15.SQLEXPRESS\MSSQL\Backup

마이그레이션할 서버에서 SQL Server Management Studio를 시작합니다. 여기에 서버에 로그인되어 있습니다.

개체 탐색기에서 대상 데이터베이스를 마우스 오른쪽 단추로 클릭한 다음 작업, 복원 및 데이터베이스를 선택합니다.

왼쪽 페이지 선택에서 일반이 선택되어 있는지 확인하고 오른쪽의 "소스"에서 "장치"를 선택한 다음 오른쪽의 찾아보기 버튼을 클릭하십시오.

추가 단추를 클릭합니다.

가져온 파일을 선택합니다.

왼쪽 페이지의 선택에서 "옵션"을 선택하고 다음 두 가지를 확인하십시오. 이 두 가지를 선택하면 데이터베이스에 연결된 상태에서 다른 시스템이 강제로 스왑되도록 할 수 있습니다.

  • 기존 데이터베이스 덮어쓰기
  • 대상 데이터베이스에 대한 기존 연결 닫기

그러나 "대상 데이터베이스에 대한 기존 연결 닫기"를 선택한 상태에서 복원에 실패하면 원래 데이터베이스를 사용하지 못할 수 있습니다.

확인할 때 확인 단추를 클릭합니다.

테이블 구성 및 레코드가 완전히 마이그레이션되었는지 확인할 수 있습니다.

또한 최신 버전의 SQL Server 데이터베이스를 이전 버전의 SQL Server로 복원하려고 하면 다음 오류가 표시됩니다. 이 데이터 마이그레이션 방법은 서로 동일한 버전 또는 최신 버전을 기반으로 합니다.

방법: 데이터를 SQL(스크립트)로 출력하고 대상 데이터베이스에서 실행

이것은 테이블의 모든 레코드를 insert 문으로 출력하는 방법입니다. SQL 문은 거의 동일하기 때문에 SQL Server 버전에 관계없이 경우에 따라 다른 유형의 데이터베이스에 적용할 수 있습니다.

그러나 문장이 하나씩 삽입되도록 기록되기 때문에 파일 크기가 증가합니다. 따라서 레코드 수가 증가함에 따라 쓸모가 없으므로 숫자가 작을 때 사용할 수있는 방법입니다.

또한 마이그레이션된 테이블에 대한 SQL을 생성하므로 마이그레이션되는 테이블 구성과 다른 경우에는 사용할 수 없습니다. SQL에서 테이블 작성을 포함할 수도 있지만 대상에서 테이블을 한 번 삭제해야 합니다.

절차

소스에서 SQL 서버 관리 스튜디오를 시작합니다. SQL Server 버전과 일치하는 폴더를 선택합니다.

대상 서버에 로그인합니다. SQL Server Management Studio를 사용하는 PC는 다른 PC에서는 괜찮지 만 이 팁을 사용하면 모두 자신의 서버에서 작업 할 수 있습니다.

대상 데이터베이스를 마우스 오른쪽 버튼으로 클릭하고 "작업"및 "스크립트 생성"을 선택하십시오.

다음을 클릭합니다.

데이터를 마이그레이션할 테이블을 선택할 수 있습니다. 여기에서 모두 선택하거나 특정 테이블을 선택합니다.

출력이 SQL이므로 "파일", "클립 보드"또는 "창에 표시"를 선택할 수 있습니다. 선택되면 오른쪽 상단의 "고급"버튼을 클릭하십시오.

일반 그룹의 "스크립트를 생성할 데이터 유형"에서만 데이터를 선택합니다.

그런 다음 "다음"을 선택하여 확인하십시오. SQL이 생성되었음을 알 수 있습니다. 남은 것은 대상에서이 SQL을 실행하는 것입니다.

단지 insert 문이기 때문에 데이터를 동일하게 유지하려면 대상의 모든 레코드를 미리 삭제해야합니다.

테이블 구성도 마이그레이션

테이블 구성도 마이그레이션하려면 이전의 "스크립트를 생성할 데이터 유형" 선택 항목을 스키마 및 데이터로 설정합니다.

테이블 작성 스크립트도 다음과 같이 생성됩니다. 이것을 사용하려면 마이그레이션 할 테이블을 삭제 한 후에 실행됩니다.

또한 데이터베이스 생성 스크립트도 포함된 경우 이를 생성합니다.

데이터 가져오기 및 내보내기를 사용하여 데이터를 마이그레이션하는 방법

SQL Server를 설치할 때 데이터 가져오기 및 내보내기라는 도구도 설치합니다. 이를 사용하여 테이블에서 다른 서버로 데이터를 마이그레이션할 수 있습니다.

이 도구 마이그레이션의 장점은 데이터를 이전 버전의 SQL Server로 마이그레이션할 수도 있다는 것입니다. 사용하기가 약간 어렵지만 약 1 백만 개의 데이터가 있더라도 몇 분 수준에서 마이그레이션 할 수 있으므로 대규모 데이터 마이그레이션에도 적합합니다. 그러나 원본 서버와 대상 서버는 개인 네트워크에 연결되어 있어야 하며 완전히 다른 네트워크를 사용하는 서버 간에는 사용할 수 없습니다.

전제 조건

이 도구를 사용하는 PC에서 각 SQL Server에 액세스할 수 있도록 SQL Server 인증 또는 Windows 인증을 빌드합니다.

이 팁은 마이그레이션된 서버에서 이 도구를 사용합니다.

절차

시작 메뉴에서 데이터 가져오기 및 내보내기를 선택합니다. SQL Server의 폴더에 포함되어 있지만 폴더 이름은 SQL Server 버전에 따라 다르므로 적시에 찾으십시오.

다음을 클릭합니다.

마이그레이션할 데이터베이스를 선택합니다. 이번에는 원본 서버에서 실행 중이므로 Windows 인증을 통과 할 수 있습니다.

매개 변수 이름 설정 값 설명
데이터 원본 SQL Server 네이티브 클라이언트 11.0
서버 이름 (지역) 다른 서버이거나 인스턴스 이름이 지정된 경우 값을 입력하십시오.
인증 윈도우 인증
데이터베이스 샘플데이터베이스 실제로 마이그레이션할 데이터베이스의 이름을 입력합니다.

그런 다음 대상 데이터베이스에 대한 연결 설정을 설정합니다. SQL Server 인증은 다른 서버에 있기 때문에 사용되고 있습니다.

매개 변수 이름 설정 값 설명
데이터 원본 SQL Server 네이티브 클라이언트 11.0
서버 이름 대상 서버 이름(+ \인스턴스 이름)]
인증 SQL 서버 인증
데이터베이스 샘플데이터베이스 실제로 마이그레이션할 데이터베이스의 이름을 입력합니다.

"하나 이상의 테이블 또는 뷰에서 데이터 복사"를 선택하고 다음 버튼을 클릭하십시오.

마이그레이션할 테이블을 선택합니다. 이 목록에는 보기도 표시되므로 확인하지 마십시오.

원본 및 대상 테이블 이름이 동일하면 마이그레이션할 테이블이 자동으로 선택됩니다. 또한 열 이름이 동일한 경우 열 이름의 매핑을 자동으로 설정합니다.

명심해야 할 몇 가지 사항은 다음과 같습니다.

  • 기본 키가 자동 숫자인 경우 "매핑 편집"에서 "ID 삽입 허용"을 선택하지 않으면 마이그레이션이 실패합니다.
  • 마이그레이션할 테이블이 없으면 테이블이 작성됩니다.
  • 대상 테이블에 동일한 열 이름이 없으면 마이그레이션되지 않습니다. 마이그레이션을 계속하거나 대상 열을 변경하지 마십시오.
  • 레코드는 기본적으로 추가됩니다. 바꾸려면 사전에 대상에서 레코드를 삭제하거나 "매핑 편집"에서 "대상 테이블에서 행 삭제"를 선택하십시오.

사실, 위의 사항을 고려해야하지만이 팁에는 대상에 데이터가 없으며 자동 번호 지정이 없으므로 아무 것도 설정하지 않고 진행할 수 있습니다.

"지금 실행"이 선택되어 있는지 확인하고 "다음"을 클릭하십시오.

완료를 클릭합니다.

데이터 마이그레이션이 시작됩니다. 모든 마이그레이션이 완료되면 닫습니다.

대상 데이터베이스를 보면 존재하지 않는 테이블이 작성되었는지 확인할 수 있습니다. 기존 테이블에 대한 열이 더 이상 없음을 알 수도 있습니다.

데이터가 마이그레이션되고 있는지 확인할 수 있습니다. 표 2의 참고 열은 매핑되지 않으며 마이그레이션되지 않았습니다.