Bog'liq 12-ma'ruza. Oracle ma`lumotlar bazasini yaratish
На заметку! При выдаче простой команды STARTUP Oracle последовательно выполнит все действия по запуску и одновременно запустит экземпляр и откроет его для публичного доступа. До тех пор, пока значение параметра ORACLE_SID соответствует запускаемой базе данных, ее имя можно не указывать в команде STARTUP.
Автоматический запуск баз данных Oracle
Автоматический запуск всех баз данных при каждом перезапуске операционной системы можно обеспечить, просто применяя стандартные сценарии операционной системы. Каждая база данных будет использовать собственный способ автоматизации запуска базы данных Oracle. В этом разделе мануала мы рассмотрим сценарии запуска и остановки баз данных в системах UNIX/Linux — приведенные примеры соответствуют среде Red Hat Linux.
Oracle предлагает два файла dbstart и dbshut, которые используют содержимое стандартного файла /etc/oratab для определения действующих на сервере баз данных Oracle и автоматического запуска и остановки всех баз данных при запуске и остановке системы. В большинстве систем UNIX/Linux эти два сценария находятся в каталоге $ORACLE_HOME/bin. После создания новой базы данных nina она была добавлена в файл oratab за счет добавления следующей строки (которая указывает имя базы данных, каталог ORACLE_HOME и то, должна ли база данных автоматически останавливаться и запускаться):
nina:/u01/app/oracle/product/10.2.0/db_1:Y
Чтобы запуск и остановка базы данных выполнялись автоматически при перезагрузке системы, сценарий потребуется добавить в каталог /etc/rc.d/init.d. Этот файл будет содержать предоставляемые Oracle сценарии dbstart и dbshut, как показано в листинге 10.10. Сценарий использует оператор выбора для определения того, нужно запускать или останавливать все базы данных Oracle и службу Oracle Listener.
#!/bin/sh # /etc/rc.d/init.d/oracle
# Описание: Следующий сценарий запускает и останавливает
# все базы данных и службы прослушивания Oracle
case "$1" in
start)
echo -n "Starting Oracle Databases: "
date +"! %T %a %D : Starting Oracle Databases after
system start up." >> /var/log/oracle
echo "-------------------------------------" >> /var/log/oracle
su - oracle -c dbstart >> /var/log/oracle
echo "Done."
echo -n "Starting Oracle Listeners: "
su - oracle -c "lsnrctl start" >> /var/log/oracle
echo "Done."
echo ""
echo "--------------------------------------" >> /var/log/oracle
date +"! %T %a %D : Finished." >> /var/log/oracle
echo "--------------------------------------" >> /var/log/oracle
;;
stop)
echo -n "Shutting Down Oracle Listeners: "
echo "----------------------------------------" >> /var/log/oracle
date +"! %T %a %D : Shutting Down All Oracle Databases
as part of system shutdown." >> /var/log/oracle
echo "----------------------------------------" >> /var/log/oracle
su - oracle -c "lsnrctl stop" >> /var/log/oracle
echo "Done."
echo -n "Shutting Down Oracle Databases: "
su - oracle -c dbshut >> /var/log/oracle
echo "Done."
echo ""
echo "-----------------------------------------" >> /var/log/oracle
date +"! %T %a %D : Finished." >> /var/log/oracle
echo "-----------------------------------------" >> /var/log/oracle
;;
restart)
echo -n "Restarting Oracle Databases: "
echo "------------------------------------------" >> /var/log/oracle
date +"! %T %a %D : Restarting Oracle Databases
after system startup." >> /var/log/oracle
echo "------------------------------------------" >> /var/log/oracle
su - oracle -c dbshut >> /var/log/oracle
su - oracle -c dbstart >> /var/log/oracle
echo "Done."
echo -n "Restarting the Oracle Listener: "
su - oracle -c "lsnrctl stop" >> /var/log/oracle
echo "Done."
echo ""
echo "---------------------------------------------" >> /var/log/oracle
date +"! %T %a %D : Finished." >> /var/log/oracle
echo "---------------------------------------------" >> /var/log/oracle
;;
*)
echo "Usage: oracle {start|stop|restart}"
exit 1
esac
Системный администратор должен создать символьные ссылки запуска и остановки в каталогах /etc/rc.d/rcX.d соответствующего уровня выполнения. Следующие команды обеспечат, чтобы базы данных запускались на уровнях выполнения 2, 3 и 4.
$ ln -s ../init.d/oracle /etc/rc.d/rc2.d/S99oracle
$ ln -s ../init.d/oracle /etc/rc.d/rc3.d/S99oracle
$ ln -s ../init.d/oracle /etc/rc.d/rc4.d/S99oracle
Чтобы базы данных останавливались при каждой перезагрузке или перезапуске хоста, потребуется также добавить следующие ссылки:
$ ln -s ../init.d/oracle /etc/rc.d/rc0.d/K01oracle # Остановка
$ ln -s ../init.d/oracle /etc/rc.d/rc6.d/K01oracle # Перезагрузка
Ограничение доступа к базе данных
Иногда при выполнении загрузки данных, экспорте или импорте данных или же при решении других важных задач обслуживания требуется, чтобы база данных была открыта для вас, но не для обычных пользователей. Этого можно достичь несколькими различными способами. Во-первых, базу данных можно перевести в ограниченный режим, в котором вам будет предоставлен полный доступ, а подключение обычных пользователей будет запрещено, как показано в листинге 10.11.
SQL> STARTUP RESTRICT;
ORACLE instance started.
Total System Global Area 314572800 bytes
Fixed Size 1236756 bytes
Variable Size 99164396 bytes
Database Buffers 213909504 bytes
Redo Buffers 5169152 bytes
Database mounted.
Database opened.
SQL>
По завершении обслуживания или других задач базу данных можно открыть для всеобщего использования, просто выдав команду ALTER SYSTEM, как показано в следующем примере:
SQL ALTER SYSTEM DISABLE RESTRICTED SESSION;
System altered.
SQL>
Открытую и неограниченную базу данных можно также перевести в режим ограничения, используя такую команду:
SQL> ALTER SYSTEM ENABLE RESTRICTED SESSION;
System altered.
SQL>
При переводе базы данных в ограниченный режим с помощью команды ALTER SYSTEM, как показано в предыдущем примере, права существующих пользователей никак не ограничиваются. Запрещена регистрация новых пользователей, если только они не обладают полномочиями подключения к ограниченному сеансу. По завершении выполняемых задач базу данных можно снова перевести в открытый неограниченный режим с помощью команды ALTER SYSTEM DISABLE RESTRICTSESSION. Иногда может требоваться использовать открытую базу данных, но временно запретить любые изменения в ней. То есть нужно разрешить операции чтения (операции SELECT) в базе данных, но не операции записи. Перевод базы данных в режим только для чтения продемонстрирован в листинге 10.12.
SQL> STARTUP MOUNT
ORACLE instance started.
Total System Global Area 314572800 bytes
Fixed Size 1236756 bytes
Variable Size 99164396 bytes
Database Buffers 213909504 bytes
Redo Buffers 5169152 bytes
Database mounted.
SQL> ALTER DATABASE OPEN READ ONLY;
Database altered.
SQL>
Обычно режим только для чтения применяется в резервных базах данных, которые представляют собой копии производственных баз данных, предназначенные для снятия части нагрузки по запросу родительской производственной БД.
Остановка базы данных Oracle
Остановка работающей базы данных может требоваться для выполнения некоторых типов резервного копирования, для модернизации программного обеспечения и т.п. Это можно сделать несколькими способами. Выбранный вариант будет влиять на время, затрачиваемое на остановку базы данных, и на возможную необходимость восстановления экземпляра базы данных при ее перезапуске. Четыре доступных опции команды остановки базы данных описаны в следующих разделах данного мануала.
Команда SHUTDOWN NORMAL
При выдаче команды SHUTDOWN NORMAL для остановки базы данных Oracle дождется отключения всех пользователей от базы данных, прежде чем остановить ее. Если пользователь уедет в отпуск на неделю после регистрации в базе данных, а вы выдадите команду SHUTDOWN NORMAL, базе данных придется продолжать работать до тех пор, пока пользователь не вернется и не выйдет из нее. Нормальный режим — используемый по умолчанию режим остановки базы данных Oracle. Выдача команды осуществляется следующим образом:
SQL> SHUTDOWN NORMAL
или
SQL> SHUTDOWN
Ниже описаны некоторые особенности команды SHUTDOWN NORMAL.
После выполнения этой команды никакие подключения новых пользователей невозможны.
Прежде чем остановить базу данных, Oracle дожидается, пока все пользователи выйдут из своих сеансов.
При перезапуске базы данных никакое восстановление экземпляра не требуется, поскольку перед остановкой Oracle запишет все буферы журналов повторного выполнения и буферы блоков данных на диск. Таким образом, при такой остановке база данных сохраняет целостность.
Oracle закрывает файлы данных и прерывает фоновые процессы. Область SGA Oracle освобождается.
Команда SHUTDOWN TRANSACTIONAL
Если нет желания долго ожидать выхода пользователя из базы данных, можно воспользоваться командой SHUTDOWN TRANSACTIONAL. Oracle дождется завершения всех активных транзакций, прежде чем отключить всех пользователей от базы данных, а затем остановит базу данных. Выдача команды выполняется следующим образом:
SQL> SHUTDOWN TRANSACTIONAL
Ниже перечислены некоторые особенности команды SHUTDOWN TRANSACTIONAL.
После выполнения этой команды никакие подключения новых пользователей невозможны.
Существующие пользователи не могут начать новую транзакцию и будут отключены от базы данных.
Если у пользователя имеется выполняющаяся транзакция, Oracle дождется завершения этой транзакции, прежде чем отключить пользователя.
После завершения всех существующих транзакций Oracle останавливает экземпляр и освобождает память. Oracle записывает все буферы журналов повторного выполнения и буферы блоков данных на диск.
Никакое восстановление экземпляра не требуется, поскольку база данных сохраняет целостность.
Команда SHUTDOWN IMMEDIATE
Иногда на момент принятия решения об остановке базы данных пользователь может выполнять очень продолжительную транзакцию. В такой ситуации оба ранее описанных режима остановки оказываются бесполезными. В режиме SHUTDOWN IMMEDIATE Oracle не будет дожидаться ни выхода пользователя из сеанса, ни завершения каких-либо транзакций. Будет просто выполнен откат всех активных транзакций, отключение все подключенных пользователей и останов базы данных. Эта команда имеет следующий вид:
SQL> SHUTDOWN IMMEDIATE
Ниже описаны некоторые особенности команды SHUTDOWN IMMEDIATE.
После выполнения этой команды никакие подключения новых пользователей невозможны.
Oracle немедленно отключает всех пользователей.
Oracle прерывает все выполняющиеся в текущий момент транзакции.
Для всех транзакций, прерванных в процессе выполнения, Oracle выполнит откат, чтобы в конечном итоге база данных сохранила целостность. Именно этот процесс отката является причиной того, что команда SHUTDOWN IMMEDIATE не всегда выполняется немедленно. Это обусловлено тем, что Oracle занят откатом только что прерванных транзакций. Однако если никаких активных транзакций не существует, команда SHUTDOWN IMMEDIATE остановит базу данных очень быстро. Oracle прерывает фоновые процессы и освобождает память.
При запуске базы данных никакое восстановление экземпляра не требуется, поскольку при остановке она сохраняет целостность.
Команда SHUTDOWN ABORT
Команда SHUTDOWN ABORT останавливает базу данных очень быстро. Выполняемым в текущий момент транзакциям не предоставляется возможность ни для завершения, ни для отката. Подключения пользователей просто разрываются. Эта команда имеет следующий вид:
SQL> SHUTDOWN ABORT
Ниже перечислены некоторые особенности команды SHUTDOWN ABORT.
После выполнения этой команды никакие новые подключения невозможны.
Существующие сеансы прерываются, независимо от наличия в них активных транзакций.
Oracle не выполняет откат прерванных транзакций.
Oracle не записывает буферы журналов повторного выполнения и буферы блоков данных на диск.
Oracle прерывает фоновые процессы, немедленно освобождает память и останавливает базу данных.
При перезапуске Oracle выполнит автоматическое восстановление экземпляра, поскольку целостность базы данных при остановке не гарантируется.
При остановке базы данных по команде SHUTDOWN ABORT во время перезапуска база данных должна выполнить восстановление экземпляра, чтобы обеспечить целостность в плане транзакций, поскольку могут существовать незафиксированные транзакции, которые нуждаются в откате. Важно помнить, что при выдаче команды SHUTDOWN ABORT база данных может быть остановлена в нецелостном состоянии. В большинстве случаев явное использование команды RECOVER не обязательно, поскольку база данных будет выполнять восстановление экземпляра по собственной инициативе.
Совет. В Oracle рекомендуют перед сохранением резервной копии всегда останавливать базу данных в режиме сохранения целостности, используя команду SHUTDOWN или SHUTDOWN IMMEDIATE, а не SHUTDOWN ABORT.
В листинге 10.13 показано, что происходит при попытке перевода базы данных в режим только для чтения после того, как вначале команда SHUTDOWN ABORT была использована для ее остановки. Обратите внимание, что Oracle не переведет файлы данных в режим только для чтения до тех пор, пока база данных не будет восстановлена вручную.
SQL> SHUTDOWN ABORT
ORACLE instance shut down.
SQL> STARTUP MOUNT
ORACLE instance started.
Total System Global Area 314572800 bytes
Fixed Size 1236756 bytes
Variable Size 99164396 bytes
Database Buffers 213909504 bytes
Redo Buffers 5169152 bytes
Database mounted.
SQL> ALTER DATABASE OPEN READ ONLY;
alter database open read only
*
ERROR at line 1:
ORA-16005: database requires recovery
ОШИБКА в строке 1:
ORA-16005: база данных требует восстановления
SQL> RECOVER DATABASE;
Media recovery complete.
SQL>