![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| Stallionf1 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 27.4.2011 Репутация: нет Всего: нет |
Доброго времени суток!!!
Подскажите, пожалуйста, как сделать бэкап/восстановление БД (в моем случае, DB Oracle) через веб-приложение?? скажем, "Админ" зашел на сайт и захотел сделал бэкап всей БД (всех зарегистрированных юзеров). |
|||
|
||||
| COVD |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 26.7.2005 Репутация: 4 Всего: 43 |
Наверное, проще и надежнее поставить программы удаленного доступа (например, RAdmin), соединяться через VPN и делать все, что хотите. Я таким способом соединяюсь из дома с моим рабочим офисным компьютером и всеми серверами, в том числе и с теми, где установлены базы данных.
|
|||
|
||||
| Stolzen |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1041 Регистрация: 17.10.2005 Репутация: 3 Всего: 48 |
Ну если на сервере доступна только командная строка? Да, в таком случае можно подсоединятся через ssh - то же самое получается. Вообще, я бы написал какой-нибудь скрипт, например, на питоне, который бы запускался, когда администратор нажимает по ссылке и через некоторое время отправляет на имейл ссылку на заархивированный дамп базы. |
|||
|
||||
| carper |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 227 Регистрация: 2.3.2005 Репутация: 2 Всего: 8 |
Вижу три пути: 1. Создать свою программу архивации, размещенную в web каталоге и обращающуюся к базе данных стандартным образом. И складывать архив в папку находящуюся внутри каталога развернутого приложения. Тогда не будет никакой разницы откуда запускать архивацию. Но таким образом вы потратите кучу времени на то, что "из коробки" есть в Oracle. 2. Попробовать все возможные пути экскалации прав удаленного пользователя web приложения с тем чтобы он мог запускать выполняемые файлы на сервере. IMHO путь, очень мягко выражаясь, бесперспективный. 3. Не морочить никому голову и удаленно коннектиться к серверу, как это вам уже посоветовали. |
|||
|
||||
| Stallionf1 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 27.4.2011 Репутация: нет Всего: нет |
наверное я не совсем конкретно поставил вопрос....
Например, АДМИН регистрируется на сайте, входит, и у него есть кнопка "создать копию БД". Вот что мне делать при нажатии на кнопку? и можете, пожалуйста, поподробнее описать вариант, если писать какой-то скрипт, то как он вообще выполняется (где он должен лежать), а то если честно не очень я понимаю? спасибо! |
|||
|
||||
| Stolzen |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1041 Регистрация: 17.10.2005 Репутация: 3 Всего: 48 |
Так в java запускается внешняя программа:
Этот самый "external" - может быть скрипт. Не знаю, как в Oracle, но, например, в MySQL и Firebird есть программа, позволяющая сделать полный дамп базы - такую вам и нужно запускать из скрипта. В MySQL в результате выходит файл с sql запросом, который может целиком повторить базу - его, скорее всего, нужно будет сжать каким-нибудь gzip. Как скрипт закончил свое выполнение, можно уведомлять пользователя об этом и давать ссылку на полученный файл. |
|||
|
||||
| carper |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 227 Регистрация: 2.3.2005 Репутация: 2 Всего: 8 |
А вы пробовали через web интерфейс задеплоенного приложения запустить экзешник на сервере, особенно тот, которому еще придется чего то писать/читать вне его каталога web сервера? Если да, то не поделитесь тем, как это делать, например, под Tomcat ?
В общем случае "правильный ответ" - ничего, вы пытаетесь сделать простую задачу бэкапа максимально извращенным способом. Пункт про права при работе через web приложение, как я понял, вы решили проигнорировать, а зря. Ну, если очень хочется ... 1. Забудьте про web вообще. 2. Напишите на JAVA метод (ну форум здесь как бы про JAVA, а так на любом подходящем языке, например, PHP), который коннектится к базе, отбирает нужную информацию и пишет ее, например, в какой-то файл. 3. Вспомните, что этот метод будет вызываться из web 4. На кнопку навесьте вызов этого метода. 5. Прикрутите, по желанию, возможность загрузки дампа, например, через другую web страничку. P.S. Вы не могли бы уточнить какие технологии вы уже применяете для создания вашего web приложения ? |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 5 Всего: 538 |
Если речь идет именно о бекапе, а не импорт/экспорт, я бы делал так:
- создать скрипт бекапа средствами СУБД - вызывать его из приложения -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| Stolzen |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1041 Регистрация: 17.10.2005 Репутация: 3 Всего: 48 |
Честно говоря, нет. Но информация в интернете имеется - ссылка |
|||
|
||||
| carper |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 227 Регистрация: 2.3.2005 Репутация: 2 Всего: 8 |
Почитал, я не знаю Perl, но того, что понял достаточно чтобы увидеть, что никакими файловыми операциями и запуском внешних программ там и не пахнет. С одной стороны вроде как "CGI scripts are used to execute programs external to the Tomcat JVM" с другой, без особых извращений (включая игрища с Java SecurityManager), вы для Server OS практически никто и звать вас никак. Полагаю, хотя сам и никогда не пробовал, в конечном итоге систему безопасности можно сломать/"усовершенствовать" и запускать на сервере всё, что угодно, только ЗАЧЕМ ?! Особенно если учесть, что для этой же задачи существует куча других методов? Такой скрипт создается просто, вот только как его запустить? Ну, вот возьмем такой кусочек с абсолютно элементарными действиями - устраиваем shutdown приложению и бэками один маленький файлик (для него, кстати, shutdown не обязателен, но оставим как есть) куда-то на другой диск сервера:
Не подскажете как выполнить через web приложение? Как вариант, можно попробовать поизощряться с созданием задач в самом Oracle, наверное, может получиться, но зачем такое извращение? P.S. Вообще задача web сервера максимально ограничить возможность внешнего пользователя хоть что-то делать вне доступного ему выделенного пространства. Пытаться самому сломать такое поведение кажется не очень разумным, нет? |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 5 Всего: 538 |
Для начала, это не бекап, это импорт/экспорт
Что мешает выполнить Runtime.exec() внутри сервлета? Тот же томкат никаких security manager не устанавливает. Единственное скрипт будет работать долго, и надо его вынести в отдельный поток. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| Stallionf1 |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 27.4.2011 Репутация: нет Всего: нет |
технологий типа Hibernate, Spring не использую! 1)графическое представление (JSP+Servlets) 2)отдельными классами описываю логику 3)доступ к БД через DAO (Data Access Object) Добавлено через 2 минуты и 54 секунды
да, речь идет именно о бэкапе / рэсторе. так как же скрипт вызвать, каким макаром? |
||||
|
|||||
| carper |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 227 Регистрация: 2.3.2005 Репутация: 2 Всего: 8 |
Не устанавливает, только вот не запускать же боевой сервис Tomcat от админа, а дав права JAVA хозяйничать на компьютере не будет ли странно не поднять там security manager? (Хотя, каюсь, пока сейчас не поборол лень и не попробовал на своей машине, полагал, что всё еще хуже. У меня на машине под разработку, Tomcat сидит от имени локального админа, никакого security manager и там Runtime.exec() выполняется на ура. Но разве тоже будет на рабочем Tomcat? http://tomcat.apache.org/tomcat-5.5-doc/setup.html "For optimal security, the service should be run as a separate user, with reduced permissions". И вот с этим-то пользователем и начнет получаться кавардак с правами и, IMHO, необходимостью задействовать security manager, для безопасности. Ага, а еще надо будет учесть, что если это не Tomcat, то сервер может очень не полюблять потоки, которые не он сам запускает. |
|||
|
||||
| LSD |
|
||||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 5 Всего: 538 |
Давайте все же разберемся с терминологией. Бекап это физическое копирование файлов базы данных. Из бекапа базу можно восстановить даже если будут повреждены файлы базы и она вообще не будет запускаться. Импорт/экспорт это копирование данных из таблицы(таблиц) в файл. И соответственно восстановить можно только работающую базу и то лишь частично.
Для импорта/экспорта нужны лишь права в базе и место куда писать файлы экспорта. Для "ручного" бекапа Оракла нужны права в СУБД, доступ на чтение файлов базы и журнала и место куда писать файлы бекапа. Либо права на выполнение rman или скрипта.
Можно создать .sh файл который будет выполняться с правами другого пользователя, а томкатовскому пользователю дать право на выполнение и все.
В таком случае там точно есть какой нибудь шедуллер. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
||||
|
|||||
| carper |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 227 Регистрация: 2.3.2005 Репутация: 2 Всего: 8 |
Хм... Наверное можно. Можно и в Windows устроить что-то типа run as. Но я о чем сейчас подумал... Это значится, достаточно будет злоумышленнику узнать адрес нужной странички, перехватить пароль и он в любой момент может уронить базу на время ненужного бэкапа? OK. Мы так не хотим, поднимаем security, работаем через HTTPS и т.д. и т.п. и все это ради того, чтобы иметь возможность таки нажать кнопочку именно через web морду. Еще немного извращений чтобы убедиться в том, что бэкап нормально сложился и база нормально рестартовала, потом продумываем как все же быть, если база нормально не перезапустилась или бэкап непонятно почему не сложился, приходим к необходимости нормального удаленного доступа, а получив оный "вдруг" задумываемся - нафига нам был нужен этот баян с кнопкой ? Более того шедулер есть и в самом Oracle и можно его как-то "заводить" в ответ на нажатие кнопки, да собственно и cron можно использовать, не терзая web сервер вообще. Вопрос все тот же - а на фига такие сложности? А в чем разбираться? У нас тут разногласий нет. Или я где-то чего-то про export/import сказал (посмотрел, вроде как не нашел, а тот кусочек кода, что приводил - это как раз начало скрипта холодного бэкапа - команда на shutdown и архивация файла параметров) ? Я так понял, что автору нужен полноценный бэкап, скорее всего cold, со всеми вытекающими правами. P.S. Полагаю тема получилась любопытная - лично я пришел к выводу, что если забывать о безопасности web сервера, то можно попасть на такой вот getRuntime().exec и очень потом переживать. |
|||
|
||||
| Stolzen |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1041 Регистрация: 17.10.2005 Репутация: 3 Всего: 48 |
А там что-то типа папки cgi-bin есть? Например, в апаче можно засунуть скрипт в эту самую папку и вызывать напрямую.
|
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 5 Всего: 538 |
Если злоумышленник получил пароль админа, то у него и так достаточно средств для вредительства. А вообще, конечно нужно предпринимать меры по защите, SSL, отдельный пароль на опасные операции и т.д. Просто я не вижу в ситуации с бекапом, какого то исключительного случая. Ну и к тому же, бекам может быть горячим Оракл сам себя не забекапит Меня смутила фраза
Но раз мы говорим про бекап, то будем про него и говорить -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| mbasil |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 399 Регистрация: 4.5.2007 Где: Москва Репутация: 9 Всего: 13 |
В базе данных Oracle (начиная с 9 версии) имеется такое административное WEB приложение, как Enterprise Manager, которое с помощью wizard'ов предлагает сделать job'ы для выполнения резервирования и восстановления.
Выполняется же резервирование и восстановление через утилиту RMAN. В любом случае для резервированя и восстановления через RMAN надо подключаться имея привилегию SYSDBA, то есть самым "крутым" администратором. Если не хотите запускать Enterprise Manager (для этого на сервере стартует ядро сервера приложений), можете писать и запускать напрямую скрипты RMAN по расписанию. В любом случае: 1. Для резервирования надо продумать периодически выполняемый сценарий, а значит выполнять по расписанию, и WEB здесь не шибко нужен. 2. Восстановление же после сбоя задача слишком важная и обычно весьма специфическая, так что хоть и можно его делать через Enterprise Manager, я бы без крайней нужды бы делать этого не стал, а сделал напрямую через RMAN. 3. Так что WEB здесь нужен только в том случае, когда вы в другом городе и уж никак не можете подключиться по TCP/IP к базе. 4. Команды RMAN конесно придется изучать, но деваться некуда. Если вы хотите через Enterprise Manager приходите к нам на курс: "O10gDBA2. Oracle Database 10g: Administration Workshop I" Если же вы хотите ознакомится с RMAN вам прямая дорога на курс: "O10gDBA2. Oracle Database 10g: Administration Workshop II" |
|||
|
||||
| COVD |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 26.7.2005 Репутация: 4 Всего: 43 |
HTTP - "межгород", а ТСР - локально? |
|||
|
||||
| mbasil |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 399 Регистрация: 4.5.2007 Где: Москва Репутация: 9 Всего: 13 |
to COVD
Я прекрасно знаю, что HTTP это лишь туннелирование над TCP/IP, но есть ряд аспектов связанных с практиками администрирования Oracle: 1. Enterprise Manager через HTTP может работать и локально, а при некотором ослаблении безопасности вы можете подключаться для выполнения административных работ по TCP/IP и из глобальной сети (например, запустив RMAN на клиенте). 2. Многие администраторы работают "по старинке" не используя Enterprise Manager либо по причине нежелания стартовать на сервере базы данных сервер приложений, либо по причине безопасности. 3. Вопросы резервирования и восстановления в Oracle, в отличие от некоторых других баз данных, весьма непросты. Oracle декларирует, что у них сверх надежная база, однако за этот уровень пришлось заплатить сложностью. Хоть я помимо курсов по Java еще читаю курсы по администрированию Oracle и сталкивался со многими типами сбоев базы данных, но по секрету скажу, что знаю эти вопросы только поверхностно. Но. чтобы начинать заниматься резервированием/восстановлением, надо хотя бы поверхностно разобраться со всей картиной. Это сообщение отредактировал(а) mbasil - 2.5.2011, 10:07 |
|||
|
||||
| COVD |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 26.7.2005 Репутация: 4 Всего: 43 |
to mbasil
Я абсолютно согласен, что для администрирования следует использовать штатные средства. Просто удивило, что в качестве примера причины отсутствия должного соединения был приведен географический фактор. |
|||
|
||||
| mbasil |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 399 Регистрация: 4.5.2007 Где: Москва Репутация: 9 Всего: 13 |
Ну, говоря о другом городе, я просто имел в виду, что обычно у нас в России из соображений безопасности базу данных "отсекают" от возможности прямой видимости из глобальной сети. Поэтому, в большинстве случаев, при возникновении сбоя администратор должен как можно быстрее "взять ноги в руки", приехать на место и выполнить восстановление.
Если же речь идет о резервировании, то этот механизм должен быть настроен так, чтобы в общем он выполнялся автоматически и без присутствия администратора. |
|||
|
||||
| COVD |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 26.7.2005 Репутация: 4 Всего: 43 |
VPN не отвечает требованиям безопасности? Это сообщение отредактировал(а) COVD - 2.5.2011, 18:22 |
|||
|
||||
| mbasil |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 399 Регистрация: 4.5.2007 Где: Москва Репутация: 9 Всего: 13 |
to COVD
Отвечает. Можно использовать еще более простой способ, например обеспечить полное шифрование данных, передаваемых по TCP/IP подключению, средствами Oracle Net. Делается с помощью трех параметров. Однако "безопасники" в банке, например, никогда вам не позволят выполнять административные операции извне, подключаясь напрямую к базе. Вспомним, что наш вопрос разбивается на две части, о чем мы уже говорили: - резервирование, которое можно (и нужно) автоматизировать, так что извне по Web может понадобится только легкий контроль исполнения, типа просмотра наличия файлов резерва или журнала RMAN, наличия свободного места на диске и т.п. - восстановление, которое почти всегда возникает неожиданно, так как связано со сбоем, часто требует копирования множества файлов и черевато возможными неожиданными проблемами. Может получится удаленно и легко, а может и нет. Конечно, есть еще такие операции как создание дубликата базы для тестирования и т.п. Их можно делать удаленно, например с помощью того же RMAN, но это вопрос администрации фирмы. Принципиально, разрешает руководство удаленное администрирование, или - нет. И разработчик или администратор не может брать на себя решение этого вопроса. |
|||
|
||||
| koroplysov |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 120 Регистрация: 29.8.2009 Репутация: нет Всего: нет |
я с ораклом тесно не знаком, но в DB2 можно настроить создание бекапа, например, каждые 0,5 часа.
|
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |