Почему вы входите в свою базу данных, используя учетную запись 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).