كيف يمكنني تشغيل هذا قاعدة بيانات النسخ الاحتياطي واستعادة البرامج النصية من تطبيق winform بلدي؟

StackOverflow https://stackoverflow.com/questions/431033

سؤال

وأنا تطوير تطبيقات الأعمال الصغيرة التي تستخدم سيكلسرفير 2005 قاعدة البيانات.

ومنهاج: برنامج .NET Framework 3.5. نوع التطبيق: تطبيق ويندوز. اللغة: C #

والسؤال:

ولست بحاجة إلى اتخاذ واستعادة النسخة الاحتياطية من طلبي. لقد السيناريو يتطلب إنشاء من SSME.

وكيف يمكنني تشغيل هذا البرنامج النصي معين (أو البرامج النصية) من تطبيق winform بلدي؟

هل كانت مفيدة؟

المحلول

ويمكنك تشغيل هذه البرامج النصية بنفس الطريقة تشغيل استعلام، إلا أنك لا اتصال قاعدة البيانات التي تريد استعادة، يمكنك الاتصال في السيطرة بدلا من ذلك.

نصائح أخرى

إذا الجهاز حيث يتم تشغيل التطبيق الخاص بك لديه أدوات عميل SQL Server المثبتة، يمكنك استخدام <لأ href = "http://msdn.microsoft.com/en-us/library/ms170207.aspx" يختلط = " نوفولو noreferrer "> المساعدة Sqlcmd .

إذا كنت تريد أن تفعل ذلك برمجيا يمكنك استخدام SMO

دروس

ومجرد استخدام الاتصال بقاعدة البيانات (ADO أفترض؟) وإرسال تعليمات TSQL العادي الخاص بك إلى الخادم من خلال هذا الصدد.

لالنسخ الاحتياطي وربما كنت ترغب في استخدام xp_sqlmaint. فمن لديه القدرة في متناول اليد لإزالة النسخ الاحتياطية القديمة، ويقوم بإنشاء ملف سجل لطيفة. يمكنك أن نسميها عبر شيء من هذا القبيل: EXECUTE master.dbo.xp_sqlmaint N '' - S "[الخادم]" [ServerLogonDetails] -D [و databasename] -Rpt "[BackupArchive] \ BackupLog.txt" [RptExpirationSchedule] -CkDB -BkUpDB "[BackupArchive]" -BkUpMedia DISK [BakExpirationSchedule] ''

و(استبدال [بين قوسين معقوفين] مع القيم المناسبة).

وأيضا للنسخ الاحتياطي قد تحتاج إلى عمل نسخة احتياطية من سجل المعاملات. شيء مثل: IF DATABASEPROPERTYEX ((SELECT DB_NAME (dbid) FROM WHERE master..sysprocesses سبيد =SPID)، '' الإنعاش '') <> '' SIMPLE '' EXECUTE master.dbo.xp_sqlmaint N '' -S "[الخادم] "[ServerLogonDetails] -D [و databasename] -Rpt" [BackupArchive] \ BackupLog_TRN.txt "[RptExpirationSchedule] -BkUpLog" [BackupArchive] "-BkExt TRN -BkUpMedia DISK [BakExpirationSchedule] ''

وأود أن أوصى تخزين الأوامر الفعلية التي تستخدمها في جدول قاعدة بيانات (صف 1 في الأوامر) واستخدام نوع من مخطط استبدال القالب للتعامل مع القيم شكلي. وسيتيح ذلك للتغييرات سهلة الأوامر، دون الحاجة إلى نشر القانون الجديد.

لاستعادة سوف تحتاج إلى قتل كافة الاتصالات باستثناء تلك مزود خدمة الداخلية. تتخذ أساسا نتائج "sp_who إكسيك" والصفوف التي تطابق على DBNAME، ولها مكانة أنه لا "الخلفية"، وكمد ليست واحدة من "معالج إشارة"، "MONITOR LOCK"، "الكتابة البطيئة" "LOG WRITER"، "نقطة تفتيش SLEEP" القيام ب "قتل" على SPID. (على سبيل المثال: ExecuteNonQuery ( "قتل 1283"))

وسترغب في فخ وتجاهل أي استثناءات من الأمر KILL. لا يوجد شيء يمكنك القيام به حيال لهم. إذا الاستعادة لا يمكن المضي قدما بسبب الاتصالات الموجودة فإنه سيتم رفع خطأ.

وخطر واحد مع وصلات قتل هو تجمع اتصال ADO و(أكثر للتطبيقات asp.net من نوافذ التطبيقات). يفترض ADO للاتصال جلب من تجمع الاتصال صالحا ... وأنها لا تتفاعل جيدا للاتصالات التي قد قتلوا. فإن العملية التالية التي تحدث في هذا الصدد تفشل. لا أذكر الخطأ ... كنت قد تكون قادرة على مصيدة فقط أن الخطأ المحدد والتعامل معها ... أيضا مع 3.5 اعتقد انه يمكن مسح تجمع الاتصال (حتى ... فخ الخطأ، تدفق تجمع الاتصال ، فتح الاتصال، حاول الأمر مرة أخرى ... قبيحة ولكنها قد تكون قابلة للتنفيذ).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top