سلام.
بهترین روش برای مقایسه ساختار 2 دیتابیس چیست؟
توضیحات : فرض کنید یه پروژه رو تحویل مشتری دادید و این پروژه مرتبا در حال آپدیت هست. بدون شک توی این تغییرات ساختار دیتابیس هم تغییر میکنه. حالا سوال اینجاست چطور ساختار دیتابیس آپدیت شده و دیتابیس فعال پروژه رو مقایسه کنیم و فقط تغییرات جدید رو اعمال کنیم؟
سلام
این موضوع بستگیبه نوع دیتابیس شما هم داره
اگر مدل CodeFirst استفاده میکنید و از مایگریشن ها استفاده میکنید کهبعد از آپدیت نسخه مشتری دیتابیس هم آپدیت میشه.
امامعمولا به این صورت استفاده نمیشه یا کلا دیتابیس DB First هست. در این صورت معمولا باید تغییراتی که رو نسخه تست انجام شده رو با دقت روی نسخه اصلی هم انجام بدید.
یا اینکه یک بک آپ از نسخه اصلی گرفته بشه و تغییرات روش انجام بشه و روی سرور اصلی برده بشه.
با سلام. دوست گرامی شما دو راه دارید یا اینکه از نرم فزار مخصوص این کار استفاده کنید. مثل نرم افزار SQL Delta Duo for SQL Server یا امثال این. یا اینکه پس از هر تغییر در دیتابیس اسکریپت تغییرات رو به صورت دستی بگیرید و در دیتابیس جدید اعمال کنید. روش استفاده از نرم افزار اگرچه به نظر راحت تره ولی دردسرهای خودشو داره که من خودم شخصا توصیه میکنم این کار رو به صورت دستی انجام دهید. جهت گرفتن اسکریپت دستی برای ویوها که خیلی راحته کافیه بعد از تغییر در ساختار ویو به قسمت دیزاین آن رفته و کد sql آن را کپی کرده و در قسمت دیزاین دیتابیس جدید paste کنید. یا اینکه روی ویوی مورد نظر راست کلیک کرده Script View as و بعد گزینه Alter to و بعد گزینه اول را بزنید تا اسکریپت ویوی جدید رو دریافت کنید و آن را در دیتابیس جدید اجرا کنید. برای تیبل ها بعد از تغییر در ساختار تیبل قبل از اینکه دکمه ذخیره رو بزنید روی یکی از فیلدهای مورد نظر راست کلیک کرده و گزینه ...Generate Change Script رو بزنید. با این کار اسکریپت تغییرات را دریافت خواهید کرد و میتوانید به راحتی در دیتابیس مقصد اجرا کنید. در مورد پروسیژورها نیز همانند ویوها عمل کنید با تفاوت اینکه هنگام راست کلیک روی پروسیژور گزینه Script View as به Script Store procedure as تغییر می یابد.
موفق باشید.
Sowgandi : بله از این دسته نرم افزار ها استفاده کردم مثل Red gate sql compare و قبلا هم واقعا عالی بود ولی نمیدونم چرا الان تغییرات رو نشون نمیده.
در مورد روش دوم هم شما در نظر بگیرید زمان اضافه کردن یه آپشن به نرم افزار کلی آزمون و خطا انجام میشه. پس خیلی سخته که همه تغییرات یه باره انجام و قبل از ذخیره، اسکریپ جنریت کنیم.
saedbfd : بله مهندس. معمولا DB First کار میشه. گفتم شاید راهی باشه که از سمت sql server این کار رو انجام بدیم. در مورد بک آپ هم که الان همین کارو میکنم فقط هدفم اینه که مدت زمان stop شدن سرویس مشتری کمتر بشه. در واقع میخوام کم کم برم به سمت آپدیت اتوماتیک و بدون دخالت انسان ( در این مورد هم ممنون میشم اگه امکانش هست آموزشی بزارید)
در پاسخ به mohammad-i
دوست عزیز این که می فرمایید فقط در مورد تیبل ها ممکنه مشکل ساز باشه. با این حال میتونید از روش Drop and Create to تیبل استفاده کنید. در مورد اینکه گفتید نرم افزارتون تغییرات رو نشون نمیده، مطمئن بشید که نرم افزار درست کرک شده باشد. یا اینکه کرک نرم افزارتون غیر فعال شده باشه. این مورد رو چک کنید.
البته عذر خواهی میکنم عمل Drop and Create to دیتای تیبل رو از بین میبره. این روش صحیح نیست. عذر خواهی میکنم.
دستور زیر اسامی ستونهای جداول بین دو دیتابیس را مقایسه کرده و ستونهایی که در یکی از دو دیتابیس وجود نداشته باشد را لیست میکند.
توضیح: اسامی [dataedo_6.0] و [dataedo_7.0]را با اسامی دیتابیسهای مورد نظر جایگزین کنید.
select isnull(db1.table_name, db2.table_name) as [table],
isnull(db1.column_name, db2.column_name) as [column],
db1.column_name as database1,
db2.column_name as database2
from
(select schema_name(tab.schema_id) + '.' + tab.name as table_name,
col.name as column_name
from [dataedo_6.0].sys.tables as tab
inner join [dataedo_6.0].sys.columns as col
on tab.object_id = col.object_id) db1
full outer join
(select schema_name(tab.schema_id) + '.' + tab.name as table_name,
col.name as column_name
from [dataedo_7.0].sys.tables as tab
inner join [dataedo_7.0].sys.columns as col
on tab.object_id = col.object_id) db2
on db1.table_name = db2.table_name
and db1.column_name = db2.column_name
where (db1.column_name is null or db2.column_name is null)
order by 1, 2, 3
تاریخ :
1402/07/23
- ساعت :
04:01:00 PM
- بازدید :
1031
- پاسخ :
1
|
تاریخ :
1400/08/02
- ساعت :
02:35:00 PM
- بازدید :
2563
- پاسخ :
1
|
تاریخ :
1403/01/15
- ساعت :
04:12:00 PM
- بازدید :
799
- پاسخ :
2
|
تاریخ :
1402/10/18
- ساعت :
10:45:00 PM
- بازدید :
705
- پاسخ :
2
|
تاریخ :
1402/08/18
- ساعت :
08:43:00 AM
- بازدید :
1311
- پاسخ :
0
|
تاریخ :
1402/08/16
- ساعت :
09:45:00 PM
- بازدید :
1037
- پاسخ :
1
|
تاریخ :
1402/06/27
- ساعت :
12:27:00 PM
- بازدید :
1459
- پاسخ :
2
|
تاریخ :
1402/06/25
- ساعت :
11:37:00 AM
- بازدید :
1041
- پاسخ :
1
|
تاریخ :
1402/06/18
- ساعت :
10:36:00 AM
- بازدید :
1752
- پاسخ :
2
|
تاریخ :
1399/06/01
- ساعت :
10:58:00 PM
- بازدید :
7553
- پاسخ :
1
|
تاریخ :
1403/08/29
- ساعت :
07:15:00 PM
- بازدید :
58
- پاسخ :
0
|
تاریخ :
1403/08/18
- ساعت :
10:40:00 AM
- بازدید :
97
- پاسخ :
0
|
تاریخ :
1402/07/23
- ساعت :
04:01:00 PM
- بازدید :
1031
- پاسخ :
1
|
تاریخ :
1403/05/30
- ساعت :
09:22:00 AM
- بازدید :
426
- پاسخ :
1
|
تاریخ :
1402/08/01
- ساعت :
06:25:00 PM
- بازدید :
930
- پاسخ :
1
|
تاریخ :
1402/08/16
- ساعت :
10:38:00 AM
- بازدید :
1348
- پاسخ :
1
|
تاریخ :
1398/08/17
- ساعت :
01:27:00 AM
- بازدید :
4796
- پاسخ :
1
|
تاریخ :
1402/09/08
- ساعت :
07:34:00 PM
- بازدید :
1157
- پاسخ :
1
|
تاریخ :
1402/09/21
- ساعت :
11:10:00 PM
- بازدید :
595
- پاسخ :
1
|
تاریخ :
1403/07/27
- ساعت :
03:21:00 PM
- بازدید :
205
- پاسخ :
1
|