ايران ويج

نسخه‌ی کامل: خواندن از دو دیتابیس روی سرور های مجزا!
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
سلام دوستان
یه وب سایتی دارم ک قرار دیتابیسش روی دوتا سرور باشه!یعنی نسبت به زوج و فرد بودن شماره ملی افراد دیتا روی بانک ها جدا ذخیره بشه!یعنی اگر زوج بود جدول روی سرور A در غیر اینصورت جدول روی سرور B!
ذخیر کردن مشکلی نداره ولی برای خوندن از بانک چطور باید انجام بدم ک معلوم نشه ازروی دوتا بانک داره خونده میشن!


ممنون!
خيلي متوجه مشكلت نشدم؟ يكي از سرورهات رو بايد بكني سرور مادر،‌و داخلش يك تيبل ايجاد كني كه داخلش به نحوي

مشخص كني اطلاعات روي سرور شماره يك هست يا دو

يا اينكه اول شرور شماره 1 رو بگردي و اگر پيدا نكردي سرور شماره 2 و اگر پيدا نكردي كلا ثبت نشده

يا اينكه بگي اصلا چرا داري اين كار رو مي كني بابا جان يعني چي سرور رو زوج و فرد كردي آخه! ;)
(۱۴-آبان-۱۳۹۱, ۱۱:۰۵:۱۶)Di Di نوشته است: [ -> ]خيلي متوجه مشكلت نشدم؟ يكي از سرورهات رو بايد بكني سرور مادر،‌و داخلش يك تيبل ايجاد كني كه داخلش به نحوي

مشخص كني اطلاعات روي سرور شماره يك هست يا دو

يا اينكه اول شرور شماره 1 رو بگردي و اگر پيدا نكردي سرور شماره 2 و اگر پيدا نكردي كلا ثبت نشده

يا اينكه بگي اصلا چرا داري اين كار رو مي كني بابا جان يعني چي سرور رو زوج و فرد كردي آخه! ;)

سلام ببین دوتا دیتابیس دقیقا مثل هم دارم!بعد اطلاعات روی اونها ثبت میشه ولی وقتی مدیر سیستم میخواد ببینه باید همه داده هارا یک جا ببینه!والا منم دلیلش را نمیدونم استاد گفته اینو واسش بسازیم!فکر کنم قرار اینجا هم تفکیک جنسیتی بکنن!Whistleهمه داده ها را سرچ میکنه و یک جا نمایش باید بده!اگه نیازه تا بزام توضیح بدم
شما میتونین از sp_addlinkedserver برای شناسوندن سرور دومی به اولی استفاده کنید و در کوئری هاتون به صورت زیر عمل کنید

کد:
SELECT *
FROM server1table
    INNER JOIN server2.database.dbo.server2table ON .....
لینک زیر هم میتونه کمکتون کنه

کد:
http://technet.microsoft.com/en-us/library/ms190479.aspx
سلام یکی از دوستان گفتن با این دستور این کار را انجام بدم ولی نمیشه!یعنی نتیجه دیتابیس دوم را نگه میداره فقط میشه راهنمایی کنید لطفا؟
کد:
DataTable dt = new DataTable();
            SqlDataAdapter da = new SqlDataAdapter(q, SqlWorker.con1);
            da.Fill(dt);
            da = new SqlDataAdapter(q, SqlWorker.con2);
            da.Fill(dt);
            
            return dt;
با تشکر
سلام

نمیدونم این بدردتون میخوره یا نه
اس کیو ال سرور این قدرت رو داره که اطلاعات رو تو چند فایل ذخیره کنه .
یعنی برای دیتابیستون 3 تا فایل میسازین فایل اصلی -فایل دوم و فایل لاگ
[تصویر:  Create_SQL_Database_SCR1.PNG]
حالا میتونیم به سرور بگیم مثلا وقتی فلان فیلد فلان جدول بزرگتر از فلان مقدار بود در فایل اصلی ثبت کن و در غیر اینصورت در فایل دوم در این حالت اطلاعات ما بصورت فیزیکی در دو تا فایل ذخیره میشن که هر فایلی میتونه در هارد جدا باشه ولی وقتی از اطلاعات این جدول استفاده میکنیم اصلا متوجه این عملیات نمیشیم چون مدیریتش با خود سرور هست .

این کار اسمش هست table partition

ولی اگه فقط هدف حل همین مسئله باشه و باید دیتابیس دو تا باشه میشه همچین کاری هم کرد :
دو حالت در نظر میگیرم :
دو تا دیتابیس روی دو تا سرور مجزا داریم که یکیش رو میگیم سرور1 و اونیکی سرور2
این همون حالتی هست که دوستمون لرد گفته
دو تا جدول داریم رو هر دیتابیس با اسم tbl_Clone
حالا میخواهییم عملیات رو روی سرور1 انجام بدیم
پس اول یه synonyms رو سرور1 ایجاد میکنیم از جدول همانند که روی سرور2 هست
کد:
CREATE SYNONYM [dbo].[syn_server2] FOR [server2].[Mydbonserver1].[dbo].[tbl_Clone]
بعد یه ویو درست میکنیم تو سرور1 با این دستور :
کد:
SELECT * FROM dbo.syn_server2 WHERE (id>10)
UNION ALL
SELECT * FROM tbl_Clone WHERE (id>10)
اینجوری از هر دو دیتابیس میخونی و مجموع نتایج ادغام میشن و نمایش داده میشن :)
حالت دوم هم اینمیشه که هر دو دیتابیس رو یک سرور هستن و تو یک اینستنس
تو این حالت نیازی به ساخت synonym نیست
و دستور رو میتونییم به این حالت بنویسیم :

کد:
SELECT * FROM dbo.db1.tbl_Clone WHERE (id>10)
UNION ALL
SELECT * FROM dbo.db2.tbl_Clone WHERE (id>10)

نکته : اگر از synonym استفاده کنیم باید سرور2 به سرور1 بشناسونیم :
sp_addlinkedserver
و در سرور2 حق دسترسی بدیم که ساده ترینش ایجاد BUILTIN\Users هست
(۲۰-آذر-۱۳۹۱, ۲۰:۵۸:۰۴)hamed_Arfaee نوشته است: [ -> ]سلام

پس اول یه synonyms رو سرور1 ایجاد میکنیم از جدول همانند که روی سرور2 هست
کد:
CREATE SYNONYM [dbo].[syn_server2] FOR [server2].[Mydbonserver1].[dbo].[tbl_Clone]

سلام ممنون از پاسختون!
چند مورد را اصلا متوجه نشدم اگر ممکنه یکم بیشتر توضیح بدین!synonyms چیه ؟و چرا درست میکنیم؟
server2 بجای این من باید چی بزارم؟اسم کاتلگ (اسم بانکم )را؟
(۲۰-آذر-۱۳۹۱, ۲۳:۴۷:۴۵)Ghoghnus نوشته است: [ -> ]
(۲۰-آذر-۱۳۹۱, ۲۰:۵۸:۰۴)hamed_Arfaee نوشته است: [ -> ]سلام

پس اول یه synonyms رو سرور1 ایجاد میکنیم از جدول همانند که روی سرور2 هست
کد:
CREATE SYNONYM [dbo].[syn_server2] FOR [server2].[Mydbonserver1].[dbo].[tbl_Clone]

سلام ممنون از پاسختون!
چند مورد را اصلا متوجه نشدم اگر ممکنه یکم بیشتر توضیح بدین!synonyms چیه ؟و چرا درست میکنیم؟
server2 بجای این من باید چی بزارم؟اسم کاتلگ (اسم بانکم )را؟

synonym برای خلاصه کردن استفاده میشه یعنی بجای اینکه بنویسیم :
کد:
select * from [server2].[Mydbonserver2].[dbo].[tbl_Clone]
خلاصه میکنیم و مینویسیم :
کد:
select * from dbo.syn_server2
وقتی شما دو تا سرور داری به هر کدوم چجوری وارد میشین یا با آی پی یا نام سرور.
Mydbonserver2 هم اسم دیتابیستون روی سرور2 هست که من اشتباهی نوشته بودم Mydbonserver1 :)