Azure SQL Veritabanında veritabanının işlem açısından tutarlı bir kopyasını kopyalama

Şunlar için geçerlidir: Azure SQL Veritabanı

Azure SQL Veritabanı, aynı sunucuda veya farklı bir sunucuda var olan bir veritabanının kopyasını oluşturmak için çeşitli yöntemler sağlar. veritabanını Azure portal, PowerShell, Azure CLI veya T-SQL kullanarak kopyalayabilirsiniz.

Genel Bakış

Veritabanı kopyası, kopyalama isteği başlatıldıktan sonraki bir noktadan itibaren kaynak veritabanının işlem açısından tutarlı bir anlık görüntüsüdür. Kopya için aynı sunucuyu veya farklı bir sunucuyu seçebilirsiniz. Ayrıca, kaynak veritabanının yedek yedekliliğini ve işlem boyutunu korumayı veya aynı hizmet katmanı içinde farklı bir yedekleme depolama yedekliliği ve/veya işlem boyutu kullanmayı seçebilirsiniz. Kopya tamamlandıktan sonra tamamen işlevsel ve bağımsız bir veritabanı haline gelir. Kopyalanan veritabanındaki oturum açma bilgileri, kullanıcılar ve izinler kaynak veritabanından bağımsız olarak yönetilir. Kopya, coğrafi çoğaltma teknolojisi kullanılarak oluşturulur. Çoğaltma dengeli dağıtımı tamamlandıktan sonra, coğrafi çoğaltma bağlantısı otomatik olarak sonlandırılır. Coğrafi çoğaltmayı kullanmayla ilgili tüm gereksinimler veritabanı kopyalama işlemine de uygulanır. Ayrıntılar için bkz . Etkin coğrafi çoğaltmaya genel bakış .

Azure SQL Hiper Ölçek için Veritabanı Kopyası

hiper ölçek Azure SQL için hedef veritabanı, kopyanın hızlı bir kopya mı yoksa veri kopyalama boyutu mu olacağını belirler.

Hızlı kopyalama: Kopya kaynakla aynı bölgede tamamlandığında, kopya blobların anlık görüntülerinden oluşturulur; bu kopya, veritabanı boyutundan bağımsız olarak hızlı bir işlemdir.

Veri kopyalama boyutu: Hedef veritabanı kaynaktan farklı bir bölgedeyse veya hedeften veritabanı yedekleme depolama yedekliliği (Yerel, Bölgesel, Coğrafi) kaynak veritabanından farklıysa, kopyalama işlemi veri işleminin boyutu olur. Sayfa sunucusu blobları paralel olarak kopyalandığından kopyalama süresi boyutla doğrudan orantılı olmayacaktır.

Veritabanı kopyasındaki oturum açma bilgileri

Bir veritabanını aynı sunucuya kopyaladığınızda, her iki veritabanında da aynı oturum açma bilgileri kullanılabilir. Veritabanını kopyalamak için kullandığınız güvenlik sorumlusu, yeni veritabanında veritabanı sahibi olur.

Veritabanını farklı bir sunucuya kopyaladığınızda hedef sunucuda kopyalama işlemini başlatan güvenlik sorumlusu yeni veritabanının sahibi olur.

Hedef sunucu ne olursa olsun tüm veritabanı kullanıcıları, izinleri ve güvenlik tanımlayıcıları (SID) veritabanı kopyasına kopyalanır. Veri erişimi için bağımsız veritabanı kullanıcılarının kullanılması, kopyalanan veritabanının aynı kullanıcı kimlik bilgilerine sahip olmasını sağlar, böylece kopyalama tamamlandıktan sonra aynı kimlik bilgileriyle hemen erişebilirsiniz.

Veri erişiminde sunucu düzeyi oturum açma bilgilerini kullanır ve veritabanını farklı bir sunucuya kopyalarsanız, oturum açma tabanlı erişim çalışmayabilir. Bu durumun oluşmasının nedeni, oturum açma bilgilerinin hedef sunucuda mevcut olmaması veya parolalarıyla güvenlik tanımlayıcılarının (SID) farklı olması olabilir. Veritabanını farklı bir sunucuya kopyalarken oturum açma bilgilerini yönetme hakkında bilgi edinmek için bkz. Olağanüstü durum kurtarma sonrasında Azure SQL Veritabanı güvenliğini yönetme. Farklı bir sunucuya kopyalama işlemi başarılı olduktan sonra ve diğer kullanıcılar yeniden eşlenmeden önce, yalnızca veritabanı sahibiyle ilişkili oturum açma bilgileri veya sunucu yöneticisi kopyalanan veritabanında oturum açabilir. Kopyalama işlemi tamamlandıktan sonra oturum açma bilgilerini çözümlemek ve veri erişimi oluşturmak için bkz. Oturum açma bilgilerini çözümleme.

Azure portalını kullanarak kopyalama

Azure portal kullanarak veritabanını kopyalamak için veritabanınızın sayfasını açın ve Kopyala'ya tıklayın.

Veritabanı kopyası

PowerShell veya Azure CLI kullanarak kopyalama

Veritabanını kopyalamak için aşağıdaki örnekleri kullanın.

PowerShell için New-AzSqlDatabaseCopy cmdlet'ini kullanın.

Önemli

PowerShell Azure Resource Manager (RM) modülü Azure SQL Veritabanı tarafından hala desteklenmektedir, ancak gelecekteki tüm geliştirmeler Az.Sql modülüne yöneliktir. AzureRM modülü en az Aralık 2020'ye kadar hata düzeltmeleri almaya devam edecektir. Az modülündeki ve AzureRm modüllerindeki komutların bağımsız değişkenleri önemli ölçüde aynıdır. Uyumlulukları hakkında daha fazla bilgi için bkz. Yeni Azure PowerShell Az modülüne giriş.

New-AzSqlDatabaseCopy -ResourceGroupName "<resourceGroup>" -ServerName $sourceserver -DatabaseName "<databaseName>" `
    -CopyResourceGroupName "myResourceGroup" -CopyServerName $targetserver -CopyDatabaseName "CopyOfMySampleDatabase"

Veritabanı kopyası zaman uyumsuz bir işlemdir, ancak istek kabul edildikten hemen sonra hedef veritabanı oluşturulur. Devam ederken kopyalama işlemini iptal etmeniz gerekiyorsa Remove-AzSqlDatabase cmdlet'ini kullanarak hedef veritabanını bırakın.

Tam bir örnek PowerShell betiği için bkz. Veritabanını yeni bir sunucuya kopyalama.

Transact-SQL kullanarak kopyalama

Sunucu yöneticisi oturum açma bilgileri veya kopyalamak istediğiniz veritabanını oluşturan oturum açma bilgileriyle ana veritabanında oturum açın. Veritabanı kopyalama işleminin başarılı olması için sunucu yöneticisi olmayan oturum açma bilgilerinin rolün dbmanager üyesi olması gerekir. Oturum açma bilgileri ve sunucuya bağlanma hakkında daha fazla bilgi için bkz. Oturum açma bilgilerini yönetme.

CREATE DATABASE ile kaynak veritabanını kopyalamaya başlayın ... COPY OF deyimi. Veritabanı kopyalama işlemi tamamlanana kadar T-SQL deyimi çalışmaya devam eder.

Not

T-SQL deyimi sonlandırılıyorsa veritabanı kopyalama işlemi sonlandırılmaz. İşlemi sonlandırmak için hedef veritabanını bırakın.

Özel uç nokta üzerinden hedef sunucuya bağlanırken T-SQL kullanılarak veritabanı kopyalama desteklenmez. Özel uç nokta yapılandırıldıysa ancak genel ağ erişimine izin veriliyorsa, hedef sunucuya genel IP adresinden bağlanıldığında veritabanı kopyası desteklenir. Kopyalama işlemi tamamlandıktan sonra genel erişim reddedilebilir.

Önemli

T-SQL CREATE DATABASE kullanılırken yedek depolama yedekliliği seçiyor ... AS COPY OF komutu henüz desteklenmiyor.

Aynı sunucuya kopyalama

Sunucu yöneticisi oturum açma bilgileri veya kopyalamak istediğiniz veritabanını oluşturan oturum açma bilgileriyle ana veritabanında oturum açın. Veritabanı kopyalamanın başarılı olması için sunucu yöneticisi olmayan oturum açma işlemlerinin rolün dbmanager üyesi olması gerekir.

Bu komut, Database1'i aynı sunucudaki Database2 adlı yeni bir veritabanına kopyalar. Veritabanınızın boyutuna bağlı olarak kopyalama işleminin tamamlanması biraz zaman alabilir.

-- Execute on the master database to start copying
CREATE DATABASE Database2 AS COPY OF Database1;

Elastik havuza kopyalama

Sunucu yöneticisi oturum açma bilgileri veya kopyalamak istediğiniz veritabanını oluşturan oturum açma bilgileriyle ana veritabanında oturum açın. Veritabanı kopyalamanın başarılı olması için sunucu yöneticisi olmayan oturum açma işlemlerinin rolün dbmanager üyesi olması gerekir.

Bu komut, Database1'i pool1 adlı elastik havuzdaki Database2 adlı yeni bir veritabanına kopyalar. Veritabanınızın boyutuna bağlı olarak kopyalama işleminin tamamlanması biraz zaman alabilir.

Veritabanı1 tek veya havuza alınan bir veritabanı olabilir. Farklı katman havuzları arasında kopyalama desteklenir, ancak bazı katmanlar arası kopyalar başarılı olmaz. Örneğin, tek veya elastik standart bir veritabanını bir Genel Amaçlı havuzuna kopyalayabilirsiniz, ancak standart elastik veritabanını premium havuza kopyalayamazsınız.

-- Execute on the master database to start copying
CREATE DATABASE Database2
AS COPY OF Database1
(SERVICE_OBJECTIVE = ELASTIC_POOL( name = pool1 ));

Farklı bir sunucuya kopyalama

Yeni veritabanının oluşturulacağı hedef sunucunun ana veritabanında oturum açın. Kaynak sunucudaki kaynak veritabanının veritabanı sahibiyle aynı ada ve parolaya sahip bir oturum açma bilgisi kullanın. Hedef sunucudaki oturum açma işlemi de rolün dbmanager üyesi veya sunucu yöneticisi oturum açma bilgisi olmalıdır.

Bu komut, sunucu1 üzerindeki Veritabanı1'i sunucu2'de Veritabanı2 adlı yeni bir veritabanına kopyalar. Veritabanınızın boyutuna bağlı olarak kopyalama işleminin tamamlanması biraz zaman alabilir.

-- Execute on the master database of the target server (server2) to start copying from Server1 to Server2
CREATE DATABASE Database2 AS COPY OF server1.Database1;

Önemli

Her iki sunucunun güvenlik duvarı da T-SQL CREATE DATABASE veren istemcinin IP'sinden gelen bağlantıya izin verecek şekilde yapılandırılmalıdır... KOMUTUN KOPYASI OLARAK. Geçerli bağlantının kaynak IP adresini belirlemek için SELECT client_net_address FROM sys.dm_exec_connections WHERE session_id = @@SPID;

Benzer şekilde, aşağıdaki komut sunucu1'de Database1'i server2 üzerindeki pool2 adlı elastik havuz içindeki Database2 adlı yeni bir veritabanına kopyalar.

-- Execute on the master database of the target server (server2) to start copying from Server1 to Server2
CREATE DATABASE Database2 AS COPY OF server1.Database1 (SERVICE_OBJECTIVE = ELASTIC_POOL( name = pool2 ) );

Farklı bir aboneliğe kopyalama

Veritabanınızı T-SQL kullanarak farklı bir abonelikteki bir sunucuya kopyalamak için SQL Veritabanı farklı bir sunucuya kopyalama bölümündeki adımları kullanabilirsiniz. Kaynak veritabanının veritabanı sahibiyle aynı ada ve parolaya sahip bir oturum açma bilgisi kullandığınızdan emin olun. Ayrıca, oturum açma hem kaynak hem de hedef sunucularda rolün dbmanager veya sunucu yöneticisinin üyesi olmalıdır.

İpucu

Aynı Azure Active Directory kiracısındaki veritabanlarını kopyalarken, kopyalama komutunu her iki sunucuda da yeterli erişime sahip bir AAD kimlik doğrulaması oturum açma bilgileri kullanarak başlatırsanız kaynak ve hedef sunucularda yetkilendirme basitleştirilir. Gerekli en düşük erişim düzeyi, her iki sunucudaki dbmanager ana veritabanındaki rolün üyeliğidir. Örneğin, AAD oturum açma bilgileri, her iki sunucuda da sunucu yöneticisi olarak belirlenen bir AAD grubunun üyesidir.

--Step# 1
--Create login and user in the master database of the source server.

CREATE LOGIN loginname WITH PASSWORD = 'xxxxxxxxx'
GO
CREATE USER [loginname] FOR LOGIN [loginname] WITH DEFAULT_SCHEMA=[dbo];
GO
ALTER ROLE dbmanager ADD MEMBER loginname;
GO

--Step# 2
--Create the user in the source database and grant dbowner permission to the database.

CREATE USER [loginname] FOR LOGIN [loginname] WITH DEFAULT_SCHEMA=[dbo];
GO
ALTER ROLE db_owner ADD MEMBER loginname;
GO

--Step# 3
--Capture the SID of the user "loginname" from master database

SELECT [sid] FROM sysusers WHERE [name] = 'loginname';

--Step# 4
--Connect to Destination server.
--Create login and user in the master database, same as of the source server.

CREATE LOGIN loginname WITH PASSWORD = 'xxxxxxxxx', SID = [SID of loginname login on source server];
GO
CREATE USER [loginname] FOR LOGIN [loginname] WITH DEFAULT_SCHEMA=[dbo];
GO
ALTER ROLE dbmanager ADD MEMBER loginname;
GO

--Step# 5
--Execute the copy of database script from the destination server using the credentials created

CREATE DATABASE new_database_name
AS COPY OF source_server_name.source_database_name;

Not

Azure portal, PowerShell ve Azure CLI farklı bir aboneliğe veritabanı kopyalamayı desteklemez.

İpucu

T-SQL kullanarak veritabanı kopyalama, veritabanını farklı bir Azure kiracısında bulunan bir abonelikten kopyalamayı destekler. Bu yalnızca hedef sunucuda oturum açmak için SQL kimlik doğrulaması oturum açma bilgileri kullanılırken desteklenir. Azure Active Directory kimlik doğrulaması kaynak veya hedef mantıksal sunucuda etkin (etkin) olduğunda, farklı bir Azure kiracısında mantıksal sunucuda veritabanı kopyası oluşturma desteklenmez.

Kopyalama işleminin ilerleme durumunu izleme

sys.databases, sys.dm_database_copies vesys.dm_operation_status görünümlerini sorgulayarak kopyalama işlemini izleyin. Kopyalama işlemi devam ederken, yeni veritabanı için sys.databases görünümünün state_desc sütunu KOPYALANIYOR olarak ayarlanır.

  • Kopyalama başarısız olursa, yeni veritabanı için sys.databases görünümünün state_desc sütunu ŞÜPHELI olarak ayarlanır. Drop deyimini yeni veritabanında yürütün ve daha sonra yeniden deneyin.
  • Kopyalama başarılı olursa, yeni veritabanı için sys.databases görünümünün state_desc sütunu ÇEVRİmİÇİ olarak ayarlanır. Kopyalama tamamlandı ve yeni veritabanı, kaynak veritabanından bağımsız olarak değiştirilebilen normal bir veritabanıdır.

Not

Kopyalama işlemi devam ederken iptal etmeye karar verirseniz drop database deyimini yeni veritabanında yürütün.

Önemli

Kaynaktan çok daha küçük bir hizmet amacına sahip bir kopya oluşturmanız gerekiyorsa, hedef veritabanının kaynak oluşturma işlemini tamamlamak için yeterli kaynağı olmayabilir ve kopyalama işleminin başarısız olmasına neden olabilir. Bu senaryoda, farklı bir sunucuda ve/veya farklı bir bölgede kopya oluşturmak için coğrafi geri yükleme isteği kullanın. Daha fazla bilgi için bkz. Veritabanı yedeklemelerini kullanarak Azure SQL Veritabanını kurtarma.

Azure RBAC rolleri ve veritabanı kopyasını yönetme izinleri

Veritabanı kopyası oluşturmak için aşağıdaki rollerde olmanız gerekir

  • Abonelik Sahibi veya

  • SQL Server Katkıda Bulunan rolü veya

  • Aşağıdaki izne sahip kaynak ve hedef veritabanlarında özel rol:

    Microsoft.Sql/servers/databases/read Microsoft.Sql/servers/databases/write

Veritabanı kopyasını iptal etmek için aşağıdaki rollerde olmanız gerekir

  • Abonelik Sahibi veya

  • SQL Server Katkıda Bulunan rolü veya

  • Aşağıdaki izne sahip kaynak ve hedef veritabanlarında özel rol:

    Microsoft.Sql/servers/databases/read Microsoft.Sql/servers/databases/write

veritabanı kopyasını Azure portal kullanarak yönetmek için aşağıdaki izinlere de ihtiyacınız olacaktır:

Microsoft.Resources/subscriptions/resources/read Microsoft.Resources/subscriptions/resources/write Microsoft.Resources/deployments/read Microsoft.Resources/deployments/write Microsoft.Resources/deployments/operationstatuses/read

İşlemleri portaldaki kaynak grubundaki dağıtımlar altında, SQL işlemleri de dahil olmak üzere birden çok kaynak sağlayıcısındaki işlemleri görmek istiyorsanız, şu ek izinlere ihtiyacınız olacaktır:

Microsoft.Resources/subscriptions/resourcegroups/deployments/operations/read Microsoft.Resources/subscriptions/resourcegroups/deployments/operationstatuses/read

Oturum açma bilgilerini çözme

Yeni veritabanı hedef sunucuda çevrimiçi olduktan sonra, kullanıcıları yeni veritabanından hedef sunucuda oturum açma işlemlerine yeniden eşlemek için ALTER USER deyimini kullanın. Yalnız bırakılmış kullanıcıları çözmek için bkz. Yalnız Bırakılmış Kullanıcıların Sorunlarını Giderme. Ayrıca bkz. Olağanüstü durum kurtarma sonrasında Azure SQL Veritabanı güvenliğini yönetme.

Yeni veritabanındaki tüm kullanıcılar, kaynak veritabanında sahip oldukları izinleri korur. Veritabanı kopyasını başlatan kullanıcı, yeni veritabanının veritabanı sahibi olur. Kopyalama başarılı olduktan sonra ve diğer kullanıcılar yeniden eşlenmeden önce, yeni veritabanında yalnızca veritabanı sahibi oturum açabilir.

Veritabanını farklı bir sunucuya kopyalarken kullanıcıları ve oturum açma bilgilerini yönetme hakkında bilgi edinmek için bkz. Olağanüstü durum kurtarma sonrasında Azure SQL Veritabanı güvenliğini yönetme.

Veritabanı kopyalama hataları

Azure SQL Veritabanında bir veritabanı kopyalanırken aşağıdaki hatalarla karşılaşılabilir. Daha fazla bilgi için bkz. Azure SQL Veritabanını kopyalama.

Hata kodu Önem Derecesi Açıklama
40635 16 IP adresi '%.*ls' olan istemci geçici olarak devre dışı bırakıldı.
40637 16 Veritabanı kopyası oluşturma şu anda devre dışı.
40561 16 Veritabanı kopyalama başarısız oldu. Kaynak veya hedef veritabanı yok.
40562 16 Veritabanı kopyalama başarısız oldu. Kaynak veritabanı kaldırıldı.
40563 16 Veritabanı kopyalama başarısız oldu. Hedef veritabanı kaldırıldı.
40564 16 Veritabanı kopyalama bir iç hata nedeniyle başarısız oldu. Lütfen hedef veritabanını bırakın ve yeniden deneyin.
40565 16 Veritabanı kopyalama başarısız oldu. Aynı kaynaktan aynı anda en fazla 1 veritabanı kopyalama işlemi yapılabilir. Lütfen hedef veritabanını bırakın ve daha sonra yeniden deneyin.
40566 16 Veritabanı kopyalama bir iç hata nedeniyle başarısız oldu. Lütfen hedef veritabanını bırakın ve yeniden deneyin.
40567 16 Veritabanı kopyalama bir iç hata nedeniyle başarısız oldu. Lütfen hedef veritabanını bırakın ve yeniden deneyin.
40568 16 Veritabanı kopyalama başarısız oldu. Kaynak veritabanı kullanılamaz duruma geldi. Lütfen hedef veritabanını bırakın ve yeniden deneyin.
40569 16 Veritabanı kopyalama başarısız oldu. Hedef veritabanı kullanılamaz duruma geldi. Lütfen hedef veritabanını bırakın ve yeniden deneyin.
40570 16 Veritabanı kopyalama bir iç hata nedeniyle başarısız oldu. Lütfen hedef veritabanını bırakın ve daha sonra yeniden deneyin.
40571 16 Veritabanı kopyalama bir iç hata nedeniyle başarısız oldu. Lütfen hedef veritabanını bırakın ve daha sonra yeniden deneyin.

Sonraki adımlar