Скрипт запуска Oracle

Я использую Oracle Sql Developer

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

мое имя БД: dbo_other

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

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

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

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

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

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

Почему разработчик oracle sql хочет, чтобы я создал его с помощью dbo_other.??

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


person Drake    schedule 01.10.2009    source источник


Ответы (3)


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

Что интересно в AS 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;. Это довольно удобный трюк, и я опубликовал его в блоге некоторое время назад. Подробнее.

Обратите внимание, что ваш пользователь не получит никаких дополнительных привилегий, изменив текущую схему: он сможет делать только то, что он может делать в настоящее время. Таким образом, для чего-то вроде создания объектов в нескольких схемах исполняющий пользователь должен быть опытным пользователем, кем-то с привилегиями CREATE ANY, такими как DBA (но все же не SYSDBA).

person APC    schedule 01.10.2009

Я только что наткнулся на этот маленький джем, который позволяет вам выполнять действия со схемой/пользователем по умолчанию, для которых вы не вошли в систему. То есть по умолчанию ваши операторы выбора и т. д. будут работать с этой новой схемой, а не с вашей собственной.

изменить набор сеансов current_schema =

Пример: Myself + table1 + table2 SomeoneElse + 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.>
person Jody    schedule 13.09.2010

Дерево «Таблицы» на левой панели включает только те таблицы, которыми владеет зарегистрированный пользователь в Oracle SQL Developer. Если ваш сценарий создает таблицы в схеме другого пользователя, вам нужно нажать + рядом с «Другие пользователи», найти соответствующего пользователя и нажать + на его таблицах.

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

person Rob    schedule 01.10.2009