на работе стоит Oracle (я в нем еще не очень понимаю) и надо навоять батник который бы удалял используемую базу и заливал из дампа новую базу, просто по области есть филиалы и там тоже эта база стоит, обновлять в ручную там никто не умеет а мне ездить в командировки не очень охота вот и решил все решить по средствам дабл клика на бат фаиле. Вот есть батник который просто ипортирует базу из дампа, нужно чтобы перед заливкой он вычищал полностью базу и уже потом заливал туда таблицы Code: copy create_user.sql temp.pack echo exit; >>temp.pack sqlplus sys/change_on_install@rtidb @temp.pack del temp.pack imp sys/change_on_install@rtidb FILE="db_arh.DMP" LOG="db_arh.log" FROMUSER=db_arh TOUSER=db_arh IGNORE=Y FEEDBACK=1000 заранее благодарен, плюсики гарантирую
P.S. вот начинка фаила create_user.sql Code: DROP USER db_arh; CREATE USER db_arh IDENTIFIED BY "1" DEFAULT TABLESPACE USERS QUOTA UNLIMITED ON USERS QUOTA UNLIMITED ON TEMP; GRANT CREATE ANY TABLE TO db_arh; GRANT DELETE ANY TABLE TO db_arh; GRANT DROP ANY TABLE TO db_arh; GRANT INSERT ANY TABLE TO db_arh; GRANT SELECT ANY SEQUENCE TO db_arh; GRANT SELECT ANY TABLE TO db_arh; GRANT UNLIMITED TABLESPACE TO db_arh; GRANT UPDATE ANY TABLE TO db_arh; GRANT "DBA" TO db_arh; GRANT "CONNECT" TO db_arh; GRANT "JAVA_ADMIN" TO db_arh; GRANT "JAVADEBUGPRIV" TO db_arh; GRANT "JAVA_DEPLOY" TO db_arh; GRANT "JAVAIDPRIV" TO db_arh; GRANT "JAVASYSPRIV" TO db_arh; GRANT "JAVAUSERPRIV" TO db_arh;
Helios, вы великий знаток Oracle? Нефик тогда советовать чего не знаете! MegaZLO, во-первых, смените дефолтный пасс на аккаунт sys... А то потом можете увидеть ваши базы у конкурентов. Во-вторых, вы не должны тасовать между филиалами всю базу oracle! Зачем вам это? Зачем тасовать системные объекты и прочую лабудень? Почему вы не ограничитесь дампом рабочей схемы или схем (если у вас их несколько)? Я бы вам советовал отказаться от автоматизации с помощью bat-файлов на первое время, иначе вы ни в чём не разберётесь, так и будете тупо тыкать по батникам и удивляться почему оно не работает... Давайте разберём всё по шагам, и делайте эти команды вручную, до тех пор, пока не поймёте их смысл: 1) Заходим в cmd и делаем экспорт рабочей схемы (должен заметить, что понятия "пользователь" и "схема" в терминах Oracle это одно и то же): Code: exp userid=user/passwd@sid compress=y file=user.dmp log=user.log Здесь: userid - имя схемы/пользователя которого вы будете дампить, passwd - пароль данной схемы, sid - SID вашей базы данных, параметр compress - определяет сжатие данных дампа, параметр file - файл, куда будут слиты данные, параметр log - файл журнала куда будет сыпаться вывод команды. Для вашего примера команда должна иметь такой вид: Code: exp userid=db_arh/1@rtidb compress=y file=db_arh.dmp log=db_arh.log Разумеется, что вместо 1 вам нужно поставить настоящий пароль этой схемы (причём посерьёзнее). 2) Теперь перейдём к импорту схемы из файла... Опять же должен заметить - импорт данных Oracle ведёт в тот же tablespace, который имелся в экспортируемой схеме... Насколько я могу судить из ваших примеров, ваши схемы используют tablespace с именем USERS и вам не потребуется дополнительно создавать другой tablespace, но на всякий случай далее приведу команды на создание нового tablespace. Итак приступим: Перед импортом схемы необходимо удалить старую... Заходим в mysqlplus, выполнив в cmd команду: Code: mysqlplus "/ as sysdba" Заметьте, эту команду нужно выполнять из админской учётной записи, из которой oracle был установлен. Далее удаляем старую схему: Code: DROP USER DB_ARH CASCADE; Создаём новую схему, пароль будет "1": Code: CREATE USER DB_ARH IDENTIFIED BY 1; Назначаем права для этой схемы: Code: GRANT CONNECT, RESOURCE TO DB_ARH; В случае, если экспортированная схема не использовала какой-то свой tablespace, следующие три строчки нужно пропустить, я их приведу просто для примера, в вашем же случае использовался tablespace USERS. Итак, создаём tablespace: Code: CREATE TABLESPACE ARH DATAFILE 'ARH.DBF' SIZE 1024M ONLINE; Посмотреть уже имеющиеся tablespace можно с помощью запроса: Code: SELECT NAME FROM V$DATAFILE; Связываем созданный tablespace c нешей схемой: Code: ALTER USER DB_ARH DEFAULT TABLESPACE ARH; Все вышеприведённые команды были написаны для того, чтобы понять как создавать и назначать tablespace, если при импорте Oracle ругается, на то, что некоторые объекты из схемы пытаются использовать несуществующий tablespace. Если же, схема использовала стандартный tablespace USERS, после создания юзера/схемы мы просто даём команду: Code: ALTER USER DB_ARH DEFAULT TABLESPACE USERS; Итак, схема создана, права назначены... Приступим к импорту данных в созданную схему. Для этого всё из того же cmd выполняем команду: Code: imp userid=user/passwd@sid file=user.dmp fromuser=user1 touser=user2 Здесь: userid - имя схемы/пользователя которого куда вы будете импортировать, passwd - пароль данной схемы, sid - SID базы данных, параметр fromuser - схема, из которой был сделан экспорт, параметр touser - схема в которую будет сделан импорт. Для вашего примера команда должна иметь такой вид: Code: imp userid=db_arh/1@rtidb file=db_arh.dmp fromuser=db_arh touser=db_arh Вот и всё... Схема готова к работе! И полностью соответствует дампу! На всё про всё, при умелых действиях эта операция не займёт больше пяти минут... Если у вас возникнут ещё какие-либо вопросы, я с радостью отвечу.
большое спасибо, очень выручил. но есть небольшие нюансы. 1)доступ к базе только с локальной сети которая в свою очередь не имеет выхода в другие сети и интернет, так что пароль не столь значим. 2)база нужна полная, только с той разницей что у нас она подлежит редактированию а в филиалах только просмотр информации, обновление базы примерно раз в месяц чтобы данные сильно не устаревали. 3)мне нужен батник именно потому что в филиалах нет программеров, они в компах то плохо соображают а не то что в базе оракл, нужен тупой дабл клик на фаиле и все готово. P.S. как только приеду с командировки обязательно испробую вашу схему =)
Ok. Ясно... Но меня всё же коробят дефолтные пассы на аккаунты... Ладно, когда приедешь стучи - набросаем батник... Просто я смотрю, действительно много ньюансов, которые ты не указал в начале... В общем если что - к твои услугам...
ну вот я и приехал с командировки, вобщем взял свежую базу, батник который выкладывал в первом посте и запустил весь процес обновления базы, где то показал что обновил записи а где то ошибки сыпались, лог тут rambler.iplot.ru/db_arh.rar хотелось бы до боли все проще =) ченить типо DROP DATABASE bla_bla; CREATE DATABASE bla_bla; ну и дальше сам процес выставления привелегий и заливки базы =)
Хм... Насколько я могу судить - импорт заткнулся на таблицах "APPLY" и "APPLY_INV", причём заткнулся в связанных с ними тригерах/процедурах... Обычно такой затык происходит в конструкциях типа SELECT INTO ... , если возвращается набор из более чем одной записи. В любом случае, не обладая дампом, я ничего конкретного сказать не смогу... А все остальные ошибки - наведённые, они возникли из-за нарушения целостности по ключам. Что касается экспорта-импорта, я опять же - категорически против таскания всех схем из одной базы в другую при отсутствии явных на то причин, поэтому привожу скрипты, которые призваны облегчить экспорт-импорт рабочей схемы: 1) Скрипт, который пересоздаёт схему (recreate_schema.sql): 2) Скрипт осуществления экспорта схемы (export.cmd): 3) Скрипт осуществления импорта схемы (import.cmd): Последовательность действий очень проста: 1) Запускаем export.cmd на оракловом серваке и делаем дамп рабочей схемы DB_ARH главного офиса. При этом создастся файл db_arh.dmp и db_arh_export.log. Обязательно проверьте лог на отсутствие в нём ошибок. 2) Запускаем import.cmd в необходимом филиале на оракловом серваке. В ходе выполнения этого скрипта текущая схема DB_ARH будет удалена и заново создана, после чего в неё будут залиты данные. Данные будут браться из дампа db_arh.dmp. Так же обязательно проверьте лог db_arh_import.log на отсутствие в нём ошибок. Данные скрипты в более материальной форме можно взять отсюда: http://slil.ru/24721914
у меня более простенький батник для бекапа =))) Code: EXP.EXE sys/change_on_install@rtidb OWNER = DB_arh FILE=c:\arh\DB_arh.DMP LOG=c:\arh\DB_arh.LOG спасибо за помощь, результат смогу увидеть только в понедельник.
мда чето не сложилось, вобщем мои ход действий таков, сделал экспорт с главного сервера, Code: Connected to: Oracle8i Enterprise Edition Release 8.1.7.0.0 - Production With the Partitioning option JServer Release 8.1.7.0.0 - Production Export done in CL8MSWIN1251 character set and CL8MSWIN1251 NCHAR character set About to export specified users ... . exporting pre-schema procedural objects and actions . exporting foreign function library names for user DB_ARH . exporting object type definitions for user DB_ARH About to export DB_ARH's objects ... . exporting database links . exporting sequence numbers . exporting cluster definitions . about to export DB_ARH's tables via Conventional Path ... . . exporting table ADD_FIELD_DATA 0 rows exported . . exporting table ADD_FIELD_LIST 0 rows exported . . exporting table AFFILIATE 0 rows exported . . exporting table APPLY 6700 rows exported . . exporting table APPLY_INV 94 rows exported . . exporting table A_CONTROL 0 rows exported . . exporting table A_DATA_SOURCE 6 rows exported . . exporting table A_FIELD 1450 rows exported . . exporting table A_JOB 0 rows exported . . exporting table A_JOB_STATUS 0 rows exported . . exporting table A_LOG 1076 rows exported . . exporting table A_MODIFY_LOG 1757 rows exported . . exporting table A_PROFILE 732 rows exported . . exporting table A_SCRIPT 0 rows exported . . exporting table A_SCRIPT_BODY 0 rows exported . . exporting table A_SERVER_INSTANCE 1 rows exported . . exporting table A_TABLE 57 rows exported . . exporting table A_TABLE_SEQ 61 rows exported . . exporting table A_VERSION 1 rows exported . . exporting table BANK 4499 rows exported . . exporting table BILL 12 rows exported . . exporting table BRUNCH_RTI 91 rows exported . . exporting table BSO_LCARD 4259 rows exported . . exporting table BSO_LIC 149 rows exported . . exporting table CAR 14681 rows exported . . exporting table DOC 691 rows exported . . exporting table DOC_BODY 1472 rows exported . . exporting table DOC_BODY_ARCHIVE 0 rows exported . . exporting table DOC_BOOKMARK 0 rows exported . . exporting table DOC_CELL 0 rows exported . . exporting table DOC_ITEM 1553 rows exported . . exporting table DOC_MODEL 109 rows exported . . exporting table DUPLICATE 0 rows exported . . exporting table HISTORY_LCARD 49305 rows exported . . exporting table HISTORY_LIC 12318 rows exported . . exporting table H_APPLY_TYPE 12 rows exported . . exporting table H_CAR_TYPE 35 rows exported . . exporting table H_DOC_ITEM_TYPE 12 rows exported . . exporting table H_FS 33 rows exported . . exporting table H_INV_DOC 30 rows exported . . exporting table H_LEVEL 14 rows exported . . exporting table H_LIC_ACTIVITY 22 rows exported . . exporting table H_LINK_APPLY_ACTIV 51 rows exported . . exporting table H_LINK_APPLY_TOVAR 18 rows exported . . exporting table H_OKVED 1 rows exported . . exporting table H_OPF 39 rows exported . . exporting table H_PERSONAL_CATEGORY 14 rows exported . . exporting table H_PRIVELEGES 6 rows exported . . exporting table H_STATUS 17 rows exported . . exporting table H_TOVAR 10 rows exported . . exporting table LCARD 25836 rows exported . . exporting table LIC 6480 rows exported . . exporting table LINK_APPLY_DOC 625 rows exported . . exporting table LINK_APPLY_LCARD 667 rows exported . . exporting table LINK_LIC_ACTIV_CAR 10441 rows exported . . exporting table LINK_TABLE_FIELD 0 rows exported . . exporting table LINK_USERS_ORG_UNIT 0 rows exported . . exporting table LINK_USER_CONTROL 0 rows exported . . exporting table MESSAGE 10 rows exported . . exporting table MODEL_ITEM 828 rows exported . . exporting table ORG_UNIT 2869 rows exported . . exporting table PLANT 5756 rows exported . . exporting table PLANT_CAR 14679 rows exported . . exporting table PLANT_PERSON 147 rows exported . . exporting table PLANT_TEMP 11394 rows exported . . exporting table ROAD_EVENTS 108 rows exported . . exporting table SCHET 112 rows exported . . exporting table SCHET_DETAIL 219 rows exported . . exporting table SERVER_LIST 0 rows exported . . exporting table SQL_SCRIPT 0 rows exported . . exporting table USERS 27 rows exported . . exporting table USER_ACCESS 0 rows exported . . exporting table V_PLANT_DIR 1 rows exported . exporting synonyms . exporting views . exporting stored procedures . exporting operators . exporting referential integrity constraints . exporting triggers . exporting indextypes . exporting bitmap, functional and extensible indexes . exporting posttables actions . exporting snapshots . exporting snapshot logs . exporting job queues . exporting refresh groups and children . exporting dimensions . exporting post-schema procedural objects and actions . exporting statistics Export terminated successfully without warnings. Далее взял комп (тестовая машина) на которой стояла база месячной давности и залил туда дамп через import.cmd Code: IMP-00058: ORACLE error 1017 encountered ORA-01017: invalid username/password; logon deniedUsername: IMP-00058: ORACLE error 1017 encountered ORA-01017: invalid username/password; logon deniedUsername: IMP-00058: ORACLE error 1017 encountered ORA-01017: invalid username/password; logon denied IMP-00005: all allowable logon attempts failed IMP-00000: Import terminated unsuccessfully как видно из лога он ругается на пользователя, как результат база пустая и пользователей нет. дальше воспользовался своим батником (из первого поста) для импорта базы и все стало ок =) кстати как вариант у меня сеичас идея хоть и глупая и ламерская до безобразия но она работает, сначало запускаю import.cmd он бахает все а потом запускаю батник из первого поста и вуаля все готова =) P.s. это не вариант а временное решение =) тут лежат логи http://slil.ru/24731693
Ну что же... Давайте разберём ситуацию... Экспорт прошёл нормально, без всяких проблем... Проблемы возникли на шаге импорта... Причём походу на стадии инициализации схемы DB_ARH, т.е. при выполнении команды (в import.cmd): В чём причина? Однозначно ответить не могу, дело в том, что вызов sqlplus "/ as sysdba" возможен только из под той, учётной записи, которой устанавливался Oracle. Если у вас нету возможности зайти под ней, попробуйте заменить этот вызов на Это должно сработать...
вот лог Code: IMP-00058: ORACLE error 1017 encountered ORA-01017: invalid username/password; logon deniedUsername: Connected to: Oracle8i Enterprise Edition Release 8.1.7.0.0 - Production With the Partitioning option JServer Release 8.1.7.0.0 - Production Export file created by EXPORT:V08.01.07 via conventional path Warning: the objects were exported by DB_ARH, not by you import done in CL8MSWIN1251 character set and CL8MSWIN1251 NCHAR character set . importing DB_ARH's objects into DB_ARH IMP-00017: following statement failed with ORACLE error 1435: "ALTER SCHEMA = "DB_ARH"" IMP-00003: ORACLE error 1435 encountered ORA-01435: user does not exist далее строчки повторяются дофига раз Import terminated successfully with warnings. вот сам батник Code: @echo off cls echo. echo ---------------------------------------------------------------------- echo Copyright (C): 2007, DaMaGeLaB, groundhog mailto:[email protected] echo Special realize for MegaZLO echo ---------------------------------------------------------------------- echo. echo Today is [%date%] echo. echo Ready to import schema 'DB_ARH'. Schema 'DB_ARH' about to be dropped... set /p temp=Press ENTER to continue or CTRL+C to exit... echo. echo Recreating schema 'DB_ARH'... @sqlplus sys/change_on_install@rtidb @recreate_schema.sql >> db_arh_import.log echo. echo Ready to import data to schema 'DB_ARH'... set /p temp=Press ENTER to continue or CTRL+C to exit... echo. echo Importing data to schema 'DB_ARH'... @imp userid=db_arh/1@rtidb file=db_arh.dmp fromuser=db_arh touser=db_arh log=db_arh_import.log echo. echo ---------------------------------------------------------------------- echo [!] Import done. See log file for errors and additional information. echo ---------------------------------------------------------------------- echo. set /p temp=Press ENTER to continue... echo. может мне кажется все дело в запросах из фаиила recreate_schema.sql как вариант запихать в него это Code: DROP USER db_arh; CREATE USER db_arh IDENTIFIED BY "1" DEFAULT TABLESPACE USERS QUOTA UNLIMITED ON USERS QUOTA UNLIMITED ON TEMP; GRANT CREATE ANY TABLE TO db_arh; GRANT DELETE ANY TABLE TO db_arh; GRANT DROP ANY TABLE TO db_arh; GRANT INSERT ANY TABLE TO db_arh; GRANT SELECT ANY SEQUENCE TO db_arh; GRANT SELECT ANY TABLE TO db_arh; GRANT UNLIMITED TABLESPACE TO db_arh; GRANT UPDATE ANY TABLE TO db_arh; GRANT "DBA" TO db_arh; GRANT "CONNECT" TO db_arh; GRANT "JAVA_ADMIN" TO db_arh; GRANT "JAVADEBUGPRIV" TO db_arh; GRANT "JAVA_DEPLOY" TO db_arh; GRANT "JAVAIDPRIV" TO db_arh; GRANT "JAVASYSPRIV" TO db_arh; GRANT "JAVAUSERPRIV" TO db_arh; как думаете?
Давайте попробуем... Я на текущем шаге могу только одно сказать, проблемы начинаются в момент пересоздания схемы DB_ARH, о чём свидетельствует: То есть скрипт создания схемы не выполняется, и далее импорт пытается фигачить в несуществующую схему... Вы бы не могли попробовать руками выполнить команду: И отписать как он ругнётся?
Code: @echo off cls echo. echo ---------------------------------------------------------------------- echo Copyright (C): 2007, DaMaGeLaB, groundhog mailto:[email protected] echo Special realize for MegaZLO echo ---------------------------------------------------------------------- echo. echo Today is [%date%] echo. echo Ready to import schema 'DB_ARH'. Schema 'DB_ARH' about to be dropped... set /p temp=Press ENTER to continue or CTRL+C to exit... echo. echo Recreating schema 'DB_ARH'... @sqlplus sys/change_on_install@rtidb @recreate_schema.sql >> db_arh_import.log echo. echo ---------------------------------------------------------------------- echo [!] Import done. See log file for errors and additional information. echo ---------------------------------------------------------------------- echo. set /p temp=Press ENTER to continue... echo. с использованием вашег исходного фаила recreate_schema.sql лог Code: SQL*Plus: Release 8.1.7.0.0 - Production on Втн Авг 14 11:02:59 2007 (c) Copyright 2000 Oracle Corporation. All rights reserved. Connected to: Oracle8i Enterprise Edition Release 8.1.7.0.0 - Production With the Partitioning option JServer Release 8.1.7.0.0 - Production User dropped. create user DB_ARH identified by 1 * ERROR at line 1: ORA-00988: missing or invalid password(s) grant connect, resource to DB_ARH * ERROR at line 1: ORA-01917: user or role 'DB_ARH' does not exist grant unlimited tablespace to DB_ARH * ERROR at line 1: ORA-01917: user or role 'DB_ARH' does not exist alter user DB_ARH default tablespace USERS * ERROR at line 1: ORA-01918: user 'DB_ARH' does not exist Disconnected from Oracle8i Enterprise Edition Release 8.1.7.0.0 - Production With the Partitioning option JServer Release 8.1.7.0.0 - Production p.s. как я понял в recreate_schema.sql закралась коварная ошибка
Блин... В восьмёрке надо пасс в кавычки заключать... Я просто делал это на девятке и всё нормально проходило... Исправьте этот момент плиз...
разгадка близка =) Code: Export file created by EXPORT:V08.01.07 via conventional path IMP-00013: only a DBA can import a file exported by another DBA IMP-00000: Import terminated unsuccessfully p.s. может добавить это и не мучаться ? Code: GRANT CREATE ANY TABLE TO db_arh; GRANT DELETE ANY TABLE TO db_arh; GRANT DROP ANY TABLE TO db_arh; GRANT INSERT ANY TABLE TO db_arh; GRANT SELECT ANY SEQUENCE TO db_arh; GRANT SELECT ANY TABLE TO db_arh; GRANT UNLIMITED TABLESPACE TO db_arh; GRANT UPDATE ANY TABLE TO db_arh; GRANT "DBA" TO db_arh; GRANT "CONNECT" TO db_arh; GRANT "JAVA_ADMIN" TO db_arh; GRANT "JAVADEBUGPRIV" TO db_arh; GRANT "JAVA_DEPLOY" TO db_arh; GRANT "JAVAIDPRIV" TO db_arh; GRANT "JAVASYSPRIV" TO db_arh; GRANT "JAVAUSERPRIV" TO db_arh;
Я думаю достаточно будет добавить строчку Это неправильно исходя из соображений безопасности, но это исправит ситуацию... Похожу что вы делали экспорт из под системного аккаунта, следовательно импорт может сделать пользователь с правами DBA...