আমরা সেই ক্ষেত্রটি এবং এর সমস্ত মান মুছে ফেলার সিদ্ধান্ত নিয়েছি: ডিবি কর্মক্ষমতা ছাড়াই, সঙ্কুচিত না করে, এনটেক্সট ফিল্ড এবং তার সমস্ত মান এবং মুদ্রণ স্থান ছাড়ার কোনও উপায় আছে?
আমি ব্যবহার করার পরামর্শ দেব (বিওএল থেকে:)
DBCC CLEANTABLE
(
{ database_name | database_id | 0 }
, { table_name | table_id | view_name | view_id }
[ , batch_size ]
)
[ WITH NO_INFOMSGS ]
ভেরিয়েবল-দৈর্ঘ্যের কলামটি বাদ দেওয়ার পরে ডিবিসিসি ক্ল্যান্টেবল স্থান পুনরায় দাবি করে। ভেরিয়েবল-দৈর্ঘ্যের কলামটি নিম্নলিখিত তথ্যগুলির মধ্যে একটি হতে পারে: বর্ণচর, এনভারচার, ভারচার (সর্বাধিক), এনভারচার (সর্বাধিক), ভের্বাইনারি, ভার্বাইনারি (সর্বাধিক), পাঠ্য, নেক্সট, চিত্র, স্ক্যালো_ভ্যারেন্ট এবং এক্সএমএল। একটি নির্দিষ্ট দৈর্ঘ্যের কলামটি বাদ দেওয়ার পরে কমান্ডটি স্থান পুনরায় দাবি করে না।
!! সতর্কতা !! ( সাবধানে ব্যাচের আকারটি ব্যবহার করুন - যদি আপনার টেবিলটি বিশাল হয় তবে এই প্যারামিটারটি ব্যবহার করার পরামর্শ দেওয়া হবে) :
ডিবিসিসি ক্ল্যান্টেবল এক বা একাধিক লেনদেন হিসাবে চলে। যদি একটি ব্যাচের আকার নির্দিষ্ট না করা থাকে, কমান্ডটি একটি লেনদেনে পুরো টেবিলটি প্রসেস করে এবং টেবিলটি অপারেশনের সময় একচেটিয়াভাবে লক হয়ে যায় । কিছু বড় সারণীর জন্য, একক লেনদেনের দৈর্ঘ্য এবং লগ স্পেসের প্রয়োজন হতে পারে। যদি একটি ব্যাচের আকার নির্দিষ্ট করা থাকে তবে কমান্ডটি নির্দিষ্ট সংখ্যক সারি সহ প্রতিটি লেনদেনের ধারাবাহিকতায় চলে। অন্য লেনদেনের অভ্যন্তরে লেনদেন হিসাবে ডিবিসিসি ক্লিন্টেবল চালানো যাবে না।
এই অপারেশনটি সম্পূর্ণরূপে লগড।
একটি সাধারণ DBCC CLEANTABLE
রেপ্রোটি প্রমাণ করবে যে সঙ্কুচিত হওয়ার চেয়ে ভাল (এবং খণ্ডিত হওয়ার কোনও উদ্বেগ নেই :-)
-- clean up
drop table dbo.Test
-- create test table with ntext column that we will drop later
create table dbo.Test (
col1 int
,col2 char(25)
,col3 ntext
);
-- insert 1000 rows of test data
declare @cnt int;
set @cnt = 0;
while @cnt < 1000
begin
select @cnt = @cnt + 1;
insert dbo.Test (
col1
,col2
,col3
)
values (
@cnt
,'This is a test row # ' + CAST(@cnt as varchar(10)) + 'A'
,REPLICATE('KIN', ROUND(RAND() * @cnt, 0))
);
end
--drop the ntext column
ALTER TABLE dbo.Test DROP COLUMN col3 ;
--reclaim the space from the table
-- Note that my table is only having 1000 records, so I have not used a batch size
-- YMMV .. so find a maintenance window and you an appropriate batch size
-- TEST TEST and TEST before implementing in PROD.. so you know the outcome !!
DBCC CLEANTABLE('tempdb', 'dbo.Test') ;