programing

데이터베이스를 복사하는 가장 좋은 방법(SQL Server 2008)

coolbiz 2023. 7. 9. 21:59
반응형

데이터베이스를 복사하는 가장 좋은 방법(SQL Server 2008)

멍청한 질문 - 프로덕션 서버에서 인스턴스를 사용하여 개발 서버를 새로 고치고 싶은 환경에서 인스턴스를 복사하는 가장 좋은 방법은 무엇입니까?

백업-복원 작업을 수행했지만, detach-copy-attach라는 소리가 들렸고, 한 사람은 파일 시스템 간에 데이터 파일을 복사할 것이라고 말하기도 했습니다.

이것들이 세 가지(또는 두 가지, 마지막 것이 약간 의심스러운 것처럼 들림) 수용된 방법입니까?

두 번째 방법이 더 빠르지만 분리 측면 때문에 소스에서 다운타임이 필요한 것으로 알고 있습니다.

또한 이러한 상황(개발 서버에서 정확한 프로덕션 복사본을 원하는 경우)에서 로그인 등을 전송할 때 허용되는 관행은 무엇입니까?사용자 데이터베이스 + 마스터 + msdb를 백업하고 복원하면 됩니까?

가장 쉬운 방법은 사실 스크립트입니다.

프로덕션에서 실행:

USE MASTER;

BACKUP DATABASE [MyDatabase]
TO DISK = 'C:\temp\MyDatabase1.bak' -- some writeable folder. 
WITH COPY_ONLY

이 명령 하나로 운영 가용성이나 백업 일정 등에 영향을 주지 않고 데이터베이스의 전체 백업 복사본을 단일 파일로 만듭니다.

복원하려면 개발 또는 테스트 SQL Server에서 다음을 실행하십시오.

USE MASTER;

RESTORE DATABASE [MyDatabase]
FROM DISK = 'C:\temp\MyDatabase1.bak'
WITH
MOVE 'MyDatabase'   TO 'C:\Sql\MyDatabase.mdf', -- or wherever these live on target
MOVE 'MyDatabase_log'   TO 'C:\Sql\MyDatabase_log.ldf',
REPLACE, RECOVERY

그런 다음 각 서버에 스크립트를 저장합니다.원클릭으로 편리함을 클릭합니다.


논리 이름이 일치하지 않는 오류가 복원될 때 다음과 같은 오류가 발생할 수 있습니다.

RESTORE FILELISTONLY
FROM disk = 'C:\temp\MyDatabaseName1.bak'

윈도우즈 인증이 아닌 SQL Server 로그인을 사용하는 경우 매번(개발/테스트 시스템에서) 복원한 후 이를 실행할 수 있습니다.

use MyDatabaseName;
sp_change_users_login 'Auto_Fix', 'userloginname', null, 'userpassword';

데이터베이스를 복사하는 가장 빠른 방법은 분리-복사-첨부 방법이지만 프로덕션 사용자는 제품이 분리되는 동안 데이터베이스에 액세스할 수 없습니다.예를 들어 프로덕션 DB가 야간에 아무도 사용하지 않는 POS 시스템인 경우 이와 같은 작업을 수행할 수 있습니다.

운영 데이터베이스를 분리할 수 없는 경우 백업 및 복원을 사용해야 합니다.

새 인스턴스에 없는 경우 로그인을 생성해야 합니다.시스템 데이터베이스는 복사하지 않는 것이 좋습니다.

SQL Server Management Studio를 사용하여 필요한 로그인을 생성하는 스크립트를 생성할 수 있습니다.만들어야 하는 로그인을 마우스 오른쪽 버튼으로 클릭하고 Script Login As / Create를 선택합니다.

고아 사용자 목록이 표시됩니다.

EXEC sp_change_users_login 'Report'

이 사용자에 대한 로그인 ID와 암호가 이미 있는 경우 다음을 수행하여 수정합니다.

EXEC sp_change_users_login 'Auto_Fix', 'user'

이 사용자에 대한 새 로그인 ID와 암호를 만들려면 다음을 수행하여 수정합니다.

EXEC sp_change_users_login 'Auto_Fix', 'user', 'login', 'password'


아래의 조언은 SQL Server Management Studio를 사용하여 DB를 스크립팅하는 방법을 알려주지만, SSMS의 기본 설정에는 데이터베이스의 모든 중요한 부분(예: 인덱스 및 트리거!)이 누락되어 있습니다.그래서, 저는 당신이 추가한 거의 모든 종류의 DB 객체를 포함하는 데이터베이스를 적절하게 스크립팅하기 위해 저만의 프로그램을 만들었습니다.대신 이것을 사용하는 것을 추천합니다.SQL Server 스크립터라고 하며 다음 사이트에서 찾을 수 있습니다.
https://bitbucket.org/jez9999/://bitbucket.org/jez9999/sqlserverscripter


SQL Server Management Studio를 사용하여 데이터베이스(스키마 및 데이터)를 스크립트에 덤프할 수 있으므로 아무도 이를 언급하지 않은 것이 매우 유용합니다.

데이터베이스를 마우스 오른쪽 단추로 누르고 "태스크 | 스크립트 생성..."을 선택한 후 특정 데이터베이스 개체를 스크립팅하도록 선택합니다.새 DB로 복사할 항목을 선택합니다(테이블 및 스키마 이상을 선택할 수도 있습니다).그런 다음 "스크립팅 옵션 설정" 화면에서 "고급"을 클릭하고 "스크립팅할 데이터 유형"으로 스크롤한 후 "스키마 및 데이터"를 선택합니다.확인을 클릭하고 스크립트 생성을 완료합니다.이제 데이터베이스의 테이블을 만들고 테이블에 데이터를 삽입하는 긴 스크립트가 생성되었음을 알 수 있습니다.그런 다음 새 데이터베이스를 생성하고 다음을 변경할 수 있습니다.USE [DbName]이전 데이터베이스를 복사할 새 데이터베이스의 이름을 반영하는 스크립트의 맨 위에 있는 문입니다.스크립트를 실행하면 이전 데이터베이스의 스키마와 데이터가 새 데이터베이스로 복사됩니다!

이를 통해 SQL Server Management 스튜디오 내에서 모든 작업을 수행할 수 있으며 파일 시스템을 건드리지 않아도 됩니다.

다음은 운영 환경에서 로컬 환경으로 데이터베이스를 복사하는 작업입니다.

  1. 로컬 SQL 서버에 빈 데이터베이스 생성
  2. 새 데이터베이스 우클릭 -> 작업 -> 데이터 가져오기
  3. SQL Server 가져오기 및 내보내기 마법사에서 제품 환경의 서버 이름을 데이터 원본으로 선택합니다.새 데이터베이스를 대상 데이터로 선택합니다.

운영 dB 또는 실행 중인 다른 dB를 분리하여 다운타임을 처리하는 것은 어렵기 때문에 거의 항상 백업/복원 방법을 사용합니다.

로그인을 동기화 상태로 유지하려면 저장된 procsp_help_revlogin을 사용한 MSKB 문서를 확인하십시오.

분리/복사/첨부 방법을 사용하면 데이터베이스가 다운됩니다.그것은 생산에 있어서 당신이 원하는 것이 아닙니다.

백업/복원은 프로덕션 서버에 대한 쓰기 권한이 있는 경우에만 작동합니다.저는 Amazon RDS와 함께 일하고 있지 않습니다.

테이블을 서로 참조하는 순서대로 하나씩 수행하지 않으면 외래 키 때문에 가져오기/내보내기 방법이 제대로 작동하지 않습니다.새 데이터베이스로 가져오기/내보내기를 수행할 수 있습니다.그러면 모든 테이블과 데이터가 복사되지만 외부 키는 복사되지 않습니다.

이것은 데이터베이스와 관련하여 수행해야 하는 일반적인 작업처럼 들립니다.SQL Server에서 이 문제를 제대로 처리하지 못하는 이유는 무엇입니까?제가 이것을 해야 할 때마다 좌절감을 느꼈습니다.

그렇긴 하지만, 제가 직면한 유일한 고통 없는 솔루션은 커뮤니티에서 관리하는 SQL Azure 마이그레이션 툴이었습니다.SQL Server에서도 작동합니다.

SP를 실행하여 테이블을 드롭한 다음 DTS 패키지를 사용하여 최신 프로덕션 테이블을 개발 상자로 가져옵니다.그리고 집에 갔다가 다음날 아침에 돌아옵니다.우아하지는 않지만 저에게는 효과가 있습니다.

활성 데이터베이스의 복사본을 가져오려면 백업/복원 방법을 수행합니다.

[SQL2000에서 2008에 대해 확실하지 않음:] Windows 계정과 달리 이 데이터베이스에서 SQL Server 계정을 사용하는 경우 마스터 DB가 개발 서버에서 다르거나 동기화되지 않으면 복원 시 사용자 계정이 변환되지 않습니다.재매핑을 위한 SP에 대해 들어본 적이 있는데, 어떤 것인지 기억이 안 나요.

언급URL : https://stackoverflow.com/questions/2043726/best-way-to-copy-a-database-sql-server-2008

반응형