programing

윈도우즈 Azure SQL 데이터베이스의 교차 구독 데이터베이스 복사

lastcode 2023. 5. 7. 11:29
반응형

윈도우즈 Azure SQL 데이터베이스의 교차 구독 데이터베이스 복사

Windows Azure의 테스트 및 프로덕션 인스턴스를 두 개의 별도 구독으로 분할하려고 합니다.현재 동일한 구독 내에 3개의 윈도우즈 Azure SQL 데이터베이스 인스턴스가 있습니다.

  • 생산.
  • 보고
  • 테스트

운영 환경을 완전히 격리하기 위해 다음과 같이 나뉩니다.

  • 프로덕션 서브스크립션
    • 생산.
    • 보고
  • 서브스크립션 테스트 중
    • 테스트

는 현재우사것은는하용가를 합니다.CREATE DATABASE X AS COPY OF [ServerName].Y실시간 데이터를 난독화하기 전에 프로덕션에서 테스트로 데이터베이스를 복사하는 명령입니다.이 작업은 데이터베이스가 동일한 데이터 센터에 위치해 있고 처음 데이터베이스를 생성한 인스턴스 에 공유 로그인을 수행하는 경우에만 수행할 수 있습니다( 문서에 표시됨).

그러나 이 문서에서는 원본 인스턴스와 대상 인스턴스가 동일한 구독에 속해야 하는지 여부를 나타내지 않습니다.일관된 로그인을 사용한다고 가정할 때 프로덕션 구독과 테스트 구독(Andvica verca) 간에 데이터베이스를 복사할 수 있습니까?

저장소를 블롭하기 위해 백업(내보내기)을 수행한 다음 새 헤드라인 등록으로 가져올 수 있습니다.

http://msdn.microsoft.com/en-us/library/f6899710-634e-425a-969d-8db1267e9471

업데이트: SSMS를 사용할 수 있다면 이 답변이 맞습니다.몇 가지 세부 사항만 추가하고 싶습니다.

  1. 소스 데이터베이스를 Azure Portal의 저장소로 내보낼 수 있습니다.여기에 이미지 설명 입력
  2. 내보내기 후 bacpac 파일을 찾을 수 있습니다.여기에 이미지 설명 입력
  3. SSMS를 열고 대상 서버에 연결합니다.
  4. 노드 데이터베이스를 마우스 오른쪽 버튼으로 클릭하고 데이터 계층 애플리케이션 가져오기를 선택합니다.
  5. 그런 다음 로컬 Disk 또는 Azure 저장소에서 데이터베이스 가져오기를 선택할 수 있습니다.여기에 이미지 설명 입력
  6. 그런 다음 원본에서 대상으로 데이터베이스를 복사합니다.

이곳에 착륙하는 사람은 누구나 사용할 수 있는 으로 보입니다.CREATE DATABASE newDB AS COPY OF [server].[olddb] ( OPTION [, OPTION ...] )서버가 서로 다른 헤드라인 등록에 있는 경우에도 가능합니다.

데이터베이스 만들기(Azure SQL 데이터베이스)에서 더 보기 - MSDN

MS Docs의 예:

CREATE DATABASE db_copy AS COPY OF ozabzw7545.db_original ( SERVICE_OBJECTIVE = 'P2' ) ;

내 설정에서 나는 두 서버 모두에서 동일한 관리자 계정과 비밀번호(로그인)를 가지고 있습니다. 이것은 아마도 도움이 될 것입니다.원래 서버에 대한 관리자 권한이 없으면 작업이 실패합니다.

테스트를 통해 '에디션' 옵션이 포함되어 있음에도 불구하고 에디션을 Standard에서 Premium으로 변경할 수 없다는 것을 알게 되었습니다. 그 이유는 잘 모르겠습니다.

Azure 구독 전체에 걸쳐 데이터베이스 복사본을 만들었습니다.단계는 다음과 같습니다.

  1. 대상 Azure 헤드라인 등록에서 데이터베이스 서버를 작성한 후(아직 작성하지 않은 경우), 원본 Azure 헤드라인 등록의 원본 데이터베이스와 동일한 암호를 사용하여 새 DB를 작성합니다.저는 다른 비밀번호로 작동하지 않았기 때문에 같은 비밀번호를 사용하기로 했습니다만, 다른 비밀번호로도 작동할 수 있는 방법이 있을 것이라고 확신합니다.

  2. 대상 Azure의 새로 만든 데이터베이스에서 이 작업을 실행합니다.

DATABASE 파일명 DBNAME
[Source Azure Server Name here]출처입니다. DBsource DB]

새 DB 가격 계층(Basic, Standard 등)은 DB가 생성된 후 포털에서 즉시 변경할 수 있으므로 Azure에서 처리할 수 있습니다.이 경우 대상 DB는 원본 DB와 동일한 가격 계층으로 생성되었습니다.또한 zure의 서버 이름은 일반적으로 -NAME.database입니다.windows.net .따라서 위의 소스 이름에 NAME을 입력합니다.

  1. 이제 대상 Azure 헤드라인 등록에서 새 DB 서버에 2개의 데이터베이스가 있습니다.하나는 1단계에서 생성된 것이고 다른 하나는 2단계에서 생성된 것으로 실제 복사본입니다.필요 없는 항목은 안전하게 삭제할 수 있습니다.

  2. 위의 1에서 작성한 동일한 대상 서버에 다른 원본 DB를 복사하려면 동일한 명령을 다시 실행하십시오.

이미 해결책을 가지고 계신 것 같습니다. 하지만 여기에 오신 모든 분들을 위해 Azure PowerShell API를 사용하여 원본 구독에 새 서버를 생성하고 복사본을 생성한 후 새 서버를 대상 구독으로 전환할 수 있습니다.

샘플 코드는 테크넷에서 사용할 수 있습니다.

이 코드는 자체적으로 설명할 수 있지만 SO 모범 사례를 위해

코드의 주요 부분은 다음과 같습니다.

새 서버 만들기:

$newserver = New-AzureSqlDatabaseServer -Location $targetServerLocation -AdministratorLogin $targetServerLoginID -AdministratorLoginPassword $targetServerLoginPassword 

데이터베이스 복사본 만들기:

Start-AzureSqlDatabaseCopy -ServerName $sourceServerName -DatabaseName $sourceDatabaseName -PartnerServer $newserver.ServerName  -PartnerDatabase $targetdatabaseName  

서버 전송

$uri = "https://management.core.windows.net:8443/" + $sourceSubscriptionID + "/services" + "/sqlservers/servers/" + $newserver.ServerName + "?op=ChangeSubscription" 

Invoke-RestMethod -Uri $uri -CertificateThumbPrint $certThumbprint -ContentType $contenttype -Method $method -Headers $headers -Body $body 

저는 이것이 꽤 오래된 질문이라는 것을 이해하고 여전히 다른 옵션을 추가하고 싶었습니다.

이 작업을 자동화하려면 수동으로 수행하지 않고(내보내기-가져오기), 데이터베이스를 기존 서버로 복사하고(등록 간에 이동할 임시 데이터베이스를 새로 만들지 않음), 보안상의 고려 사항으로 인해 원본 서버와 대상 서버에 동일한 자격 증명을 사용하지 않으려면 ARM을 사용할 수 있습니다.

데이터베이스를 복사로 만드는 옵션이 있습니다("createMode": "Copy",) 그리고 그것은 구독 간에 성공할 것입니다!간단한 예:

{
  "$schema": "http://schema.management.azure.com/schemas/2014-04-01-preview/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
  },
  "resources": [
    {
      "apiVersion": "2014-04-01-preview",
      "location": "australiaeast",
      "name": "{DESTINATION-SERVER-NAME}/{DESTINATION-DATABASE-NAME}",
      "properties": {
        "createMode": "Copy",
        "sourceDatabaseId": "/subscriptions/{SOURCE-SUBSCRIPTION-ID}/resourceGroups/{SOURCE-RESOURCE-GROUP-NAME}/providers/Microsoft.Sql/servers/{SOURCE-SERVER-NAME}/databases/{SOURCE-DATABASE-NAME}",
        "requestedServiceObjectiveName": "S2"
      },
      "type": "Microsoft.Sql/servers/databases"
    }
  ]
}  

주의해야 할 두 가지 사항 - 이 배포를 실행할 서비스 주체는 소스 및 소스에 대한 기여자 액세스 권한이 있어야 합니다.sourceDatabaseId전체 리소스 ID입니다.

Azure 리소스 그룹 배포 태스크를 사용하여 Azure DevOps에서 이 작업을 수행하면 구독용 SP가 생성됩니다.기여자에게 이에 대한 액세스 권한을 부여해야 합니다.SP는 프로젝트 설정 -> 서비스 연결에서 확인할 수 있습니다.

다음을 사용하여 대상 서버의 SSMS에서 이 작업을 수행할 수 있습니다.

CREATE DATABASE db1 AS COPY OF sourcesrv.db1

소스 rv.dll에서 복사합니다.다른 구독 중인 windows.net .

그러나 SSMS에서 SOURCE 서버에도 연결할 수 있는지 먼저 확인해야 합니다. 그렇지 않으면 실제 문제를 숨기는 완전히 혼란스러운 오류 메시지가 표시됩니다.

원본 서버는 정기적으로 연결하는 서버일 수 있지만 현재 사용 중인 IP 주소에서는 연결되지 않을 수 있습니다.이 경우 서버의 방화벽 규칙에 IP를 추가해야 합니다.SSMS에서 연결을 시도할 때 나타나는 대화 상자를 사용하여 쉽게 이 작업을 수행할 수 있습니다.

여기에 이미지 설명 입력

기본 라디오 단추("내 클라이언트 IP 추가")를 선택한 상태로 두고 확인을 누릅니다.

검사를 생략하고 인증에 실패하면 위와 같이 올바른 이유를 알려주는 대신 원본 서버에서 사본을 만들 수 없다는 메시지가 표시됩니다!

--In SSMS connected to targetsrv:

CREATE DATABASE db1 AS COPY OF sourcesrv.db1

--Here it should say, "Your client IP address does not have access" to sourcesrv, like when
--you try to connect in SSMS. Instead, it says you can't copy to the SOURCE, even though you 
--told it to copy FROM the source to the TARGET:

--Msg 45137, Level 16, State 1, Line 7
--Insufficient permission to create a database copy on server 'sourcesrv'.

작성 시 두 서버를 동일한 관리 자격 증명으로 구성해야 합니다. 그렇지 않으면 CREATE DATABASE 명령이 동일한 오류 메시지와 함께 실패합니다.

더 간단한 해결책이 있는데, 이 질문에 대답할 때는 사용할 수 없었을 수도 있습니다.SMSS 또는 PowerShell이 필요하지 않습니다.포털에서 모두 수행할 수 있습니다.원본 SQL 데이터베이스로 이동하고 내보내기를 클릭합니다.이렇게 하면 Azure Storage에 .bacpac 파일이 생성됩니다.대상 SQL 서버로 이동하여 가져오기를 클릭합니다.다 했어요.

참고 1: 대상 SQL Sever가 소스 계정의 Azure 스토리지에 액세스할 수 없는 다른 계정/구독에 있는 경우 소스 Azure 스토리지에서 파일을 수동으로 다운로드하여 대상이 액세스할 수 있는 Azure 스토리지 인스턴스에 업로드하면 됩니다.

참고 2: 가져온 데이터베이스의 이름에는 내보내기 날짜가 포함됩니다.은 를여이변수있다니습경할름을하실행을 할 수 .ALTER DATABASE [dbname] MODIFY NAME = [newdbname]대상 데이터베이스에 있습니다.새 쿼리 편집기를 사용하여 포털에서도 이 작업을 수행할 수 있습니다.

언급URL : https://stackoverflow.com/questions/17746072/cross-subscription-copying-of-databases-on-windows-azure-sql-database

반응형