এসকিউএল সার্ভারে স্থানীয় এবং বৈশ্বিক অস্থায়ী টেবিলগুলির মধ্যে পার্থক্য কী?
এসকিউএল সার্ভারে স্থানীয় এবং বৈশ্বিক অস্থায়ী টেবিলগুলির মধ্যে পার্থক্য কী?
উত্তর:
আমি এই ব্যাখ্যাটি বেশ স্পষ্ট দেখতে পেয়েছি (এটি টেকনেটের খাঁটি অনুলিপি ):
অস্থায়ী টেবিল দুটি ধরণের রয়েছে: স্থানীয় এবং বৈশ্বিক। স্থানীয় অস্থায়ী টেবিলগুলি কেবল তখনই তাদের স্রষ্টাদের কাছে এসকিউএল সার্ভারের উদাহরণের সাথে একই সংযোগের সময় দৃশ্যমান হয় যেমন টেবিলগুলি প্রথম তৈরি করা হয়েছিল বা রেফারেন্স করা হয়েছিল। স্থানীয় অস্থায়ী টেবিলগুলি ব্যবহারকারী এসকিউএল সার্ভারের উদাহরণ থেকে সংযোগ বিচ্ছিন্ন করার পরে মুছে ফেলা হয়। গ্লোবাল অস্থায়ী টেবিলগুলি যে কোনও ব্যবহারকারীর এবং যে কোনও সংযোগ তৈরি হওয়ার পরে তাদের কাছে দৃশ্যমান এবং যখন সারণীটি উল্লেখ করা হয় এমন সমস্ত ব্যবহারকারী এসকিউএল সার্ভারের উদাহরণ থেকে সংযোগ বিচ্ছিন্ন করে deleted
সারণী ভেরিয়েবল ( DECLARE @t TABLE
) কেবল এটির সংযোগের জন্য দৃশ্যমান যা এটি তৈরি করে এবং ব্যাচ বা সঞ্চিত প্রক্রিয়া শেষ হয়ে গেলে মুছে ফেলা হয়।
স্থানীয় অস্থায়ী টেবিলগুলি ( CREATE TABLE #t
) কেবল এটির সংযোগের জন্য দৃশ্যমান যা এটি তৈরি করে এবং সংযোগটি বন্ধ হয়ে গেলে মুছে ফেলা হয়।
বিশ্বব্যাপী অস্থায়ী টেবিলগুলি ( CREATE TABLE ##t
) প্রত্যেকের কাছে দৃশ্যমান এবং সেগুলি মুছে ফেলা হবে যখন সেগুলি উল্লেখ করা সমস্ত সংযোগ বন্ধ হয়ে গেছে।
টেম্পডিবি স্থায়ী টেবিলগুলি ( USE tempdb CREATE TABLE t
) সবার কাছে দৃশ্যমান এবং সার্ভার পুনরায় চালু হওয়ার পরে মুছে ফেলা হয়।
১) স্থানীয় অস্থায়ী টেবিলটি কেবল সংযোগের সময়কালের জন্য বা যৌগিক বিবৃতিটির ভিতরে সংশ্লেষের বিবরণের সময়কালের জন্য নির্ধারিত থাকে।
স্থানীয় অস্থায়ী টেবিলগুলি কেবলমাত্র এসকিউএল সার্ভার সেশন বা সংযোগ (যার অর্থ একক ব্যবহারকারীর জন্য) উপলব্ধ থাকে যা টেবিলগুলি তৈরি করে। সারণি তৈরি করা সেশনটি বন্ধ হয়ে গেলে এগুলি স্বয়ংক্রিয়ভাবে মুছে ফেলা হয়। স্থানীয় অস্থায়ী টেবিলের নামটি একক হ্যাশ ("#") চিহ্ন দিয়ে তাকানো থাকে।
CREATE TABLE #LocalTemp
(
UserID int,
Name varchar(50),
Address varchar(150)
)
GO
insert into #LocalTemp values ( 1, 'Name','Address');
GO
Select * from #LocalTemp
স্থানীয় টেম্প টেবিলের সুযোগ বর্তমান ব্যবহারকারীর বর্তমান সেশনে বিদ্যমান ক্যোয়ারী উইন্ডোতে বিদ্যমান। আপনি যদি বর্তমান ক্যোয়ারী উইন্ডোটি বন্ধ করবেন বা একটি নতুন কোয়েরি উইন্ডোটি খুলবেন এবং উপরে তৈরি টেম্প টেবিলটি সন্ধান করার চেষ্টা করবেন, এটি আপনাকে ত্রুটি দেবে।
২) একটি গ্লোবাল অস্থায়ী টেবিলটি ডাটাবেসে স্থায়ীভাবে থেকে যায়, তবে সারিগুলি কেবলমাত্র একটি প্রদত্ত সংযোগের মধ্যেই উপস্থিত থাকে। সংযোগ বন্ধ হয়ে গেলে বিশ্বব্যাপী অস্থায়ী টেবিলের ডেটা অদৃশ্য হয়ে যায়। যাইহোক, পরবর্তী সময় ডাটাবেস খোলার সময় সারণির সংজ্ঞা অ্যাক্সেসের জন্য ডাটাবেসের সাথে থাকে।
গ্লোবাল টেম্প টেবিলগুলি সমস্ত এসকিউএল সার্ভার সেশন বা সংযোগগুলির জন্য উপলব্ধ (যার অর্থ সমস্ত ব্যবহারকারী)। এগুলি যে কোনও এসকিউএল সার্ভার সংযোগ ব্যবহারকারী দ্বারা তৈরি করা যেতে পারে এবং সমস্ত এসকিউএল সার্ভার সংযোগ বন্ধ হয়ে গেলে এগুলি স্বয়ংক্রিয়ভাবে মোছা হয়। গ্লোবাল অস্থায়ী টেবিলের নামটি ডাবল হ্যাশ ("##") চিহ্ন দিয়ে তাকানো থাকে।
CREATE TABLE ##GlobalTemp
(
UserID int,
Name varchar(50),
Address varchar(150)
)
GO
insert into ##GlobalTemp values ( 1, 'Name','Address');
GO
Select * from ##GlobalTemp
স্থানীয় অস্থায়ী টেবিলগুলি কেবলমাত্র বর্তমান এসকিউএল সার্ভার সংযোগের জন্য দৃশ্যমান থাকাকালীন সমস্ত এসকিউএল সার্ভার সংযোগের কাছে দৃশ্যমান।
অনলাইন বই থেকে উদ্ধৃতি:
স্থানীয় অস্থায়ী টেবিলগুলি কেবল বর্তমান অধিবেশনে দৃশ্যমান; গ্লোবাল অস্থায়ী টেবিলগুলি সমস্ত সেশনে দৃশ্যমান।
অস্থায়ী টেবিলগুলি সুযোগের বাইরে চলে গেলে স্বয়ংক্রিয়ভাবে বাদ পড়ে যায়, যদি না ড্রপ টেবিল ব্যবহার করে স্পষ্টভাবে বাদ দেওয়া হয়:
স্থানীয় অস্থায়ী সারণী : আপনি যদি স্থানীয় অস্থায়ী টেবিলগুলি তৈরি করেন এবং তারপরে অন্য সংযোগটি খোলেন এবং ক্যোয়ারীটি চেষ্টা করে দেখুন, আপনি নীচের ত্রুটি পাবেন।
অস্থায়ী সারণীগুলি কেবল সেগুলি তৈরি করে যা সেগুলি তৈরি করে within
গ্লোবাল অস্থায়ী সারণী : কখনও কখনও, আপনি একটি অস্থায়ী টেবিল তৈরি করতে চাইতে পারেন যা অন্যান্য সংযোগগুলি অ্যাক্সেসযোগ্য। এই ক্ষেত্রে, আপনি বিশ্বব্যাপী অস্থায়ী টেবিলগুলি ব্যবহার করতে পারেন।
গ্লোবাল অস্থায়ী টেবিলগুলি কেবল তখনই নষ্ট হয়ে যায় যখন এর সাথে সম্পর্কিত সমস্ত সেশনগুলি বন্ধ হয়ে যায়।
এটি উল্লেখযোগ্য যে এখানে রয়েছে: ডাটাবেস স্কোপড গ্লোবাল অস্থায়ী টেবিলগুলি (বর্তমানে কেবলমাত্র অ্যাজুরি এসকিউএল ডেটাবেস দ্বারা সমর্থিত)।
এসকিউএল সার্ভারের জন্য গ্লোবাল অস্থায়ী টেবিলগুলি (## টেবিলের নাম দিয়ে শুরু করা) টেম্পটিডিবিতে সংরক্ষণ করা হয় এবং পুরো এসকিউএল সার্ভারের উদাহরণগুলিতে সমস্ত ব্যবহারকারীর সেশনের মধ্যে ভাগ করা হয়।
অ্যাজুর এসকিউএল ডাটাবেস বিশ্বব্যাপী অস্থায়ী টেবিলগুলিকে সমর্থন করে যা টেম্পডিবিতেও সংরক্ষণ করা হয় এবং ডাটাবেস স্তরে যায় op এর অর্থ হ'ল বৈশ্বিক অস্থায়ী টেবিলগুলি একই অজুর এসকিউএল ডেটাবেসের মধ্যে সমস্ত ব্যবহারকারীর সেশনের জন্য ভাগ করা আছে। অন্যান্য ডাটাবেসগুলির ব্যবহারকারীর সেশনগুলি বিশ্বব্যাপী অস্থায়ী টেবিলগুলিতে অ্যাক্সেস করতে পারে না।
-- Session A creates a global temp table ##test in Azure SQL Database testdb1 -- and adds 1 row CREATE TABLE ##test ( a int, b int); INSERT INTO ##test values (1,1); -- Session B connects to Azure SQL Database testdb1 -- and can access table ##test created by session A SELECT * FROM ##test ---Results 1,1 -- Session C connects to another database in Azure SQL Database testdb2 -- and wants to access ##test created in testdb1. -- This select fails due to the database scope for the global temp tables SELECT * FROM ##test ---Results Msg 208, Level 16, State 0, Line 1 Invalid object name '##test'
পরিবর্তিত ডেটাবেস কনফিগারেশন পরিবর্তন করুন
GLOBAL_TEMPORARY_TABLE_AUTODROP = { ON | OFF }
প্রয়োগগুলি: অ্যাজুর এসকিউএল ডেটাবেস (বৈশিষ্ট্যটি জনসাধারণের পূর্বরূপে রয়েছে)
গ্লোবাল অস্থায়ী টেবিলগুলির জন্য অটো-ড্রপ কার্যকারিতা সেট করার অনুমতি দেয়। ডিফল্টটি চালু আছে, যার অর্থ কোনও অস্থায়ী ব্যবহার না করা অবস্থায় গ্লোবাল অস্থায়ী টেবিলগুলি স্বয়ংক্রিয়ভাবে বাদ পড়ে। অফে সেট করা থাকলে, বিশ্বব্যাপী অস্থায়ী টেবিলগুলিকে স্পষ্টভাবে একটি ড্রপ টেবিল বিবৃতি ব্যবহার করে ফেলে দেওয়া উচিত বা স্বয়ংক্রিয়ভাবে সার্ভার পুনঃসূচনাতে ফেলে দেওয়া হবে।
অ্যাজুরে এসকিউএল ডেটাবেস একক ডাটাবেস এবং ইলাস্টিক পুলের সাহায্যে এই বিকল্পটি এসকিউএল ডাটাবেস সার্ভারের পৃথক ব্যবহারকারী ডাটাবেসে সেট করা যেতে পারে। এসকিউএল সার্ভার এবং অ্যাজুরি এসকিউএল ডেটাবেস পরিচালিত দৃষ্টান্তে, এই বিকল্পটি টেম্পডিবিতে সেট করা আছে এবং পৃথক ব্যবহারকারী ডেটাবেসগুলির সেটিংটির কোনও প্রভাব নেই।
আমি কোনও উত্তর দেখিনি যা ব্যবহারকারীদের দেখায় যেখানে আমরা একটি গ্লোবাল টেম্প সারণী পেতে পারি। এসএসএমএসের মধ্যে নেভিগেট করার সময় আপনি একই স্থানে স্থানীয় এবং গ্লোবাল টেম্প টেবিলগুলি দেখতে পারেন। এই লিঙ্কটি থেকে নীচে নেওয়া স্ক্রিনশট ।
ডাটাবেস -> সিস্টেম ডাটাবেস -> টেম্পডিবি -> অস্থায়ী সারণী