Вопрос

Я использую разработчика Oracle SQL

У меня есть огромный сценарий, который создает таблицы, индексы, ограничения первичного ключа и тому подобное.

Мое название DB: dbo_other

Я вошел в этот dbo_other как sysdba.

Если я запускаю свой скрипт, то таблицы не отображаются на левой панели под «таблицами»

Однако, если я добавляю скрипт, добавив «dbo_other». Перед каждым именем таблицы появляются таблицы.

Это очень утомительно и занимает много времени.

Есть ли способ избежать этого? Почему они не появляются в dbo_other, не добавляя dbo_other. перед каждым названием таблицы ?? Когда я запускаю запрос в верхнем правом углу, выпадает DBO_THETHER !!

Я даже могу сделать выбор * из созданного таблицы (но не вижу его на левой боковой панели). Кроме того, я вижу таблицу в разработчике PL/SQL.

Почему разработчик Oracle SQL хочет, чтобы я создал его с dbo_other. ??

Кроме того, есть ли способ избежать добавления его для каждой таблицы? Может быть, что -то можно сделать в верхней части сценария, так что это вступает в силу на все, что следует?

Это было полезно?

Решение

Почему вы входите в свою базу данных, используя учетную запись SYSDBA? Это очень мощно, и это позволит вам нанести ужасный ущерб вашей базе данных, если вы не знаете, что делаете. В среде разработки существует ограничение на вред, который вы можете нанести, но лучше всего поднять хорошие привычки, прежде чем делать что -то в производстве.

Интересно, что Sysdba заключается в том, что он переопределяет часть пользователя в логине: если у вашей ОС есть привилегии, вы в. Как Sys. Проверьте это:

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, который позволяет вам выполнять действия по схеме/пользователю по умолчанию, для которого вы не вошли в систему. То есть по умолчанию ваши выбранные операторы и т. Д. Будут работать на этой новой схеме вместо вашей собственной.

ALTER SESSE SET TURCE_SCHEMA =

Пример: я + Table1 + Table2 Comeingelse + 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