윈도우즈 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를 사용할 수 있다면 이 답변이 맞습니다.몇 가지 세부 사항만 추가하고 싶습니다.
- 소스 데이터베이스를 Azure Portal의 저장소로 내보낼 수 있습니다.
- 내보내기 후 bacpac 파일을 찾을 수 있습니다.
- SSMS를 열고 대상 서버에 연결합니다.
- 노드 데이터베이스를 마우스 오른쪽 버튼으로 클릭하고 데이터 계층 애플리케이션 가져오기를 선택합니다.
- 그런 다음 로컬 Disk 또는 Azure 저장소에서 데이터베이스 가져오기를 선택할 수 있습니다.
- 그런 다음 원본에서 대상으로 데이터베이스를 복사합니다.
이곳에 착륙하는 사람은 누구나 사용할 수 있는 것으로 보입니다.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 구독 전체에 걸쳐 데이터베이스 복사본을 만들었습니다.단계는 다음과 같습니다.
대상 Azure 헤드라인 등록에서 데이터베이스 서버를 작성한 후(아직 작성하지 않은 경우), 원본 Azure 헤드라인 등록의 원본 데이터베이스와 동일한 암호를 사용하여 새 DB를 작성합니다.저는 다른 비밀번호로 작동하지 않았기 때문에 같은 비밀번호를 사용하기로 했습니다만, 다른 비밀번호로도 작동할 수 있는 방법이 있을 것이라고 확신합니다.
대상 Azure의 새로 만든 데이터베이스에서 이 작업을 실행합니다.
DATABASE 파일명 DBNAME
[Source Azure Server Name here]출처입니다. DBsource DB]
새 DB 가격 계층(Basic, Standard 등)은 DB가 생성된 후 포털에서 즉시 변경할 수 있으므로 Azure에서 처리할 수 있습니다.이 경우 대상 DB는 원본 DB와 동일한 가격 계층으로 생성되었습니다.또한 zure의 서버 이름은 일반적으로 -NAME.database입니다.windows.net .따라서 위의 소스 이름에 NAME을 입력합니다.
이제 대상 Azure 헤드라인 등록에서 새 DB 서버에 2개의 데이터베이스가 있습니다.하나는 1단계에서 생성된 것이고 다른 하나는 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
'programing' 카테고리의 다른 글
긴 문자열을 여러 줄로 나누는 방법 (0) | 2023.05.07 |
---|---|
git-reflog가 각 항목과 함께 날짜를 표시하도록 하는 방법이 있습니까? (0) | 2023.05.07 |
UI 텍스트 필드에서 반환 키를 누를 때 키보드를 숨기는 방법은 무엇입니까? (0) | 2023.05.07 |
SQL 절에서 WHERE 1=1 AND를 사용하는 이유는 무엇입니까? (0) | 2023.05.07 |
내장된 리소스 텍스트 파일을 읽는 방법 (0) | 2023.05.07 |