Aracılığıyla paylaş


Azure SQL Veritabanı'da 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ı Azure SQL Veritabanı mantıksal sunucusunda veya farklı bir mantıksal 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 Transact-SQL kullanarak kopyalayabilirsiniz.

Not

Microsoft Entra Id daha önce Azure Active Directory (Azure AD) olarak biliniyordu.

Genel bakış

Veritabanı kopyası, kopyalama isteğinin başlatıldığı noktada kaynak veritabanının işlem açısından tutarlı bir anlık görüntüsüdür. Kopya için aynı mantıksal sunucuyu veya farklı bir mantıksal sunucuyu seçebilirsiniz. Ayrıca, kaynak veritabanının yedek yedekliliğini ve işlem boyutunu korumayı seçebilir veya aynı hizmet katmanında farklı bir yedekleme depolama yedekliliği ve/veya işlem boyutu kullanabilirsiniz. Standart hizmet katmanındaki bir veritabanını Standart veya Genel Amaçlı katmanına ve Premium hizmet katmanındaki bir veritabanını Premium veya İş Açısından Kritik katmanına kopyalamak da mümkündür.

Kopyalama tamamlandıktan sonra yeni veritabanı, kaynak veritabanına tamamen işlevsel ve bağımsız bir veritabanıdır. 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ış .

Not

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

Hiper Ölçek veritabanları için veritabanı kopyası

Hiper Ölçek hizmet katmanındaki veritabanları için hedef veritabanı, kopyanın hızlı bir kopya mı yoksa veri boyutu kopyası mı olduğunu belirler:

  • Hızlı kopyalama: Kopya kaynakla aynı bölgede yapıldığı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 boyutu işlemidir. Sayfa sunucusu blobları paralel olarak kopyalandığından, kopyalama süresi boyutla doğrudan orantılı değildir.

Veritabanı kopyasında oturum açma bilgileri

Bir veritabanını aynı mantıksal 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 mantıksal sunucuya kopyaladığınızda, hedef mantıksal sunucuda kopyalama işlemini başlatan güvenlik sorumlusu yeni veritabanının sahibi olur.

Hedef sunucudan bağımsız olarak tüm veritabanı kullanıcıları, izinler ve güvenlik tanımlayıcıları (SID) veritabanı kopyasına kopyalanır. Veri erişimi için kapsanan 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 buna 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. Bunun nedeni, oturum açma bilgilerinin hedef mantıksal sunucuda mevcut olmaması veya bu parolaların ve 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 daha fazla bilgi için bkz. coğrafi geri yükleme veya yük devretme için Azure SQL Veritabanı güvenliğini yapılandırma ve yönetme. Farklı bir mantıksal 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 çözmek ve veri erişimi oluşturmak için bkz . Oturum açma bilgilerini çözme.

Veritabanı kopyalama

PowerShell, Azure CLI ve Transact-SQL (T-SQL) kullanarak veritabanını kopyalayabilirsiniz.

Azure portalını kullanarak veritabanını kopyalamak için veritabanınızın sayfasını açın ve kopyala'yı seçerek SQL Veritabanı Oluştur - Veritabanı kopyala sayfasını açın. Veritabanınızı kopyalamak istediğiniz hedef mantıksal sunucunun değerlerini doldurun.

Veritabanı genel bakış sayfasında Veritabanı kopyalama seçeneğinin vurgulandığı Azure portalının ekran görüntüsü.

veritabanını Transact-SQL ile kopyalama

sunucu yöneticisi oturum açma bilgileriyle veya kopyalamak istediğiniz veritabanını oluşturan oturum açma bilgileriyle master veritabanında oturum açın. Veritabanı kopyalama işleminin başarılı olması için, sunucu yöneticisi olmayan oturum açma işlemlerinin dbmanager rolünün üyesi olması gerekir. Oturum açma işlemleri ve mantıksal sunucuya bağlanma hakkında daha fazla bilgi için bkz. Veritabanı erişimini yetkilendirme.

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

Bu bölümde aşağıdaki işlemler için Transact-SQL komutları sağlanır:

Not

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

Aynı mantıksal sunucuya kopyalama

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

Bu komut, Database1 aynı mantıksal 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 bilgileriyle veya kopyalamak istediğiniz veritabanını oluşturan oturum açma bilgileriyle master veritabanında oturum açın. Veritabanı kopyalama işleminin başarılı olması için sunucu yöneticisi olmayan oturum açma işlemlerinin dbmanager rolünün üyesi olması gerekir.

Bu komut pool1 adlı elastik havuzda adlı Database1 yeni bir veritabanına kopyalanırDatabase2. Veritabanınızın boyutuna bağlı olarak kopyalama işleminin tamamlanması biraz zaman alabilir.

Database1 tek veya havuza alınan bir veritabanı olabilir. Farklı katman havuzları arasında kopyalama desteklenir, ancak bazı çapraz katman kopyaları başarısız olur. Örneğin, tek veya elastik standart bir veritabanını Genel Amaçlı havuza 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 mantıksal sunucuya kopyalama

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

Bu komut, Database1server1 üzerindeki yeni bir Database2 adlı veritabanına server2üzerinde kopyalar. Veritabanınızın boyutuna bağlı olarak kopyalama işleminin tamamlanması biraz zaman alabilir.

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

Önemli

Her iki mantıksal sunucu güvenlik duvarı da T-SQL CREATE DATABASE ... AS COPY OF komutunu veren istemcinin IP'sinden gelen bağlantıya izin verecek şekilde yapılandırılmalıdır. Geçerli bağlantının kaynak IP adresini belirlemek için şunu yürüt: SELECT client_net_address FROM sys.dm_exec_connections WHERE session_id = @@SPID;

Not

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

Benzer şekilde, aşağıdaki komut, zaten Database1 üzerinde bulunan server1'ı, Database2üzerindeki pool2adlı elastik havuzda yer alan server2 adlı yeni bir veritabanına kopyalar.

-- Execute on the master database of the target logical 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

T-SQL kullanarak veritabanınızı farklı bir abonelikteki mantıksal sunucuya kopyalamak için SQL Veritabanını farklı bir mantıksal 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 işleminin hem kaynak hem de hedef mantıksal sunucularda dbmanager rolünün veya sunucu yöneticisinin üyesi olması gerekir.

İpucu

Aynı Microsoft Entra Id kiracısındaki veritabanlarını kopyalarken, kopyalama komutunu her iki mantıksal sunucuda da yeterli erişime sahip bir kimlik doğrulama oturumu kullanarak başlatırsanız kaynak ve hedef mantıksal sunucularda yetkilendirme basitleştirilir. Gerekli en düşük erişim düzeyi, her iki mantıksal sunucudaki veritabanındaki master rolü üyeliğidir. Örneğin, her iki mantıksal sunucuda da sunucu yöneticisi olarak belirlenen bir grubun üyesi olan bir Microsoft Entra Id oturum açma bilgilerini kullanabilirsiniz.

Aşağıdaki betiklerde, kopyalanacak oturum açma adı loginname.

İlk olarak, kaynak mantıksal sunucunun master veritabanına bağlanın. Kaynak Azure SQL Veritabanı mantıksal sunucusunun master veritabanında oturum açma ve kullanıcı oluşturun.

--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

Kaynak kullanıcı veritabanına bağlanın. Ardından, kaynak kullanıcı veritabanında kullanıcıyı kaynak veritabanında oluşturun ve veritabanındaki dbowner veritabanı rolüne ekleyin.

--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

Ardından, kaynak mantıksal sunucunun loginname veritabanından kullanıcı master güvenlik tanımlayıcısını (SID) bulun.

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

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

Yeni veya hedef mantıksal sunucunun master veritabanında bir sonraki betiği çalıştırın. İlk olarak, hedef mantıksal sunucunun master veritabanında bir oturum açma ve kullanıcı oluşturun ve bunu dbmanager sunucu rolüne ekleyin. Bir <strong password>verin ve <SID of loginname login on source server>'i kaynak mantıksal sunucudaki SID ile değiştirin.

--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 = '<strong password>', 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

Hedef mantıksal sunucunun master veritabanında yeni veritabanını oluşturun. new_database_name istediğiniz adla değiştirin. source_server_name ve source_database_name değerini kaynağın adlarıyla değiştirin.

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

CREATE DATABASE new_database_name
AS COPY OF source_server_name.source_database_name;

İpucu

Veritabanını farklı bir Azure kiracısında bulunan bir abonelikten kopyalamak yalnızca hedef mantıksal sunucuda oturum açmak için T-SQL ve SQL kimlik doğrulaması oturum açma bilgileri kullanılırken desteklenir. Azure SQLiçin Microsoft Entra kimlik doğrulaması, farklı bir Azure kiracısındaki mantıksal sunucuda veritabanı kopyasının oluşturulmasını desteklemez.

Kopyalama işleminin ilerleme durumunu izleme

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

  • Kopyalama başarısız olursa, state_desc yeni veritabanı için görünümün sys.databases sütunu olarak SUSPECTayarlanır. Drop deyimini yeni veritabanında yürütün ve daha sonra yeniden deneyin.
  • Kopyalama başarılı olursa, state_desc yeni veritabanı için görünümün sys.databases sütunu olarak ONLINEayarlanı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 hedefine 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 mantıksal 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ı kurtarma.

İzinler

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 izinlere sahip kaynak mantıksal sunucuda özel rol:
    • Microsoft.Sql/servers/databases/read
    • Microsoft.Sql/servers/databases/write ve
  • Aşağıdaki izinlere sahip hedef mantıksal sunucuda özel rol:
    • Microsoft.Sql/servers/read
    • 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
  • Hedef veritabanında aşağıdaki izinlere sahip özel rol:
    • Microsoft.Sql/servers/databases/delete

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

  • Microsoft.Resources/subscriptions/resources/read
  • 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 vardır:

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

Oturum açma bilgilerini çözme

Yeni veritabanı hedef mantıksal sunucuda çevrimiçi olduktan sonra, kullanıcıları yeni veritabanından hedef mantıksal sunucuda oturum açma işlemleriyle 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. Coğrafi geri yükleme veya yük devretmeiçin Azure SQL Veritabanı güvenliğini yapılandırma ve 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 mantıksal sunucuya kopyalarken kullanıcıları ve oturum açma bilgilerini yönetme hakkında bilgi edinmek için bkz. coğrafi geri yükleme veya yük devretmeiçin Azure SQL Veritabanı güvenliğini yapılandırma ve yönetme .

Veritabanı kopyalama hataları

Azure SQL Veritabanı'nda veritabanı kopyalanırken aşağıdaki hatalar oluşabilir. Daha fazla bilgi için bkz. Azure SQL Veritabanıveritabanının işlem açısından tutarlı bir kopyasını kopyalama.

Hata kodu Önem Derecesi Açıklama
40635 16 "%.*ls" IP adresine sahip 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ıp 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ıp yeniden deneyin.
40567 16 Veritabanı kopyalama bir iç hata nedeniyle başarısız oldu. Lütfen hedef veritabanını bırakıp yeniden deneyin.
40568 16 Veritabanı kopyalama başarısız oldu. Kaynak veritabanı kullanılamaz duruma geldi. Lütfen hedef veritabanını bırakıp yeniden deneyin.
40569 16 Veritabanı kopyalama başarısız oldu. Hedef veritabanı kullanılamaz duruma geldi. Lütfen hedef veritabanını bırakıp 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.