Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
JDBC sürücüsünü indirin
Veritabanı yansıtma öncelikle veritabanı kullanılabilirliğini ve veri yedekliliğini artırmaya yönelik bir yazılım çözümüdür. SQL Server için Microsoft JDBC Sürücüsü, veritabanı yansıtması için otomatik destek sağlar, böylece geliştiricinin veritabanı yapılandırıldığında herhangi bir kod yazması veya başka bir işlem gerçekleştirmesi gerekmez.
Her veritabanı için uygulanan veritabanı yansıtması, yedek sunucuda SQL Server üretim veritabanının bir kopyasını tutar. Bu sunucu, veritabanı yansıtma oturumunun yapılandırmasına ve durumuna bağlı olarak etkin veya sıcak bir hazır bekleyen sunucudur. Etkin bekleme sunucusu, işlenen işlem kaybı olmadan hızlı yük devretmeyi destekler. Sıcak bekleme sunucusu, hizmeti zorlamayı destekler (olası veri kaybıyla).
Üretim veritabanına asıl veritabanı, hazır bekleyen kopya ise yansıtma veritabanı olarak adlandırılır. Asıl veritabanı ve yansıtma veritabanı ayrı SQL Server örneklerinde (sunucu örnekleri) olmalıdır. Mümkünse ayrı bilgisayarlarda bulunmalıdır.
Üretim sunucusu örneği (asıl sunucu), hazır bekleyen sunucu örneğiyle (yansıtma sunucusu) iletişim kurar. Ana ve ayna sunucular, veritabanı yansıtma oturumunda iş ortağı olarak davranırlar. Ana sunucu arızalanırsa, ayna sunucusu yük devretme adı verilen bir işlemle veritabanını ana veritabanı yapabilir. Örneğin, Partner_A ve Partner_B, asıl veritabanı başlangıçta Partner_A'nın asıl sunucu olarak ve yansıtma veritabanı Partner_B'nin yansıtma sunucusu olarak bulunduğu iki iş ortağı sunucudur. Partner_A çevrimdışı olursa, Partner_B üzerindeki veritabanı geçerli ana veritabanı olarak devreye girebilir. Partner_A yansıtma oturumuna yeniden katılırsa yansıtma sunucusu, veritabanı da yansıtma veritabanı olur.
Partner_A sunucu onarılamaz şekilde zarar görürse, Partner_C sunucusu, artık asıl sunucu olan Partner_B için yansıtma sunucusu olarak görev yapmak üzere çevrimiçi hale getirilebilir. Ancak bu senaryoda, bağlantı dizesi özelliklerinin veritabanı yansıtma yapılandırmasında kullanılan yeni sunucu adlarıyla güncelleştirildiğinden emin olmak için istemci uygulamasının programlama mantığını içermesi gerekir. Aksi takdirde, sunuculara bağlantı başarısız olabilir.
Alternatif veritabanı yansıtma yapılandırmaları farklı performans ve veri güvenliği düzeyleri sunar ve farklı yük devretme biçimlerini destekler. Daha fazla bilgi için bkz. SQL Server Books Online'da "Veritabanı Yansıtmaya Genel Bakış".
Programlamayla ilgili dikkat edilmesi gerekenler
Asıl veritabanı sunucusu başarısız olduğunda, istemci uygulaması API çağrılarına yanıt olarak hatalar alır ve bu da veritabanı bağlantısının kaybolduğunu gösterir. Bu hatalar oluştuğunda, veritabanındaki kaydedilmemiş değişiklikler kaybolur ve geçerli işlem geri alınır. Bu senaryoda, uygulamanın bağlantıyı kapatması (veya veri kaynağı nesnesini serbest bırakması) ve yeniden açmayı denemesi gerekir. Bağlantıda, istemcinin bağlantı dizesini veya veri kaynağı nesnesini değiştirmek zorunda kalmadan, yeni bağlantı saydam bir şekilde asıl sunucu işlevi gören yansıtma veritabanına yönlendirilir.
Başlangıçta bir bağlantı kurulduğunda, asıl sunucu yük devretme gerçekleştiğinde kullanılacak olan istemciye yük devretme ortağının kimliğini gönderir. Bir uygulama başarısız bir asıl sunucuyla ilk bağlantı kurmaya çalıştığında, istemci yük devretme ortağının kimliğini bilmez. İstemcilere bu senaryoyla başa çıkma fırsatı vermek için, failoverPartner bağlantı dizesi özelliği ve isteğe bağlı olarak setFailoverPartner veri kaynağı yöntemi, istemcinin yük devretme ortağının kimliğini kendi başına belirtmesine olanak tanır. İstemci özelliği yalnızca bu senaryoda kullanılır; asıl sunucu kullanılabilir durumdaysa kullanılmaz.
Uyarı
Bağlantı dizesinde veya veri kaynağı nesnesiyle bir failoverPartner belirtildiğinde, databaseName özelliğinin de ayarlanması gerekir; aksi takdirde bir istisna oluşturulacaktır. FailoverPartner ve databaseName açıkça belirtilmezse, asıl veritabanı sunucusu başarısız olduğunda uygulama yük devretmeyi denemez. Başka bir deyişle, şeffaf yönlendirme yalnızca açıkça yük devretme ortağı ve veritabanı adı belirten bağlantılar için çalışır. failoverPartner ve diğer bağlantı dizesi özellikleri hakkında daha fazla bilgi için bkz . Bağlantı özelliklerini ayarlama.
İstemci tarafından sağlanan yük devretme iş ortağı sunucusu, belirtilen veritabanı için yük devretme ortağı olarak davranan bir sunucuya başvurmuyorsa ve başvuruda bulunılan sunucu/veritabanı yansıtılmış bir düzenlemedeyse, bağlantı sunucu tarafından reddedilir. SQLServerDataSource sınıfı getFailoverPartner yöntemini sağlasa da, bu yöntem yalnızca bağlantı dizesinde veya setFailoverPartner yönteminde belirtilen yük devretme ortağının adını döndürür. Kullanılmakta olan gerçek yük devretme ortağının adını almak için aşağıdaki Transact-SQL deyimini kullanın:
SELECT m.mirroring_role_DESC, m.mirroring_state_DESC,
m.mirroring_partner_instance FROM sys.databases as db,
sys.database_mirroring AS m WHERE db.name = 'MirroringDBName'
AND db.database_id = m.database_id
Uyarı
Yansıtma veritabanınızın adını kullanmak için bu deyimi değiştirmeniz gerekir.
Bağlantı dizesini güncelleştirmek veya ilk bağlantı girişiminin başarısız olması durumunda yeniden deneme stratejisi oluşturmak için iş ortağı bilgilerini önbelleğe almayı göz önünde bulundurun.
Example
Aşağıdaki örnekte, ilk olarak ilke sunucusuna bağlanma girişiminde bulunulmaya çalışılır. Bu başarısız olursa ve bir istisna fırlatılırsa, yansıtma sunucusuna bağlanmayı deneyerek, bu sunucu, yeni birincil sunucu olarak terfi ettirilmiş olabilir. Bağlantı dizesinde failoverPartner özelliğinin kullanımına dikkat edin.
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
public class ClientFailover {
public static void main(String[] args) {
String connectionUrl = "jdbc:sqlserver://serverA:1433;"
+ "encrypt=true;databaseName=AdventureWorks;integratedSecurity=true;"
+ "failoverPartner=serverB";
// Establish the connection to the principal server.
try (Connection con = DriverManager.getConnection(connectionUrl);
Statement stmt = con.createStatement();) {
System.out.println("Connected to the principal server.");
// Note that if a failover of serverA occurs here, then an
// exception will be thrown and the failover partner will
// be used in the first catch block below.
// Execute a SQL statement that inserts some data.
// Note that the following statement assumes that the
// TestTable table has been created in the AdventureWorks
// sample database.
stmt.executeUpdate("INSERT INTO TestTable (Col2, Col3) VALUES ('a', 10)");
}
catch (SQLException se) {
System.out.println("Connection to principal server failed, " + "trying the mirror server.");
// The connection to the principal server failed,
// try the mirror server which may now be the new
// principal server.
try (Connection con = DriverManager.getConnection(connectionUrl);
Statement stmt = con.createStatement();) {
System.out.println("Connected to the new principal server.");
stmt.executeUpdate("INSERT INTO TestTable (Col2, Col3) VALUES ('a', 10)");
}
// Handle any errors that may have occurred.
catch (SQLException e) {
e.printStackTrace();
}
}
}
}