سؤال

أنا أستخدم مطور أوراكل SQL

لدي برنامج نصي ضخم يخلق الجداول والفهارس والقيود الرئيسية الأساسية ومثل هذا.

اسم DB الخاص بي هو: dbo_other

قمت بتسجيل الدخول إلى هذا dbo_other كما sysdba.

إذا قمت بتشغيل البرنامج النصي الخاص بي، فلن تظهر الجداول على اللوحة اليسرى ضمن "الجداول"

ومع ذلك، إذا قمت بإلحاق البرنامج النصي بإضافة "dbo_other." أمام كل اسم الجدول ثم تظهر الجداول.

هذا مملة للغاية وتستغرق وقتا طويلا.

هل هناك طريقة لتجنب ذلك؟ لماذا لن تظهر في dbo_other دون إضافة dbo_other. أمام كل اسم الجدول؟ عندما أقوم بتشغيل الاستعلام في الزاوية اليمنى العليا، يكون المنسدل الذي تم اختياره dbo_other !!

يمكنني حتى أن أقوم بتحديد * من الجدول الذي تم إنشاؤه (ولكن لا تراه في الشريط الجانبي الأيسر) علاوة على ذلك، يمكنني رؤية الجدول في مطور PL / SQL.

لماذا يريد مطور أوراكل SQL مني أن يخلقه مع dbo_other.؟

أيضا، هل هناك طريقة لتجنب إضافة ذلك لكل جدول؟ ربما يمكن القيام بشيء ما في الجزء العلوي من البرنامج النصي بحيث تستغرق كل شيء على كل ما يلي؟

هل كانت مفيدة؟

المحلول

لماذا تقوم بتسجيل الدخول إلى قاعدة البيانات الخاصة بك باستخدام حساب SYSDBA؟ هذا قوي جدا، وسوف يتيح لك القيام بأضرار فظيعة لقاعدة البيانات الخاصة بك إذا كنت لا تعرف ما تفعله. في بيئة تطوير هناك حد للإضرار التي يمكنك القيام بها، ولكن من الأفضل الدخول إلى عادات جيدة قبل القيام بالأشياء في الإنتاج.

الشيء المثير للاهتمام حول SYSDBA هو أنه يتجاوز اسم المستخدم جزءا من تسجيل الدخول: إذا كان مستخدم نظام التشغيل الخاص بك لديه امتيازات، فأنت في. كوس. تحقق من ذلك:

SQL> conn apc
Enter password:
Connected.
SQL> show user
USER is "APC"
SQL> conn apc as sysdba
Enter password:
Connected.
SQL> show user
USER is "SYS"
SQL>

لذلك، عند تشغيل هذا البرنامج النصي، قمت بإنشاء كل هذه الكائنات في مخطط SYS. والتي ستثبت أنها ألم ضخم في الرقبة. آمل أن يكون لديك برنامج نصي متساوي وعكس الارتداد.

لتشغيل البرنامج النصي بشكل صحيح، كل ما عليك فعله هو الاتصال ك dbo_other (عادي - أي بدون SYSDBA أو SYSOPER وهو الافتراضي بعد كل شيء). سيقوم البرنامج النصي بإنشاء جداول في المخطط الحالي.

إذا كنت بحاجة إلى إنشاء كائنات في العديد من المخططات، فلن تحتاج إلى تسجيل الدخول مرة أخرى. المخطط متميز عن المستخدم ومن الممكن تبديل المخطط من خلال التنفيذ alter session set current schema = WHOEVR;. وبعد هذه خدعة مفيدة للغاية وأنا بلوجها ببعض الوقت. اكتشف المزيد.

لاحظ أن المستخدم الخاص بك لن يكتسب أي امتيازات إضافية عن طريق تغيير المخطط الحالي: سيكونون قادرين إلا على فعل ما يمكنهم القيام به حاليا. لذلك بالنسبة إلى شيء مثل إنشاء كائنات في مخططات متعددة، يجب أن يكون المستخدم المنفذ مستخدما للطاقة، شخصا يعاني من إنشاء أي امتيازات مثل DBA (ولكن لا تزال غير SYSDBA).

نصائح أخرى

لقد تعثرت فقط على هذا JEM Little الذي يتيح لك إجراء إجراءات على مخطط / مستخدم افتراضي لم تقم بتسجيل الدخول كما. هذا هو، افتراضيا ببيانات المحددة، وما إلى ذلك ستعمل على هذا المخطط الجديد بدلا من بنفسك.

تغيير جلسة مجموعة current_schema =

مثال: نفسي + Table1 + Table2 Mexonelse + Supertable1 + Supertable2

log in as "Myself" 
select * from SuperTable1

Error: ORA-00942: table or view does not exist

alter session set current_schema = SomeoneElse 
select * from SuperTable1 <This will work.>

يشتمل شجرة "الجداول" الموجودة على لوحة اليد اليسرى فقط الجداول تمتلك المستخدم المسجوري في Oracle SQL Developer. إذا قام البرنامج النصي بإنشاء جداول في مخطط مستخدم مستخدم آخر، فأنت بحاجة إلى النقر فوق + بجانب "المستخدمين الآخرين"، ابحث عن المستخدم المناسب، وانقر فوق + على جداولها.

كما قال آخرون، يجب أن لا تستخدم SYSDBA إلا إذا كنت بحاجة إلى ذلك، وغالبا ما يبدو وكأنه سيناريو يجب تنفيذه كمستخدم طبيعي يعتمد على وصفه الخام.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top