Oracle работает скрипт - PullRequest
       60

Oracle работает скрипт

0 голосов
/ 01 октября 2009

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

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

имя моей БД: dbo_other

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

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

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

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

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

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

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

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

Ответы [ 3 ]

7 голосов
/ 01 октября 2009

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

Интересной особенностью 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).

1 голос
/ 13 сентября 2010

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

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

Пример: Себя + таблица1 + таблица2 Кто-нибудь другой + 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.>
0 голосов
/ 01 октября 2009

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

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

...