![]() |
БД в Oracle 8.1.7
на работе стоит Oracle (я в нем еще не очень понимаю) и надо навоять батник который бы удалял используемую базу и заливал из дампа новую базу, просто по области есть филиалы и там тоже эта база стоит, обновлять в ручную там никто не умеет а мне ездить в командировки не очень охота вот и решил все решить по средствам дабл клика на бат фаиле.
Вот есть батник который просто ипортирует базу из дампа, нужно чтобы перед заливкой он вычищал полностью базу и уже потом заливал туда таблицы Код:
copy create_user.sql temp.pack |
P.S. вот начинка фаила create_user.sql
Код:
DROP USER db_arh; |
Добавь в начало дампа:
Код:
DROP DATABASE `your_database`; |
Helios, вы великий знаток Oracle? Нефик тогда советовать чего не знаете! :)
MegaZLO, во-первых, смените дефолтный пасс на аккаунт sys... А то потом можете увидеть ваши базы у конкурентов. Во-вторых, вы не должны тасовать между филиалами всю базу oracle! Зачем вам это? Зачем тасовать системные объекты и прочую лабудень? Почему вы не ограничитесь дампом рабочей схемы или схем (если у вас их несколько)? Я бы вам советовал отказаться от автоматизации с помощью bat-файлов на первое время, иначе вы ни в чём не разберётесь, так и будете тупо тыкать по батникам и удивляться почему оно не работает... Давайте разберём всё по шагам, и делайте эти команды вручную, до тех пор, пока не поймёте их смысл: 1) Заходим в cmd и делаем экспорт рабочей схемы (должен заметить, что понятия "пользователь" и "схема" в терминах Oracle это одно и то же): Код:
exp userid=user/passwd@sid compress=y file=user.dmp log=user.logДля вашего примера команда должна иметь такой вид: Код:
exp userid=db_arh/1@rtidb compress=y file=db_arh.dmp log=db_arh.log2) Теперь перейдём к импорту схемы из файла... Опять же должен заметить - импорт данных Oracle ведёт в тот же tablespace, который имелся в экспортируемой схеме... Насколько я могу судить из ваших примеров, ваши схемы используют tablespace с именем USERS и вам не потребуется дополнительно создавать другой tablespace, но на всякий случай далее приведу команды на создание нового tablespace. Итак приступим: Перед импортом схемы необходимо удалить старую... Заходим в mysqlplus, выполнив в cmd команду: Код:
mysqlplus "/ as sysdba"Далее удаляем старую схему: Код:
DROP USER DB_ARH CASCADE;Код:
CREATE USER DB_ARH IDENTIFIED BY 1;Код:
GRANT CONNECT, RESOURCE TO DB_ARH;Код:
CREATE TABLESPACE ARH DATAFILE 'ARH.DBF' SIZE 1024M ONLINE;Код:
SELECT NAME FROM V$DATAFILE;Код:
ALTER USER DB_ARH DEFAULT TABLESPACE ARH;Код:
ALTER USER DB_ARH DEFAULT TABLESPACE USERS;Код:
imp userid=user/passwd@sid file=user.dmp fromuser=user1 touser=user2Для вашего примера команда должна иметь такой вид: Код:
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): Цитата:
Цитата:
Цитата:
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 |
у меня более простенький батник для бекапа =)))
Код:
EXP.EXE sys/change_on_install@rtidb OWNER = DB_arh FILE=c:\arh\DB_arh.DMP LOG=c:\arh\DB_arh.LOG |
Очень надеюсь, что поможет. Если что - к вашим услугам.
|
| Время: 15:16 |