সমস্ত ব্যবহারকারীর টেবিলগুলি কীভাবে বাদ দেবেন?


160

আমি কীভাবে ওরাকলে সমস্ত ব্যবহারকারীর টেবিলগুলি ফেলে দিতে পারি?

আমার বাধা নিয়ে সমস্যা আছে have আমি যখন সমস্ত অক্ষম করি তখনও এটি সম্ভব হয় না।


প্রতিবন্ধকতাগুলি অক্ষম করার পরিবর্তে কীভাবে বাদ দেবেন?
ডেভিড অলড্রিজ

উত্তর:


294
BEGIN
   FOR cur_rec IN (SELECT object_name, object_type
                   FROM user_objects
                   WHERE object_type IN
                             ('TABLE',
                              'VIEW',
                              'MATERIALIZED VIEW',
                              'PACKAGE',
                              'PROCEDURE',
                              'FUNCTION',
                              'SEQUENCE',
                              'SYNONYM',
                              'PACKAGE BODY'
                             ))
   LOOP
      BEGIN
         IF cur_rec.object_type = 'TABLE'
         THEN
            EXECUTE IMMEDIATE 'DROP '
                              || cur_rec.object_type
                              || ' "'
                              || cur_rec.object_name
                              || '" CASCADE CONSTRAINTS';
         ELSE
            EXECUTE IMMEDIATE 'DROP '
                              || cur_rec.object_type
                              || ' "'
                              || cur_rec.object_name
                              || '"';
         END IF;
      EXCEPTION
         WHEN OTHERS
         THEN
            DBMS_OUTPUT.put_line ('FAILED: DROP '
                                  || cur_rec.object_type
                                  || ' "'
                                  || cur_rec.object_name
                                  || '"'
                                 );
      END;
   END LOOP;
   FOR cur_rec IN (SELECT * 
                   FROM all_synonyms 
                   WHERE table_owner IN (SELECT USER FROM dual))
   LOOP
      BEGIN
         EXECUTE IMMEDIATE 'DROP PUBLIC SYNONYM ' || cur_rec.synonym_name;
      END;
   END LOOP;
END;
/

1
এটি আপনি কী করতে চেয়েছিলেন তার উপর নির্ভর করে। আপনি ড্রপ ব্যবহারকারী ক্যাসকেডও ব্যবহার করতে পারেন তবে আপনাকে ব্যবহারকারীকে পুনরায় তৈরি করতে হবে।
হেনরি গাও

1
এটি খুব ভালভাবে কাজ করেছে এবং এর প্রয়োজন নেই যে আমার ব্যবহারকারীকে মুছতে এবং পুনরায় যুক্ত করার জন্য ওরাকল সার্ভারে আমার কর্তৃত্ব রয়েছে। সাবাস। দুর্দান্ত উত্তর।
জাঙ্গোফান

আমি java.lang.IllegalArgumentException পেয়েছি: মৃত্যুদন্ড কার্যকর করার জন্য কোনও এসকিউএল নির্বাচিত হয়নি .. আমার ধারণা, কার_রেক ঘোষিত হয়নি is এটি কীভাবে ঘোষণা করবেন যেহেতু এটি কিছুটা বজেক্ট_নাম, অবজেক্ট_ টাইপ নিয়ে গঠিত?
লিজপ বাঁধ

3
আমি মনে করি স্ক্রিপ্টটি বিপজ্জনক হতে পারে। যদি আপনি এসওয়াইএসডিবিএ হিসাবে সংযুক্ত থাকেন তবে এটি সমস্ত ব্যবহারকারীর সমস্ত টেবিল এবং সমস্ত সিস্টেম সারণী মুছে দেয়। অনুশীলনে আপনি পুরো ডিবি মুছুন। সতর্ক হোন!
জারদো

এটি ব্যবহারকারীদের জন্য একটি নির্দিষ্ট স্কীমের অনুমতি রয়েছে তবে বিকাশের পরিবেশে ডিবিএ অনুমতি নয়।
হেনরি গাও

201

আপনি যদি এটি করার জন্য খুব সহজ উপায় চান তবে .. আমি অতীতে ব্যবহৃত একটি স্ক্রিপ্ট এখানে

select 'drop table '||table_name||' cascade constraints;' from user_tables;

এটি স্কিমাতে সমস্ত টেবিলের জন্য ড্রপ কমান্ডের একটি সিরিজ মুদ্রণ করবে। এই ক্যোয়ারির ফলাফলটি স্পুল করুন এবং এটি সম্পাদন করুন।

সূত্র: https://forums.oracle.com/forums/thread.jspa?threadID=614090

একইভাবে আপনি যদি টেবিলের চেয়ে বেশি সাফ করতে চান তবে আপনার প্রয়োজন অনুসারে নিম্নলিখিত সম্পাদনা করতে পারেন

select 'drop '||object_type||' '|| object_name || ';' from user_objects where object_type in ('VIEW','PACKAGE','SEQUENCE', 'PROCEDURE', 'FUNCTION', 'INDEX')

46

আমার পক্ষে কাজ করা আর একটি উত্তর হ'ল ( http://snipt.net/Fotinakis/DP-all-tables-and-constraints-within-an-oracle-schema/ এর ক্রেডিট )

BEGIN

FOR c IN (SELECT table_name FROM user_tables) LOOP
EXECUTE IMMEDIATE ('DROP TABLE "' || c.table_name || '" CASCADE CONSTRAINTS');
END LOOP;

FOR s IN (SELECT sequence_name FROM user_sequences) LOOP
EXECUTE IMMEDIATE ('DROP SEQUENCE ' || s.sequence_name);
END LOOP;

END;

নোট যে এই কাজ করে অবিলম্বে আপনি এটি চালানোর পর। এটি এমন কোনও স্ক্রিপ্ট তৈরি করে না যা আপনাকে অন্য কোথাও আটকাতে হবে (অন্য উত্তরগুলির মতো এখানে)। এটি সরাসরি ডিবিতে চলে।


1
এটি আমার পক্ষে কাজ করে তবে আমাকে লেখার মাধ্যমে টেবিলের নামটি উদ্ধৃত করতে হয়েছিল 'DROP TABLE "' || c.table_name || '" CASCADE CONSTRAINTS'। এটি প্রয়োজনীয়, যদি টেবিলের নামগুলি ছোট হয়।
সিভ করা

@ এটি জানতে পেরে ভাল লাগছে! আমি কেবলমাত্র আপার কেস টেবিলগুলি ব্যবহার করি তাই এর আগে কখনও আমার মুখোমুখি হয়নি।
কাজানাকি

আপনার টেবিলের নামটি যদি কোনও সংরক্ষিত শব্দ হয় তবে +1 @ বাছাইয়েরও দরকার। এছাড়াও, আমি বিবৃতিটির PURGEশেষে যুক্ত করব DROP
йый

সিলিংয়ের পরামর্শ অনুসারে উদ্ধৃতি স্থির করা হয়েছে।
কাজানাকি

ORA-24005: একিউ টেবিলে DDL সঞ্চালনের জন্য অনুপযুক্ত ইউটিলিটিগুলি
স্কাইলার সেভল্যান্ড


12

সহজ উপায় হ'ল ক্যাসকেড কমান্ডের সাহায্যে ব্যবহারকারীকে ফেলে দেওয়া।

DROP USER username CASCADE

5
এটি সঠিক পদ্ধতি নয়। ব্যবহারকারী কোনও সামগ্রী মুছে ফেলার জন্য এটি মুছে ফেলার একটি পদ্ধতি যা ব্যবহারকারীর মোছার আগে ব্যবহারকারী টেবিলগুলি মুছতে CASCADE ব্যবহার করা দরকার AD ব্যবহারকারীকে মুছে ফেলা সে যে প্রশ্ন করেছিল তা নয়।
জাঙ্গোফান

3
বিশেষত স্কিমিটি বড় হলে লক্ষ্যটি খুব কার্যকরভাবে সম্পাদন করে। দেখে মনে হচ্ছে আপনার ক্ষেত্রে আপনার ডিবিএর সাথে কোনও যোগাযোগ এড়ানো উচ্চ অগ্রাধিকার। আমি এমন সমাধানগুলিকে পছন্দ করি যা আপনার ডিবিএর সাথে সম্পর্ক বাড়িয়ে তোলে - বিশেষত যদি আপনার ডিবিএ অধিকার না থাকে।
ব্রায়ান

2
@ ব্রায়ান আপনি ভুল ধরেছেন কখনও কখনও একটি ডিবিএ মোটেও হয় না, বা তিনি অন্য সংস্থায় আছেন। বা সর্বাধিক সাধারণ কেস - তিনি আপনাকে যা প্রয়োজন তা করতে অ্যাক্সেস দেবেন না।
কাজানাকি

ওরাকলে নতুন হওয়া এবং আমি মাইএসকিউএল এর সাথে আরও পরিচিত; একটি ডিবি পুনরায় নির্ধারণ করা কঠিন বলে মনে হচ্ছে। মাইএসকিউএল এ a এর USERসাথে আলাদা DATABASEDROP USER username CASCADEআমার জন্য কাজ। তবে মাইএসকিউএল-এ আমার যা করতে হবে তা হল DROP DATABASEএবং একটি নতুন তৈরি করতে হবে
gawpertron

1
টেবিলগুলি সহ পুরো ডাটাবেসটি ড্রপ করার জন্য এটি কার্যকর যদি আপনার কাছে 1) ডাটাবেসটি পুনরায় তৈরি করার জন্য সমস্ত সঠিক অনুমতি সহ একটি 'তৈরি ব্যবহারকারী' স্ক্রিপ্ট থাকে; এবং 2) এই স্ক্রিপ্টটি চালানোর অনুমতি। যদি আপনাকে কেবল টেবিলগুলি ড্রপ করতে হয় তবে অন্য উল্লিখিত পদ্ধতিগুলি (@ কাজানাকি) আরও উপযুক্ত।
রানা আয়ান

7

সবচেয়ে সহজ উপায় হ'ল টেবিলস্পেসটি ড্রপ করে টেবিল স্পেসটি ব্যাক আপ তৈরি করা। তবে আমার তা করার দরকার নেই। এটি হেনরির অনুরূপ ব্যতীত আমি আমার গিওর রেজাল্টটিতে কেবল একটি অনুলিপি / পেস্ট করি।

SELECT
  'DROP'
  ,object_type
  ,object_name
  ,CASE(object_type)
     WHEN 'TABLE' THEN 'CASCADE CONSTRAINTS;'
     ELSE ';'
   END
 FROM user_objects
 WHERE
   object_type IN ('TABLE','VIEW','PACKAGE','PROCEDURE','FUNCTION','SEQUENCE')

6
SELECT 'DROP TABLE "' || TABLE_NAME || '" CASCADE CONSTRAINTS;' 
FROM user_tables;

user_tables একটি সিস্টেম টেবিল যা ব্যবহারকারীর সমস্ত সারণী ধারণ করে সেলেক্ট ক্লজটি আপনি স্ক্রিপ্টটি চালাতে পারবেন এমন প্রতিটি টেবিলের জন্য একটি ড্রপ বিবৃতি উত্পন্ন করবে


উদ্ধৃতিগুলি ভুলে যাবেন না, অন্যথায় আপনি ছোট হাতের অক্ষরগুলি সহ টেবিলগুলি মুছতে পারবেন না
মাস্টারক্সিলো

2

ওরাকলে সমস্ত বস্তু অপসারণ করতে:

1) গতিশীল

DECLARE
CURSOR IX IS
SELECT * FROM ALL_OBJECTS WHERE OBJECT_TYPE ='TABLE' 
AND OWNER='SCHEMA_NAME';
 CURSOR IY IS
 SELECT * FROM ALL_OBJECTS WHERE OBJECT_TYPE 
IN ('SEQUENCE',
'PROCEDURE',
'PACKAGE',
'FUNCTION',
'VIEW') AND  OWNER='SCHEMA_NAME';
 CURSOR IZ IS
 SELECT * FROM ALL_OBJECTS WHERE OBJECT_TYPE IN ('TYPE') AND  OWNER='SCHEMA_NAME';
BEGIN
 FOR X IN IX LOOP
   EXECUTE IMMEDIATE('DROP '||X.OBJECT_TYPE||' SCHEMA_NAME.'||X.OBJECT_NAME|| ' CASCADE CONSTRAINT');
 END LOOP;
 FOR Y IN IY LOOP
   EXECUTE IMMEDIATE('DROP '||Y.OBJECT_TYPE||' SCHEMA_NAME.'||Y.OBJECT_NAME);
 END LOOP;
 FOR Z IN IZ LOOP
   EXECUTE IMMEDIATE('DROP '||Z.OBJECT_TYPE||' SCHEMA_NAME.'||Z.OBJECT_NAME||' FORCE ');
 END LOOP;
END;
/

2) স্ট্যাটিক

    SELECT 'DROP TABLE "' || TABLE_NAME || '" CASCADE CONSTRAINTS;' FROM user_tables
        union ALL
        select 'drop '||object_type||' '|| object_name || ';' from user_objects 
        where object_type in ('VIEW','PACKAGE','SEQUENCE', 'PROCEDURE', 'FUNCTION')
        union ALL
        SELECT 'drop '
        ||object_type
        ||' '
        || object_name
        || ' force;'
        FROM user_objects
        WHERE object_type IN ('TYPE');

1

নীচের পদক্ষেপগুলি অনুসরণ করুন।

begin
  for i in (select 'drop table '||table_name||' cascade constraints' tb from user_tables) 
  loop
     execute immediate i.tb;
  end loop;
  commit;
end;
purge RECYCLEBIN;
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.