से डेटाबेस को पुनर्स्थापित कैसे करें मेरे पास एक SQL 2008 डीबी है। मैं एक ऐसा फॉर्म चला रहा हूं जो डीबी को पीछे रखता है, फिर इसे अपडेट करने का प्रयास करता है। यदि अपडेट विफल रहता है तो विचार उस बैकअप को पुनर्स्थापित करना है। यहां वह कोड है जिसका उपयोग मैं बैकअप को पुनर्स्थापित करने के लिए कर रहा हूं।सी #
public void RestoreDatabase(String databaseName, String backUpFile, String serverName, String userName, String password)
{
Restore sqlRestore = new Restore();
BackupDeviceItem deviceItem = new BackupDeviceItem(backUpFile, DeviceType.File);
sqlRestore.Devices.Add(deviceItem);
sqlRestore.Database = databaseName;
ServerConnection connection = new ServerConnection(serverName, userName, password);
Server sqlServer = new Server(connection);
sqlRestore.Action = RestoreActionType.Database;
string logFile = System.IO.Path.GetDirectoryName(backUpFile);
logFile = System.IO.Path.Combine(logFile, databaseName + "_Log.ldf");
string dataFile = System.IO.Path.GetDirectoryName(backUpFile);
dataFile = System.IO.Path.Combine(dataFile, databaseName + ".mdf");
Database db = sqlServer.Databases[databaseName];
RelocateFile rf = new RelocateFile(databaseName, dataFile);
sqlRestore.RelocateFiles.Add(new RelocateFile(databaseName, dataFile));
sqlRestore.RelocateFiles.Add(new RelocateFile(databaseName + "_log", logFile));
sqlRestore.SqlRestore(sqlServer);
db = sqlServer.Databases[databaseName];
db.SetOnline();
sqlServer.Refresh();
}
ऐसा लगता है कि मेरे द्वारा चुने गए फ़ाइल नाम ऑनलाइन डीबी से अलग हैं। मैं मूल रूप से बैकअप के साथ सर्वर पर डेटाबेस को प्रतिस्थापित करना चाहता हूं। जब मैं एसक्लरस्टोर को कॉल करता हूं तो मुझे अपवाद मिलता है।
मुख्य अपवाद कहते
{ "पुनर्स्थापित सर्वर के लिए विफल 'स्थानीय होस्ट'।"}
भीतरी अपवाद में खुदाई इन त्रुटियों
एक अपवाद तिथि दिखाता को एक ट्रांजैक्ट-एसक्यूएल कथन या बैच निष्पादित करते समय।
और फिर
तार्किक फ़ाइल 'डीबी' डेटाबेस 'डीबी' का हिस्सा नहीं है। लॉजिकल फ़ाइल नामों को सूचीबद्ध करने के लिए RESTORE FILELISTONLY का उपयोग करें। \ R \ nRESTORE डेटाबेस असामान्य रूप से समाप्त हो रहा है।
मुझे लगता है कि मौजूदा डीबी को प्रतिस्थापित करने के लिए इसे बताने का कोई तरीका है।
मैं बैकअप को डंप करने के लिए निर्देशिका रखने के लिए डीबी के फ़ाइल पथ को प्राप्त करने के लिए कोड के इस बिट का उपयोग करता हूं। हो सकता है कि फ़ाइल नामों को फिर से बनाने के लिए इसका उपयोग किया जा सके।
public string GetDBFilePath(String databaseName, String userName, String password, String serverName)
{
ServerConnection connection = new ServerConnection(serverName, userName, password);
Server sqlServer = new Server(connection);
Database db = sqlServer.Databases[databaseName];
return sqlServer.Databases[databaseName].PrimaryFilePath;
}
यदि आप उसी मशीन पर उसी डीबी के बैकअप से पुनर्स्थापित करते हैं तो आपको फ़ाइलों को स्थानांतरित करने की आवश्यकता नहीं है।बैकअप/पुनर्स्थापित के माध्यम से डेटाबेस को स्थानांतरित और कॉपी करते समय स्थानांतरित करने की आवश्यकता होती है। –
ठीक है, यहां कुछ सुझाव दिए गए हैं: बैकअप फ़ाइल पथ के संबंध में हमेशा ध्यान दें यदि फ़ाइल आपके स्रोत फ़ोल्डर पर वास्तव में मौजूद है। स्थानांतरित करने के संबंध में, यह एमडीएफ फ़ाइल लिखने के लिए एक अनुमति मुद्दा हो सकता है। अगर आपके ऐप को .bak फ़ाइल पढ़ने की अनुमति है, तो ध्यान दें, इस मामले में SQL कॉन्फ़िगरेशन प्रबंधक की जांच करें: MSSQLServer सेवा स्थानीय सिस्टम उपयोगकर्ता के अंतर्गत चलाना आवश्यक है। –