मेरे पास हमारे सॉफ़्टवेयर के डेमो के लिए डेटाबेस प्रबंधित करने के लिए उपयोग किया जाने वाला ऐप है, जो कुछ करता है वह केंद्रीय सर्वर से डेटाबेस की एक प्रति प्राप्त करता है और पुनर्स्थापित करता है यह एक स्थानीय एसक्यूएल उदाहरण के लिए। सबकुछ बैकअप भाग पर सही तरीके से काम करता है लेकिन पुनर्स्थापित करने पर कुछ लोग रिपोर्ट कर रहे हैं कि उन्हें पुनर्स्थापित के बीच में निम्नलिखित अपवाद मिलता है।SMO.Restore.SqlRestore कभी-कभी तैनात कंप्यूटर पर एक टाइमआउट अपवाद फेंकता है
Microsoft.SqlServer.Management.Smo.FailedOperationException: Restore failed for Server 'Computername'.
---> Microsoft.SqlServer.Management.Common.ExecutionFailureException:
An exception occurred while executing a Transact-SQL statement or batch.
---> System.Data.SqlClient.SqlException: Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.
at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)
(snip)
at Microsoft.SqlServer.Management.Common.ServerConnection.ExecuteNonQuery(String sqlCommand, ExecutionTypes executionType)
--- End of inner exception stack trace ---
at Microsoft.SqlServer.Management.Common.ServerConnection.ExecuteNonQuery(String sqlCommand, ExecutionTypes executionType)
(snip)
at Microsoft.SqlServer.Management.Smo.Restore.SqlRestore(Server srv)
--- End of inner exception stack trace ---
at Microsoft.SqlServer.Management.Smo.Restore.SqlRestore(Server srv)
at ContractFlowTool.WebInfinity2.AttachDatabase.RestoreLocal(AttachDatabaseArgs arg)
MSDN is fairly light एसएमओ वर्गों के भीतर काम कर रहे हैं। मुझे पुनर्स्थापना निष्पादित करने के लिए टाइमआउट समय बदलने के लिए कोई विधि नहीं मिली। मैं क्या कर सकता हूं ताकि अपवाद नहीं होगा?
यहाँ कोड बहाल
private static bool RestoreLocal(AttachDatabaseArgs arg)
{
if (arg.DestDatabase == null)
throw new ArgumentNullException("DestDatabase");
SqlConnectionInfo serverConnInfo = new SqlConnectionInfo(/*snip*/);
ServerConnection serverConn = null;
serverConn = new ServerConnection(serverConnInfo);
var remoteServer = new Server(serverConn);
var clinicFolder = ClinicFolder(arg);
var restore = new Restore();
restore.PercentCompleteNotification = 5;
restore.NoRecovery = false;
restore.RelocateFiles.Add(/*snip mdf*/);
restore.RelocateFiles.Add(/*snip ldf*/);
restore.Database = arg.LocalDB;
restore.ReplaceDatabase = true;
restore.Action = RestoreActionType.Database;
restore.PercentComplete += arg.ProgressForm.Restore_PercentComplete;
restore.SqlRestore(remoteServer);
}
आप कर सकते हैं Reprod यह व्यक्तिगत रूप से है? डेटाबेस आकार एक कारक है? क्या कोई वास्तव में विशाल बाइनरी फ़ील्ड हैं जो इसका कारण बन सकती हैं? क्या समय-सारिणी लगातार समय अवधि के बाद होती है? यदि आप वास्तव में अटक गए हैं, तो हो सकता है कि आप रिफ्लेक्टर का उपयोग करके वास्तविक असेंबली में खुदाई कर सकें, यह देखने के लिए कि वे कैसे काम करते हैं (और इसे प्रतिलिपि बनाते हुए, संभवतः प्रतिबिंब (निजी/आंतरिक सदस्यों को पाने के लिए), उच्च समय के साथ)। क्या आपने [यह] देखा है (http://stackoverflow.com/q/5979086/21475)? – Cameron