دسته بندی ها
13:18 1398/07/10

مقایسه ساختار دو دیتابیس در Sql Server

مشخصات سوال کننده :
کاربر : mohammad-i     امتیاز کاربر : 260     رتبه کاربر : 7
دسته بندی : Sql Server

به این سوال امتیاز بدهید    0
تعداد بازدید این سوال : 5300
پاسخ دهنده : saedbfd 23:24 1398/07/26

سلام

این موضوع بستگی‌به نوع دیتابیس شما هم داره

اگر مدل CodeFirst استفاده میکنید و از مایگریشن ها استفاده میکنید که‌بعد از آپدیت نسخه مشتری دیتابیس هم آپدیت میشه.

اما‌معمولا به این صورت استفاده نمیشه یا کلا دیتابیس DB First هست. در این صورت معمولا باید تغییراتی که رو نسخه تست انجام شده رو با دقت روی نسخه اصلی هم انجام بدید.

یا اینکه یک بک آپ از نسخه اصلی گرفته بشه و تغییرات روش انجام بشه و روی سرور اصلی برده بشه.

به این پاسخ امتیاز بدهید    4
امتیاز: 1654 رتبه: 1
پاسخ دهنده : Sowgandi 23:24 1398/07/26

با سلام. دوست گرامی شما دو راه دارید یا اینکه از نرم فزار مخصوص این کار استفاده کنید. مثل نرم افزار SQL Delta Duo for SQL Server یا امثال این. یا اینکه پس از هر تغییر در دیتابیس اسکریپت تغییرات رو به صورت دستی بگیرید و در دیتابیس جدید اعمال کنید. روش استفاده از نرم افزار اگرچه به نظر راحت تره ولی دردسرهای خودشو داره که من خودم شخصا توصیه میکنم این کار رو به صورت دستی انجام دهید. جهت گرفتن اسکریپت دستی برای ویوها که خیلی راحته کافیه بعد از تغییر در ساختار ویو به قسمت دیزاین آن رفته و کد sql آن را کپی کرده و در قسمت دیزاین دیتابیس جدید paste کنید. یا اینکه روی ویوی مورد نظر راست کلیک کرده  Script View as و بعد گزینه Alter to و بعد گزینه اول را بزنید تا اسکریپت ویوی جدید رو دریافت کنید و آن را در دیتابیس جدید اجرا کنید.  برای تیبل ها بعد از تغییر در ساختار تیبل قبل از اینکه دکمه ذخیره رو بزنید روی یکی از فیلدهای مورد نظر راست کلیک کرده و گزینه ...Generate Change Script رو بزنید. با این کار اسکریپت تغییرات را دریافت خواهید کرد و میتوانید به راحتی در دیتابیس مقصد اجرا کنید. در مورد پروسیژورها نیز همانند ویوها عمل کنید با تفاوت اینکه هنگام راست کلیک روی پروسیژور گزینه Script View as به Script Store procedure as تغییر می یابد.

موفق باشید.

 

به این پاسخ امتیاز بدهید    3
امتیاز: 871 رتبه: 3
پاسخ دهنده : mohammad-i 23:24 1398/07/26

Sowgandi  : بله از این دسته نرم افزار ها استفاده کردم مثل Red gate sql compare و قبلا هم واقعا عالی بود ولی نمیدونم چرا الان تغییرات رو نشون نمیده.

در مورد روش دوم هم شما در نظر بگیرید زمان اضافه کردن یه آپشن به نرم افزار کلی آزمون و خطا انجام میشه. پس خیلی سخته که همه تغییرات یه باره انجام و قبل از ذخیره، اسکریپ جنریت کنیم.

به این پاسخ امتیاز بدهید    0
امتیاز: 260 رتبه: 7
پاسخ دهنده : mohammad-i 23:24 1398/07/26

saedbfd  : بله مهندس. معمولا DB First  کار میشه. گفتم شاید راهی باشه که از سمت sql server این کار رو انجام بدیم. در مورد بک آپ هم که الان همین کارو میکنم فقط هدفم اینه که مدت زمان stop شدن سرویس مشتری کمتر بشه. در واقع میخوام کم کم برم به سمت آپدیت اتوماتیک و بدون دخالت انسان ( در این مورد هم ممنون میشم اگه امکانش هست آموزشی بزارید)

به این پاسخ امتیاز بدهید    0
امتیاز: 260 رتبه: 7
پاسخ دهنده : Sowgandi 23:24 1398/07/26

در پاسخ به  mohammad-i

دوست عزیز این که می فرمایید فقط در مورد تیبل ها ممکنه مشکل ساز باشه. با این حال میتونید از روش  Drop and Create to  تیبل استفاده کنید. در مورد اینکه گفتید نرم افزارتون تغییرات رو نشون نمیده، مطمئن بشید که نرم افزار درست کرک شده باشد. یا اینکه کرک نرم افزارتون غیر فعال شده باشه. این مورد رو چک کنید.

به این پاسخ امتیاز بدهید    1
امتیاز: 871 رتبه: 3
پاسخ دهنده : Sowgandi 23:24 1398/07/26

البته عذر خواهی میکنم عمل  Drop and Create to  دیتای تیبل رو از بین میبره. این روش صحیح نیست. عذر خواهی میکنم.

به این پاسخ امتیاز بدهید    0
امتیاز: 871 رتبه: 3
پاسخ دهنده : shaneh 23:24 1398/07/26

مقایسه جداول و ستون‌های دو دیتابیس در Sql Server

دستور زیر اسامی ستون‌های جداول بین دو دیتابیس را مقایسه کرده و ستون‌هایی که در یکی از دو دیتابیس وجود نداشته باشد را لیست می‌کند.

توضیح: اسامی [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

 

ویرایش شده در یکشنبه 23 شهریور 1399 ساعت 02:06:58
به این پاسخ امتیاز بدهید    0
امتیاز: 5 رتبه: 110
برای ارسال پاسخ لطفا وارد حساب کاربری خود شوید.   ورود