বৈদেশিকভাবে ডেটা মুছে ফেলা / আপডেট করা


15

ওরাকল থেকে ডেটা ফরেন্সিকালি মুছে ফেলা দরকার। আমি যদি কেবল এটি মুছে ফেলি তবে আমার বোঝাপড়াটি হ'ল সেই স্থানটি পুনরায় ব্যবহার না করা অবধি ডেটা প্রকৃতপক্ষে ডেটা ফাইলে থাকবে। আমি পুনরায় / সংরক্ষণাগার / পূর্বাবস্থার স্থানটি সম্পর্কে উদ্বিগ্ন নই, সেগুলি দ্রুত যুক্তিসঙ্গত হবে।

ডেটা ফাইল থেকে ডেটাটি সরিয়ে ফেলার সত্যতা নিশ্চিত করার জন্য কি কোনও পদ্ধতি আছে?

উত্তর:


15

এটি একটি আকর্ষণীয় প্রশ্ন: কখন ওরাকল সত্যই শারীরিকভাবে ডেটা মুছবে?

ওরাকল এর ডেটা ইউনিট একটি ব্লক। আসুন দেখুন আমরা যখন একটি সারি মুছি তখন কী হয়।

11gR2 এ একটি সাধারণ টেবিল সহ এখানে একটি উদাহরণ রয়েছে (" কীভাবে ওরাকল ডেটা ব্লকটি ফেলা যায়? " দেখুন):

CREATE TABLE test_delete_data(id NUMBER,data VARCHAR2(100));
INSERT INTO test_delete_data VALUES (1, rpad('1', 100, '1'));
INSERT INTO test_delete_data VALUES (2, rpad('2', 100, '2'));
INSERT INTO test_delete_data VALUES (3, rpad('3', 100, '3'));
COMMIT;

SELECT dbms_rowid.rowid_to_absolute_fno(rowid, user, 'TEST_DELETE_DATA') fileno,
       dbms_rowid.rowid_block_number(rowid) blockno
  FROM test_delete_data;

-- replace with values from query
alter system dump datafile 4 block 16573;

আপনার user_dump_destডিরেক্টরিতে তৈরি ফাইলটির শেষে আপনার এমন কিছু পাওয়া উচিত :

data_block_dump,data header at 0x8b02264
===============
[...]
block_row_dump:
tab 0, row 0, @0x1f2d
tl: 107 fb: --H-FL-- lb: 0x1  cc: 2
col  0: [ 2]  c1 02
col  1: [100]
 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31
 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31
 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31
 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31
tab 0, row 1, @0x1ec2
tl: 107 fb: --H-FL-- lb: 0x1  cc: 2
col  0: [ 2]  c1 03
col  1: [100]
 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32
 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32
 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32
 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32
tab 0, row 2, @0x1e57
tl: 107 fb: --H-FL-- lb: 0x1  cc: 2
col  0: [ 2]  c1 04
col  1: [100]
 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33
 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33
 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33
 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33
end_of_block_dump

আমি যদি দ্বিতীয় সারিটি মুছে ফেলি, প্রতিশ্রুতিবদ্ধ এবং একই ব্লকটি ফেলে দিই তবে আমি এরকম কিছু পাব:

block_row_dump:
tab 0, row 0, @0x1f2d
tl: 107 fb: --H-FL-- lb: 0x0  cc: 2
col  0: [ 2]  c1 02
col  1: [100]
 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31
 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31
 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31
 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31 31
tab 0, row 1, @0x1ec2
tl: 2 fb: --HDFL-- lb: 0x2 
tab 0, row 2, @0x1e57
tl: 107 fb: --H-FL-- lb: 0x0  cc: 2
col  0: [ 2]  c1 04
col  1: [100]
 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33
 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33
 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33
 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33 33
end_of_block_dump

রেকর্ডটি এখনও আছে (একটি Dপতাকা সেট সহ)। যদি আমরা প্রকৃত বাইনারি ডেটা ( block header dumpবিভাগের ঠিক আগে দেখি তবে দেখতে পাব যে ডেটাটি এখনও ওভাররাইট করা হয়নি:

8B040C0 33336404 33333333 33333333 33333333  [.d33333333333333]
8B040D0 33333333 33333333 33333333 33333333  [3333333333333333]
        Repeat 4 times
8B04120 33333333 023C3333 03C10202 32323264  [333333<.....d222]
8B04130 32323232 32323232 32323232 32323232  [2222222222222222]
        Repeat 5 times
8B04190 02002C32 6402C102 31313131 31313131  [2,.....d11111111]
8B041A0 31313131 31313131 31313131 31313131  [1111111111111111]
        Repeat 4 times
8B041F0 31313131 31313131 31313131 30A30602  [111111111111...0]

তথ্যকে ওভাররাইট করতে বাধ্য করার একটি উপায় হ'ল সারিটি মোছার আগে এটি অর্থহীন মানটিতে আপডেট করা। অ্যাব * ট্রি ইনডেক্সে + সন্নিবেশ করতে আপডেটগুলি অনুবাদ করা হওয়ায় এটি সূচির সাথে কাজ করবে না।


+1 "তথ্যকে ওভাররাইট করতে বাধ্য করার একটি উপায় হ'ল সারিটি মোছার আগে এটি অর্থহীন মানটিতে আপডেট করা" "

দুর্দান্ত উত্তর! আমি যুক্ত করতে চাই যে আপনি ট্রিগার পরিবর্তে "মুছার আগে আপডেট" প্রয়োগ করতে পারেন ।
ora-600

আপনি যদি তা নিশ্চিত করতে চান যে সূচী তথ্যটিও ওভাররাইট করা হয়েছে আপনি টেবিলটি সঙ্কুচিত করতে পারেন, সমস্ত সূচী পুনরায় তৈরি করতে পারেন (সেই টেবিলের), পিসিT_FREE = 99 দিয়ে একটি নতুন টেবিল তৈরি করুন যা আপনি সমস্ত খালি জায়গা ব্যয় না করা পর্যন্ত প্রসারিত করুন এবং তারপরে এই টেবিলটি পূরণ করুন ডামি সারি। অবশেষে আপনি টেবিলটি ফাঁকা স্থানটিতে ফেলে দিতে পারেন। এটি অবশ্যই কোনও কাজ নয় যা আপনার প্রতিটি মুছার পরে স্বয়ংক্রিয়ভাবে করা উচিত। এই ক্রিয়াকলাপটি সম্পাদন করার আগে অটো এক্সেটেন্ড অক্ষম করার বিষয়টিও মনে রাখবেন।
ora-600

0

আমি মনে করি না যে একটি মুছে ফেলার পরেও ডেটা অব্যাহত থাকে তবে আপনি সঠিক যে স্থানটি পুনরায় পূরণ না হওয়া অবধি টেবিলে এটি ব্যবহার করা হবে। একটি টেবিলের শীর্ষ স্থান ব্যবহার উচ্চ জলের চিহ্ন হিসাবে পরিচিত। এটি সম্পর্কে টম কিটের একটি দুর্দান্ত (অবাক করা) পোস্ট রয়েছে।

আপনি টেবিলটি পুনর্নির্মাণের মাধ্যমে উচ্চ জলের চিহ্নকে হ্রাস করুন:

alter table my_table_name move

বা এটি কেটে; যদিও সক্রিয় সারণীতে এটি অবশ্যই কোনও বিকল্প নয়।


আইএসটিবিসি, তবে আমি মুছে ফেলার পরেও ডেটা ("কাঁচা" ফর্মের) মধ্যে উপস্থিত থাকার আশা করব। এটি সেখানে থাকবে, সারণীটি সারিটি "লিঙ্কযুক্ত" এবং স্থান হিসাবে মুক্ত হিসাবে চিহ্নিত করা হয়েছে। টম কিয়েট এটি বলেছেন "সুতরাং, আপনি যখন তথ্য মুছবেন তখন ব্লকটি এখনও" ব্লক ", এটি কেবল একটি ব্লক যা একবার সক্রিয় সারি ছিল - তবে আর হয় না।" আমি যদিও এটি সম্পর্কে 100% নিশ্চিত নই, সুতরাং কোনও ডাউনওয়েট নেই। :)

ক্যাগকোবয়, তিনি আরও বলেছেন "আমাদের অনেকগুলি ব্লক থাকতে পারে যার মধ্যে আর ডেটা থাকে না "। ভবিষ্যতে ব্যবহারের জন্য স্থানটি রাখা হয়েছে তবে ডেটা চলে যায় তার অর্থ আমি সর্বদা এটি গ্রহণ করেছি। আমি যদিও :-) ভুল প্রমাণ করতে ইচ্ছুক।
বেন

3
আমি আপনার পয়েন্ট দেখুন. তবে, আমি এটাকে লক্ষ্য করবো যে তিনি "আমাদের অনেকগুলি ব্লক থাকতে পারে যার মধ্যে সক্রিয় ডেটা নেই।" মূলত, আমি আশা করব না ওরাকল মুছে ফেলা ডেটা ওভাররাইট করবে - আমি মনে করি এটি কেবল এটির সাথে সম্পর্কিত নয়।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.