View Full Version : Replication and Subscription in sql server 2014
asal71
سه شنبه 11 فروردین 1394, 00:26 صبح
سلام.
من يک ديتابيس اس کيو ال روي سرور شرکت دارم.اين ديتابيس درحال کار هست و با نرم افزار حسابداري در ارتباطه.مثلا اسمشو بزاريم:database A
يک ديتابيسم روي يک سرور ديگه دارم.اينم اسمشو بزاريم database B
در ديتابيس اولي(database A) من داده ها ثبت ميشن و ميخام داده هاي من هرلحظه با ديتابيس دومي من (database B) مچ باشن يعني تغييرات در ديتابيس A من در ديتابيس B هر لحظه حس کنم.البته بايد بگم جداول و ساختار ديتابيس ها متفاوت هست.کل ساختار از زمين تا آسمون با هم فرق ميکنن.
من راه کار ميدم اگر ديديد درسته و يا راه کار خود کارفرما درست تره اونو به من ياد بديد.
از طريق سرورسي به نام Replication از ديتابيس اولي ... ميسازي و از طريق Subscription در ديتابيس دومي ... پيادش ميکني.
ممنون میشم راهنماییم کنید
pezhvakco
سه شنبه 11 فروردین 1394, 10:24 صبح
خواسته شما خیلی سنگین است ولی میشه با
Triggers
انجامش داد .
برای این کار باید دو سرور را به هم ارتباط دهید (Linked Server).
asal71
سه شنبه 11 فروردین 1394, 18:04 عصر
خواسته شما خیلی سنگین است ولی میشه با
Triggers
انجامش داد .
برای این کار باید دو سرور را به هم ارتباط دهید (Linked Server).
میشه یکم بیشتر توضیح بدید
چون در واقع این مشکل من نیست.جایی مطرح شد و منم کنجکاو شدم که بدونم چجوری میشه این کار رو انجام داد
pezhvakco
دوشنبه 17 فروردین 1394, 17:02 عصر
خواسته شما دو بخش دارد :
1)Link Server
2)انجام خواسته یا همان تغییرات در پایگاه داده دیگر
درباره Link Server نوشته های زیادی است ولی برای آگاهی ابتدایی:
Linked server ها امکان اتصال به منابع داده خارجی را فراهم آورده ، به شما اجازه دسترسی به داده و اجرای procedure ها در SQL Serverی غیر از Instanceی که در حال اجراست را می دهد.
علاوه بر این linked serverها امکان دسترسی به هر نوع منبع داده ای که قابل تطبیق با ODBC باشد از قبیل Oracle,Excel,Flat File و ... را می دهد که همین امکان باعث می شود در بسیاری مواقع linked serverها گزینه مناسبی در DTS ها و یا BCP ها بجای منابع خارجی باشند.
قدم اول در تنظیم یک linked server اطمینان از وجود راه ارتباطی بین دو سرور است . سپس باید سرور linked(و یا بعبارتیremote) را به سرور Local معرفی کنیم.دستور SQL مربوط به تنظیم یک linked server به شکل زیر است:
SP_addlinkedserver 'Other_InstanceName',N'SQL Serve'
پس از اجرای دستور فوق بایستی سطح دسترسی بین دو سرور و اینکه چه کاربری با چه user/passی باید به linked server بتواند Log in کند، مشخص شود.
در حالت پیش فرض هر Loginی که در هر دو سرور موجود باشد مجاز به اجرای query ها در طول این ارتباط است.در غیر اینصورت کاربر با پیغام "Loginfailed" مواجه می شود.پس از همسان بودن user و مجوزها در دو سرور اطمینان حاصل کنید تا دردسر برای admin سرورها در حالی که شما نیستید ایجاد نشود!
2) و ... پس از برقراری ارتباط می توانید به انجام تغییرات برسید که پیشنهاد من کار با Triggers ها است
Triggers ها یه جور مدیریت رویداد ها در یک جدول هستند و میشند بنا به نوع رویداد (جدید، ویرایش و با پاک کردن) انجام گرفته در ردیف های جدول کاری را بر روی هر یک از بخش های دیگر این پایگاه داده و یا دیگر پایگاه داده ها انجام داد .
soheileee
سه شنبه 25 فروردین 1394, 02:40 صبح
به نظر من Linked Server به هیج وجه پاسخ خوبی برای مشکل مطرح شده نیست.
اگر دو سرور در دوتا شبکه جداگانه باشن و بین دو شبکه Trust Relationship وجود نداشته باشه قضیه یک کم پیچیده تر می شه.
البته قابل حله.
از طرفی در خیلی از موارد برای ست کردن درست دسترسی های کاربران باید از Proxy استفاده کنی. اشکال استفاده از Proxy اینه که که چون شما Password رو دستی وارد می کنی یا به اصطلاح یه جورایی Hard Code می کنی، اگه کاربر شما در ویندوز رمزش رئ عوض کنه Linked Server شما دیگه کار نخواهد کرد.
مشکل دیگه که به روش پیشنهادی بالا وارده سرعت کم Triggerها ست که باعث کندی کل سیستم می شه. دیگه بماند که Trigger بخواد روی Linked Server هم کار کنه.
اما Replication هم پاسخ نیست چون می گی که ساختار دیتابیس ها متفاوت هستن.
جواب استفاده از SSIS یا همون SQL Server Integration Services هست.
می تونید توی SSIS یه تعداد Package بسازید که کار رو براتون به راحتی انجام بدن.
فقط مسئله اینه که می گی می خوای تغییرات رو در لحظه ببینی.
من روی این مورد یه بحثی دارم، در اغلب مورادی که گفته می شه می خوان تغییرات در لحظه دیده بشه، در واقع منظورشون از لحظه یه چیزی مثل هر 10 دقیقه یه بار یا دیگه اگه خیلی قضیه جدی باشه هر 1 دقیقه یک بار هست.
در این صورت پس از ایجاد SSIS Packageها، یه SQL Server Agent Job درست می کنی که هر دقیقه یک بار پکیج های SSIS رو برات اجرا کنه.
هم Performance عالی میتونه باشه اگه طراحی خوبی کرده باشی، هم اشکال زدایی رو خیلی راحت می تونی انجام بدی و پروسه خیلی پیچیده ای نداری که چیزیو از قلم بندازی.
pezhvakco
چهارشنبه 26 فروردین 1394, 09:20 صبح
https://msdn.microsoft.com/en-us/library/ff772782.aspx
از طرفی در خیلی از موارد برای ست کردن درست دسترسی های کاربران باید از Proxy استفاده کنی
نیازی به Proxy ندارد.
مشکل دیگه که به روش پیشنهادی بالا وارده سرعت کم Triggerها ست که باعث کندی کل سیستم می شه.
میشه بدونم این مشکل رو کدام منبع نوشتیند.
جواب استفاده از SSIS یا همون SQL Server Integration Services هست.
با سپاس فراوان، درباره امکانات و شرایط این ابزار هم توضیحی بندیسید.
تا جایی که من فهمیدم، خواسته این بوده :
بروز رسانی ردیف جدول های پایگاه داده ای براساس پایگاه داده ای دیگر که شباهتی بین اشیا این دو نیست(پایگاه داده در دو سیستم جدا از هم هستند).
روش پیشنهادی شما برای بروز رسانی اشیا دو پایگاه داده است که یکسان هستند.
در این صورت پس از ایجاد SSIS Packageها، یه SQL Server Agent Job درست می کنی که هر دقیقه یک بار پکیج های SSIS رو برات اجرا کنه.
روش ارتباط این دو SQL Server Instance به هم رو بنویسید برای انجام دستورات.
انجام چند دقیقه یکبار این دستور ها شاید یک کار پرهزینه و بی کاربرد باشد =>
چون بروز رسانی هنکامی انجام میشه که تغییر داده شده باشه و نه اینکه هرچند دقیقه الکی این کار انجام بشه (بدون وجود تغییر در جدول ها)
soheileee
پنج شنبه 27 فروردین 1394, 02:09 صبح
نیازی به Proxy ندارد.
اگر بین دو شبکه Trust Relationship وجود نداشته باشه و شبکه ها کاملاً جدا باشن به Proxy نیاز داری. اما اگه سرورها در یک Domain باشن خوب مسلماً نیازی نخواهد بود. البته این رو هم بگم که اگه دو سرور در یک Domain نباشن، باز هم می شه بدون Proxy یه Linked Server راه انداخت به شرط اینکه SQL Server User داشته باشید در سرور مقصد که خوب این یکی به دلایل امنیتی توسط هیچ DBA با تجربه ای توصیه نمی شه. حتی توصیه می شه که SA رو Disable کنید و هرگز Server Athentication رو Mixed Mode نذارید تا سکیوریتی بیشتری داشته باشید.
میشه بدونم این مشکل رو کدام منبع نوشتیند.
اینو گوگل کن تا بینهایت مطلب پیدا کنی:
SQL Server triggers pros and cons
البته خیلی هم نیازی به گوگل کردن نیست خیلی واضحه که تأثیر Triggers روی Performance منفی هست.
خیلی ساده ست، به این فکر کن که یه Table داری که 10 میلیون رکورد داره، و تریگری نوشتی که قراره کار خاصی رو برات روی این Table انجام بده. فکر می کنی هر تغییری که باعث بشه اون Trigger شما Fire بشه، چقدر طول خواهد کشید تا کارش رو انجام بده؟
با سپاس فراوان، درباره امکانات و شرایط این ابزار هم توضیحی بندیسید.
والا چی بگم؟ SQL Server Integration Services یکی از ابزارهای معروف Business Intelligence هست که فقط در SQL Server با نسخه های Standard، Business Intelligence یا Enterprise موجوده. باهاش می تونید کارهای بسیار متفاوتی انجام بدید. از قبیل Integrate کردن دیتابیسهای مختلف، با ساختارهای مختلف و سیستمهای مختلف. مثلاً یه سری Flat File داری با فرمت CSV، یه سری Excel داری، یه دیتابیس در Oracle داری و یه دیتا بیس در SQL Server و می خواهی همه رو مجتمع کنی یه جا. فرض کن که سرور Oracle شما كلاً در یک کشور دیگه ست. با SSIS می تونی کار مجتمع سازى تمام انواع داده ها رو انجام بدی.
می تونی این رو هم گوگل کنی:
what is ssis
روش ارتباط این دو SQL Server Instance به هم رو بنویسید برای انجام دستورات.
ارتباط بین سرورها در SSIS تعریف میشه.
انجام چند دقیقه یکبار این دستور ها شاید یک کار پرهزینه و بی کاربرد باشد =>
چون بروز رسانی هنکامی انجام میشه که تغییر داده شده باشه و نه اینکه هرچند دقیقه الکی این کار انجام بشه (بدون وجود تغییر در جدول ها)
به هیچ وجه پر هزینه نیست، خصوصاً در مقایسه با روشهای کلاسیک.
اگه چیزی در Tableها تغییر نکرده باشه اجرای SQL SERVER Agent Job در کمتر از 1 ثانیه تموم میشه. البته در صورتی که ارتباط شبکه ای بین سرورها سریع و خوب باشه.
منظور از کار الکی رو نمی فهمم، چون تمام کارها اتوماتیک انجام می شن.
pezhvakco
شنبه 29 فروردین 1394, 09:27 صبح
البته خیلی هم نیازی به گوگل کردن نیست خیلی واضحه که تأثیر Triggers روی Performance منفی هست.
این یک قانون همیشگی نیست و بستگی به شرایط (کدنویسی، اجرا ، ساختار پایگاه داده و ... ) داره.
به این فکر کن که یه Table داری که 10 میلیون رکورد داره، و تریگری نوشتی که قراره کار خاصی رو برات روی این Table انجام بده. فکر می کنی هر تغییری که باعث بشه اون Trigger شما Fire بشه، چقدر طول خواهد کشید تا کارش رو انجام بده؟
این که این جدول چند تا ردیف داره چه کار داره به خواسته ما
=وظیفه Triggers ها همینه و اینکه در هر حالت دیگه باید تغییرات روی جدول انجام بشه (وظیفه پایگاه داده همینه)
ارتباط بین سرورها در SSIS تعریف میشه.
در این روش هم تنظیمات خاص خودشو داره برای کاربری ...
اگه چیزی در Tableها تغییر نکرده باشه اجرای SQL SERVER Agent Job در کمتر از 1 ثانیه تموم میشه.
چرا باید کاری انجام بشه بدون اینکه بهش نیازی باشه
=این میشه کار الکی.
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.