C3P0 ve MS SQL JDBC 4 sürücüsünü kullanarak veritabanım kaybolduğunda otomatik olarak yeni bir veritabanı yansımasına geçiyorum. İlk önce ana DB'ye bağlanırsa, yük devretme çalışır ve ayna DB'ye sorunsuzca geçer. Ancak, uygulama başladığında asıl DB aşağı ve yansıtma DB (MSSQL Studio ile test edilen) bağlanmak için kullanılabilirse, uygulama başlatılamaz ve yedekleme yansıtma bağlanmak için başarısız olur. Ben c3p0.testConnectionOnCheckout
ve c3p0.preferredTestQuery
setine sahipMSSQL JDBC sürücüsü yansıtma başarısızlığına bağlanmaz İlk bağda yer alanPartner
jdbc:sqlserver://PRINCIPALDB;databaseName=app_space;port=99999;failoverPartner=MIRRORDB
ve c3p0.acquireRetryAttempts
(30 varsayılan kullanarak) ayarlı DEĞİL: İşte
Niçin devre dışı kaldığında, başlangıçta DB'ye bağlanmıyor? Buna ihtiyacımız var çünkü güç kesildiyse veya bir şey ve temel DB kapalıysa ve uygulama sunucusunun geri dönüşüme ihtiyacı varsa, yük devretme yardım etmeyecektir.
Referans:
http://www.mchange.com/projects/c3p0/#configuring_recovery
Using Database Mirroring (JDBC) (! MSDN URL'lerinde çıkış kullanılmamış parantez kullanır) İşte http://msdn.microsoft.com/en-US/library/aa342332(v=sql.90)
uygulamasından bazı kayıtları.
Ve bazen bir kilitlenme uyarısıyla birlikte verdiği farklı bir hata türüdür.
jdbc:sqlserver://PRINCIPALDB:9999;databaseName=APP_space;portNumber=9999;failoverPartner=MIRRORDB:9999
ve ben belirtilenden farklı bir port çalışıyordu gibi, bu istisna:
<14>[APP]: INFO 20 Jul 2012 18:05:43,049 [main] net.sf.hibernate.connection.C3P0ConnectionProvider "C3P0 using driver: com.microsoft.sqlserver.jdbc.SQLServerDriver at URL: jdbc:sqlserver://PRINCIPALDB:9999;databaseName=APP_space;failoverPartner=MIRRORDB:9999"
<14>[APP]: INFO 20 Jul 2012 18:05:43,049 [main] net.sf.hibernate.connection.C3P0ConnectionProvider "Connection properties: {user=USERNAME, password=PASSWORD}"
<14>[APP]: INFO 20 Jul 2012 18:05:43,190 [main] com.mchange.v2.log.MLog "MLog clients using log4j logging."
<14>[APP]: INFO 20 Jul 2012 18:05:43,518 [main] com.mchange.v2.c3p0.C3P0Registry "Initializing c3p0-0.9.1.2 [built 21-May-2007 15:04:56; debug? true; trace: 10]"
<14>[APP]: INFO 20 Jul 2012 18:05:43,612 [main] net.sf.hibernate.transaction.TransactionFactoryFactory "Transaction strategy: net.sf.hibernate.transaction.JDBCTransactionFactory"
<14>[APP]: INFO 20 Jul 2012 18:05:43,612 [main] net.sf.hibernate.transaction.TransactionManagerLookupFactory "No TransactionManagerLookup configured (in JTA environment, use of process level read-write cache is not recommended)"
<14>[APP]: INFO 20 Jul 2012 18:05:43,658 [main] com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource "Initializing c3p0 pool... [email protected] [ connectionPoolDataSource -> [email protected] [ acquireIncrement -> 5, acquireRetryAttempts -> 30, acquireRetryDelay -> 1000, autoCommitOnClose -> false, automaticTestTable -> null, breakAfterAcquireFailure -> false, checkoutTimeout -> 0, connectionCustomizerClassName -> null, connectionTesterClassName -> com.mchange.v2.c3p0.impl.DefaultConnectionTester, debugUnreturnedConnectionStackTraces -> false, factoryClassLocation -> null, forceIgnoreUnresolvedTransactions -> false, identityToken -> 1bqq23w8o1a6dec41cwe1cd|20e1bfee, idleConnectionTestPeriod -> 100, initialPoolSize -> 10, maxAdministrativeTaskTime -> 0, maxConnectionAge -> 0, maxI...
<14>...dleTime -> 3600, maxIdleTimeExcessConnections -> 0, maxPoolSize -> 150, maxStatements -> 1000, maxStatementsPerConnection -> 0, minPoolSize -> 10, nestedDataSource -> [email protected] [ description -> null, driverClass -> null, factoryClassLocation -> null, identityToken -> 1bqq23w8o1a6dec41cwe1cd|20360e46, jdbcUrl -> jdbc:sqlserver://PRINCIPALDB:9999;databaseName=APP_space;failoverPartner=MIRRORDB:9999, properties -> {user=******, password=******} ], preferredTestQuery -> select * from CLUSTERSAFETY, propertyCycle -> 0, testConnectionOnCheckin -> false, testConnectionOnCheckout -> false, unreturnedConnectionTimeout -> 0, usesTraditionalReflectiveProxies -> false; userOverrides: {} ], dataSourceName -> null, factoryClassLocation -> null, identityToken -> 1bqq23w8o1a6dec41cwe1cd|6f3e49a8, numHelperThreads -> 3 ]"
<12>[APP]: WARN 20 Jul 2012 18:06:03,644 [Timer-0] com.mchange.v2.async.ThreadPoolAsynchronousRunner "com[email protected]37f844f7 -- APPARENT DEADLOCK!!! Creating emergency threads for unassigned pending tasks!"
<12>[APP]: WARN 20 Jul 2012 18:06:03,644 [Timer-0] com.mchange.v2.async.ThreadPoolAsynchronousRunner "com[email protected]37f844f7 -- APPARENT DEADLOCK!!! Complete Status:
Managed Threads: 3
Active Threads: 3
Active Tasks:
[email protected]59 (com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#0)
[email protected]5b (com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#1)
[email protected]cc (com.mchange.v2.asyn...
<12>...c.ThreadPoolAsynchronousRunner$PoolThread-#2)
Pending Tasks:
Ben bu bağlantıyla belgelerinden bir test programı koştu!
Belirttiğim bağlantı noktası yerine bağlantı noktası 1433'e bağlanmaya çalıştığı için önemli bir nokta, birçok farklı yol.
Tamam deneyecek. Evet, ayna aktif oldu, ona bağlı olduğumdan ve DBA bunu aktif hale getirdi ve bir tanıkla otomatik olarak ayarlandı. ÖrnekAdı deneyecek. Yük devretme için yalnızca 1433 numaralı bağlantı noktasına bağlanılıyor gibi görünüyor, bu da yüksek kullanılabilirlik için oldukça bozuk olmasını sağlar. – Chloe
Maalesef bunu test edemiyorum. Ana ve ayna farklı örnek isimleri, \ SQLA ve \ SQLB kullanır. Üretimde aynı örnek adını kullanıyorlar, ancak ben orada test edemiyorum. – Chloe
Oh evet, yine de ayna modundaysa aynaya bağlanamazsınız. Çevrimiçi hale geldikten ve müdür olduktan sonra bağlanabiliyorsunuz, ancak eski müdür "çevrimdışı" oluyor ve bağlanamıyorsunuz. – Chloe