PDA

View Full Version : گرفتن بکاپ از دیتا بیس (فقط داده ها نه ساختار)



mina.net
پنج شنبه 07 آبان 1388, 16:03 عصر
سلام دوستان
من از کدی که برای بکاپ کیری از دیتابیسم استفاده می کنم موقعی که ریستور می شه ساختار دیتابیس رو هم در صورت عوض شدن ساختار (کم و زیاد شدن فیلد ها یا نوع و هر تغییر ساختاری)تغییر می ده .
از انجای کاربران از دیتابیس قدیمی تر استفاده می کنند و با آپدیت برنامه ممکن هست تو ساختار دیتابیس هم تغییراتی ایجاد بشه. می خوام به نحوی بکاپ تهیه شود که بعدا در صورت ریستور کردن دیتابیس رو به حالت قبلی برنگرداند.
چطور می تونم این کار رو بکنم؟
این هم کدی که برای بکاپ گیری استفاده می کنم.


'پشتیبان گیری از بانک
Dim shams As String = shamsi()
shams = shams.Replace("/", "-")
Dim str_name_backup As String = shams & "__Tala.bak"
Dim DevicePath As String
With SaveFileDialog1
.FileName = str_name_backup
.DefaultExt = "bak"
.Filter = "DateBase Backup File(*.bak)|*.bak"
.OverwritePrompt = True
End With
If SaveFileDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then
DevicePath = SaveFileDialog1.FileName
If My.Computer.FileSystem.FileExists(DevicePath) Then Kill(DevicePath)
con.Close()
con.Open()
Dim Srvcon As New ServerConnection(con)
Dim Srv As New Server(Srvcon)
' Create backup device item for the backup
Dim bdi As New BackupDeviceItem(DevicePath, DeviceType.File)
' Create the backup informaton
Dim Backup As New Backup
Backup.Devices.Add(bdi)
With Backup
'Type Of Backup
.Action = BackupActionType.Database
.BackupSetDescription = "Backup DataBase"
.BackupSetName = "DB"
.Database = con.Database.ToString()
.LogTruncation = BackupTruncateLogType.Truncate
'Backup.ExpirationDate = New DateTime(2007, 5, 1)
' Run the backup
.SqlBackup(Srv)
End With
MessageBoxFa.Show("عملیات تهیه فایل پشتیبان به موفقیت انجام شد ", _
name_me, MessageBoxButtons.OK)
Else
MessageBoxFa.Show(" انجام نشد ", name_me, MessageBoxButtons.OK)
End If

pourang_us
چهارشنبه 13 آبان 1388, 10:18 صبح
دوست عزیز
این مشکلی که شما مطرح فرمودید به نوع تهیه نسخه پشتیبان از اطلاعات بر نمیگرده. نسخه BackUp یعنی دقیقا همون ساختار فایل بانک اطلاعاتی. اما راه حل برای رفع این مشکل چیز دیگری است.
به نظر من اولین اصل طراحی دقیق و اصولی بانک اطلاعاتی و نیاز سنجی اولیه با در نظر گرفتن رشد متناسب اون سازمان هست.

در صورتی که بنا به هر دلیلی این اتفاق مسیر نبود شما باید اطلاعات خودت رو از بانک قدیم به بانک جدید Convert کنی معمولا شرکتهای بزرگ که بانک اطلاعاتی نرم افزار های خودشون رو ارتقاء و به روز آوری میکنند و یک نرم افزار جانبی هم برای این تبدیل تهیه میکنند.

ضمنا به دلیل وجود حساسیت زیاد در ارتقاء برای حفظ اطلاعات کاربر یا مشتری باید در این عمل خیلی با دقت و محطاطانه عمل نمود.
توصیه من به شما نیز انجام همین convert یا به صورت دستی (با زدن Script بر روی بانک) یا ساخت یک برنامه جانبی برای انجام این امر است.



موفق باشید

mina.net
چهارشنبه 13 آبان 1388, 11:00 صبح
سلام دوست عزیز
ممنون از جوابی که دادید. بله حق با شما ست در این مدت چند روزه که تحقیق کردم به حرف شما رسیدم . من فکر می کنم SCRIPT برای من منظور کاری من بهترین روش باشد. منتها نمی دونم چطور باید این کار رو انجام بدم. اگه می شه راهنمایی کنید ممنون می شم.
در ضمن در این تاپیک ها هم گفتگوهای شده می تونید مطالعه نمایید.
http://www.barnamenevis.org/forum/showthread.php?p=840810#post840810
http://www.barnamenevis.org/forum/showthread.php?p=840786&posted=1#post840786

pourang_us
چهارشنبه 13 آبان 1388, 12:08 عصر
دوست عزیز

من به طور کامل پستهایی رو که لینکش رو دادید نخوندم اما گذری نگاه کردم شما باید چند نکته رو در هنگامی که ساختار بانک رو تغییر میدهید در نظر داشته باشید.
- در طراحی بانک جدید میبایست همه فیلدهای قدیم گنجانده شده باشند مگر اینکه به دلایلی اطلاعات قدیم آن فیلد مورد نیاز نباشد (که تشخیص این مطلب احتیاج دانستن و تحلیل فرضیه وجودی این فیلد در طراحی اولیه ) و نکته مهمتر اینکه این فیلد در سایر بانکها و یا برنامه استفاده نشده باشد

- تغییر پیدا نکردن نوع Data Type در فیلد جدید با قدیم به طور مثال فیلد قدیم حاوی اطلاعات Text و فیلد جدید با Data Type عددی مسلما در هنگام تغییر با خطا مواجه میشوید

- فیلد های جدید اضافه شده به جدول با ید حتما مقدار null را قبول کنند(چون ردیفهای قبلی این جدول فاقد اطلاعات برای این فیلدها هستند ) مگر با تشخیص برنامه نویس مقادیری به صورت پیش فرض و یا در زمان تبدیل اطلاعات به آنها اضافه گردد.

در صورت امکان بانک جدید طوری طراحی شود که مواردی از این دست در آن کمتر پیش آید.

اما در نهایت اگر تعداد بانکهایی که باید عمل Convert Data بر روی آنها صورت بگیرد کم هست و یا همه آنها توسط شخص شما قرار هست اتفاق بیفتد از Script و اون هم داخل خود محیط Sql انجام گردد. در غیر این صورت یه برنامه جانبی بنویسد. (اما من توصیه میکنم دستی انجام دهید)

اما نکاتی که من توصیه میکنم زمان تبدیل در نظر بگیرید
- از بانک قبلی یک نسخه پشتیبان مطمئن تهیه کنید.
- بانک قدیم و EXE سازگار با آن را نیز به صورت BackUp تهیه کنید
- عمل Convert را از جداول اطلاعات پایه شروع کنید و به همین ترتیب تا آخرین جدول ادامه دهید.
- بانک تبدیل شده جدید را با EXE جدید مطابقت بدهید و تست کامل انجام دهید.
- چنانچه از تست خود مطمئن نیستید هر دو نسخه قدیم و جدید را در اختیار مشتری قرار دهید تا به صورت موازی برای مدتی مشخص ورود اطلاعات کند.

برای اسکریپت تبدیل هم کافی است یک دستور Insert بنویسد که قسمت آن Values نتیجه Select بانک قدیم شماست (ترتیب فیلد ها در Select رعایت گردد)


موفق باشید

از جداول اطلاعات پایه عمل

mina.net
چهارشنبه 13 آبان 1388, 14:24 عصر
دوست عزیز سلام
من می خوام تغییرات را با اسکریپت اعمال کنم. یعنی فایل اسکریپت رو برای کاربر ارسال کنم و خودش بتونه این تغیرات رو اعمال کنه. تو یک قسمت از برنامه ام یک قسمتی رو برای اپدیت دیتابیس در نظر بگیرم و تو اون کاربر بتونه آدرس اسکریپت مورد نظر رو وارد کرده و تغییرات مورد نظر به صورت خودکار انجام بشه. اینطور هر وقت دیتابیس تغییر کرد لازم نیست خودم در محل حاضر بشم.
نمی دونم درست توضیح دادم یا نه.
در حال حاضر به صورت دستی این کار رو می کنم. که خیلی هم وقتگیر هست. یعنی می رم پیش کاربر دیتابیسش رو می گیرم و تو sqlmanejment تغییرات لازم رو اعمال می کنم که البته چون الان تعداد کربران من کم هست مهم نیست ولی در درازمدت مشکل ساز خواهد شد.

pourang_us
چهارشنبه 13 آبان 1388, 15:08 عصر
برای اسکریپت تبدیل هم کافی است یک دستور Insert بنویسد که قسمت آن Values نتیجه Select بانک قدیم شماست (ترتیب فیلد ها در Select رعایت گردد)



هر چند خودم به شخصه این روش رو نمی پسندم اما میتونی این کار رو انجام بدی و توی برنامت یه جایی به اسم دریافت فایل بذاری و بعد Script هات رو به صورت فایل Text برای اون طرف ارسال کنی و اون با دریافت فایل Script شما رو روی بانک اطلاعاتی بزنه



موفق باشی

mina.net
چهارشنبه 13 آبان 1388, 15:23 عصر
هر چند خودم به شخصه این روش رو نمی پسندم اما میتونی این کار رو انجام بدی و توی برنامت یه جایی به اسم دریافت فایل بذاری و بعد Script هات رو به صورت فایل Text برای اون طرف ارسال کنی و اون با دریافت فایل Script شما رو روی بانک اطلاعاتی بزنه
موفق باشی
دوست عزیز من نمی دونم چطور باید این کار رو بکنم. اگه بتونید یک مثال بزارید ممنون می شم. یک برنامه کوچیک که تو کدش یک اسکریپت رو اجرا کنه یک جدول رو به دیتابیس موجود اضافه کنه. اگه امکانش برای شما باشه که همچین برنامه ای بزارید ممنون می شم.

pourang_us
شنبه 16 آبان 1388, 10:47 صبح
امیدوارم کارت رو حل کنه


موفق باشید