sql server - MSSQL JDBC ड्राइवर पहले कनेक्ट पर आईरर फेलओवर पार्टनर से कनेक्ट नहीं करेगा




sql-server c3p0 (2)

एसक्यूएल सर्वर जेडीबीसी ड्राइवर दस्तावेज में निम्नलिखित (भ्रामक) अस्वीकरण है:

नोट ड्राइवर स्ट्रिंग में failoverPartner गुण के भाग के रूप में फेलओवर पार्टनर इंस्टेंस के लिए सर्वर इंस्टेंस पोर्ट नंबर निर्दिष्ट करने का समर्थन नहीं करता है। हालांकि, सर्वर नाम, instanceName और portNumber प्रॉपर्टी को प्रिंसिपल सर्वर आवृत्ति और failoverPartner गुण निर्दिष्ट करने के लिए समान कनेक्शन स्ट्रिंग में विफलता पार्टनर उदाहरण का समर्थन करता है।

इस से मैं जोड़ने का सुझाव देता हूँ: serverName = PRINCIPALDB; उदाहरणनाम = मेरा अंतर संपत्तियों और देखें कि क्या यह काम करता है

आप उल्लेख करते हैं कि फेलओवर सक्रिय है ध्यान दें कि कुछ एसक्यूएल सर्वर मिरर विन्यास के लिए एक फेलओवर स्वचालित नहीं है। आप यह सत्यापित कर सकते हैं कि आप अपने एमआईआरआरबीडीबी से jdbc का उपयोग कर कनेक्ट कर सकते हैं:

jdbc:sqlserver://MIRRORDB;databaseName=app_space;port=9999;

जब डेटाबेस दूर हो जाता है तो मैं सी 3 पी 0 और एमएस एसक्यूएल जेडीबीसी 4 ड्राइवर का उपयोग एक नए डाटाबेस मिरर में स्वचालित रूप से विफल करने के लिए कर रहा हूँ। यदि यह पहली बार प्रिंसिपल डीबी से जुड़ता है, तो फेलओवर काम करता है और यह आईना डीबी के साथ मूल रूप से स्विच करता है हालांकि, यदि अनुप्रयोग प्रारंभ होने पर प्रिंसिपल डीबी कम हो जाता है, और दर्पण डीबी कनेक्ट करने के लिए उपलब्ध है (एमएसएसक्यूएल स्टूडियो के साथ परीक्षण किया गया है), तो अनुप्रयोग शुरू करने में विफल रहता है और बैकअप दर्पण से कनेक्ट करने में विफल रहता है।

यहां कनेक्शन यूआरएल है:

jdbc:sqlserver://PRINCIPALDB;databaseName=app_space;port=99999;failoverPartner=MIRRORDB

मेरे पास c3p0.testConnectionOnCheckout और c3p0.preferredTestQuery सेट है, और c3p0.acquireRetryAttempts सेट नहीं है (30 का डिफ़ॉल्ट उपयोग करना)

क्यों प्रिंसिपल नीचे है जब यह शुरू में दर्पण डीबी से कनेक्ट नहीं करेगा? हमें इसकी आवश्यकता है क्योंकि अगर बिजली कम हो जाती है या कुछ और मुख्य डीबी नीचे है, और एप सर्वर को रीसाइक्लिंग की आवश्यकता है, तो फेलओवर मदद नहीं करेगा।

संदर्भ:

http://www.mchange.com/projects/c3p0/#configuring_recovery

डेटाबेस मिररिंग (जेडीबीसी) का उपयोग करना (एमएसडीएन अपने यूआरएल में अपरिभाषित कोष्ठक का उपयोग करता है!) Http://msdn.microsoft.com/en-US/library/aa342332(v=sql.90)

यहां ऐप से कुछ लॉग हैं

<14>[APP]: INFO 20 Jul 2012 12:21:21,982 [main] net.sf.hibernate.connection.C3P0ConnectionProvider "C3P0 using driver: com.microsoft.sqlserver.jdbc.SQLServerDriver at URL: jdbc:sqlserver://PRINCIPAL;databaseName=APP_space;port=9999;failoverPartner=MIRRORDB"    
<14>[APP]: INFO 20 Jul 2012 12:21:21,982 [main] net.sf.hibernate.connection.C3P0ConnectionProvider "Connection properties: {user=USERNAME, password=PASSWORD}"    
<14>[APP]: INFO 20 Jul 2012 12:21:22,435 [main] net.sf.hibernate.transaction.TransactionFactoryFactory "Transaction strategy: net.sf.hibernate.transaction.JDBCTransactionFactory"
<14>[APP]: INFO 20 Jul 2012 12:21:22,450 [main] net.sf.hibernate.transaction.TransactionManagerLookupFactory "No TransactionManagerLookup configured (in JTA environment, use of process level read-write cache is not recommended)"    
<12>[APP]: WARN 20 Jul 2012 12:29:17,279 [main] net.sf.hibernate.cfg.SettingsFactory "Could not obtain connection metadata"    
<12>java.sql.SQLException: Connections could not be acquired from the underlying database! 
<12>    at com.mchange.v2.sql.SqlUtils.toSQLException(SqlUtils.java:106) 
<12>    at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool.checkoutPooledConnection(C3P0PooledConnectionPool.java:529) 
<12>    at com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource.getConnection(AbstractPoolBackedDataSource.java:128) 
<12>    at net.sf.hibernate.connection.C3P0ConnectionProvider.getConnection(C3P0ConnectionProvider.java:33) 
<12>    at net.sf.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:84)

और ये एक अलग प्रकार की त्रुटि है जो कभी-कभी एक गतिरोध चेतावनी के साथ देता है

<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.mchange.v2.async.ThreadPoolAsynchronousRunner$DeadlockDetector@37f844f7 -- APPARENT DEADLOCK!!! Complete Status: 
    Managed Threads: 3
    Active Threads: 3
    Active Tasks: 
        com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@52783859 (com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#0)
        com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@52bb855b (com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#1)
        com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@153043cc (com.mchange.v2.asyn...
<12>...c.ThreadPoolAsynchronousRunner$PoolThread-#2)
    Pending Tasks: 

मैं इस कनेक्शन के साथ दस्तावेज से एक परीक्षण कार्यक्रम चलाया:

jdbc:sqlserver://PRINCIPALDB:9999;databaseName=APP_space;portNumber=9999;failoverPartner=MIRRORDB:9999

और यह इस अपवाद को फेंक देता है, जैसे कि मैं निर्दिष्ट से अलग पोर्ट की कोशिश कर रहा था!

Connection to principal server failed, trying the mirror server.
com.microsoft.sqlserver.jdbc.SQLServerException: The TCP/IP connection to the host MIRRORDB:9999, port 1433 has failed. Error: "null. Verify the connection properties. Make sure that an instance of SQL Server is running on the host and accepting TCP/IP connections at the port. Make sure that TCP connections to the port are not blocked by a firewall.".
    at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(SQLServerException.java:190)

महत्वपूर्ण बिंदु यह है कि मैंने पोर्ट निर्दिष्ट करने के बजाय पोर्ट 1433 से कनेक्ट करने की कोशिश की, कई अलग-अलग तरीके


मुझे जवाब मिल गया! आपको मेजबान नाम के एक भाग के रूप में इंस्टेंस नाम निर्दिष्ट करना होगा! उदाहरण:

jdbc:sqlserver://DEVSQLB\SQLB;databaseName=db_space;portNumber=99999;failoverPartner=BACKUPSQLA\SQLA

जहां \SQLA एक उदाहरण का नाम है! मुझे बिल्कुल यकीन नहीं है कि एक उदाहरण क्या है, लेकिन मैंने इसे SQL सर्वर में कई बार भेजा है। इस गोपनीय जानकारी को खोजने के लिए, मैं (मेरी कंपनी) को माइक्रोसॉफ्ट से सीधे समर्थन का अनुरोध करना पड़ा।

ओह, भूल गया:

  • आप "सर्वर \ example_name" प्रारूप का उपयोग करके इस समस्या को ठीक कर सकते हैं और सुनिश्चित कर सकते हैं कि ब्राउज़र सेवा चल रही है और स्वचालित मोड में है।




c3p0