Основы работы с DBMS Oracle ORACLE_DBENABLED=true LISTENER_PORT=1521 HTTP_PORT=8080 CONFIGURE_RUN=true 1. Основные переменные окружения 5. Взаимодействие с СУБД ORACLE_HOME ORACLE_SID NLS_LANG TNS_ADMIN LD_LIBRARY_PATH PATH 2. Файл tnsnames.ora linXE = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = hostname) (PORT = 1521)) Листенер порождает процесс dedicated server и передает (CONNECT_DATA = соединение ему (возможно, когда клиент и сервер (SERVER = DEDICATED) расположены на одной машине). (SERVICE_NAME = XE) ) ) /* Управление сервисами — посредством пакета DBMS_SERVICE */ 3. Файл listener.ora $ less $ORACLE_HOME/network/admin/listener.ora SID_LIST_LISTENER = (SID_LIST = (SID_DESC = Листенер порождает процесс dedicated server и передает (SID_NAME = PLSExtProc) адрес процесса сервера клиенту, клиент подсоединяется (ORACLE_HOME = к серверу. /usr/lib/oracle/xe/app/oracle/product/10.2.0/server) (PROGRAM = extproc) ) (SID_DESC = (SID_NAME = hsodbc) (ORACLE_HOME=/usr/lib/oracle/xe/app/oracle/produ ct/10.2.0/server) (PROGRAM = hsodbc ) ) ) LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = Листенер передает соединение напрямую dispatcher'у (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC_FOR_XE)) (ADDRESS = (PROTOCOL = TCP)(HOST = oracle.demo.sfedu.ru)(PORT = 1521)) ) ) DEFAULT_SERVICE_LISTENER = (XE) /* hsodbc — heterogeneous services PLSExtProc — сервис для обращения ко внешним процедурам (например, написанным на Си), XE — основной сервис БД */ 4. Файл /etc/oratab XE:/usr/lib/oracle/xe/app/oracle/product/10.2.0/server:Y 5. Специфика XE Листенер может передать адрес диспатчера клиенту. Запуск СУБД: # /etc/init.d/oracle-xe start Просмотр активных сервисов: Остановка СУБД: $ lsnrctl services # /etc/init.d/oracle-xe stop Просмотр статуса listener'а Файл конфигурации скрипта запуска: $ lsnrctl status # cat /etc/sysconfig/oracle-xe|grep -v '^#' |grep -v '^$' 6. Распределение памяти СУБД PGA — выделяется на процесс СУБД (при подсоединении клиента) SGA — разделемая память СУБД При использовании разделяемого сервера большая часть памяти для процесса (UGA) выделяется в SGA, а не в PGA. sys@XE>show parameter pga_aggregate_Tar $ less $ORACLE_HOME/dbs/init.ora | grep -v '^#' |grep -v '^$' NAME TYPE VALUE ------------------------------------ ----------pga_aggregate_target big integer 90M shared_pool_size = 3500000 processes = 50 # SMALL sys@XE>show sga parallel_max_servers = 5 # SMALL Total System Global Area 209715200 bytes Fixed Size 1258028 bytes Variable Size 176164308 bytes Database Buffers 29360128 bytes Redo Buffers 2932736 bytes log_buffer = 32768 # SMALL sys@XE> select pool,sum ( bytes ) from v$sgastat group by pool; POOL SUM(BYTES) ------------ ---------33550892 //Кэшированные блоки БД java pool 4194304 // пул для JVM streams pool 8388608 // пул для Oracle Streams shared pool 159388244 //совместно используемые курсоры, процедуры, etc large pool 4194304 // буфер сообщений при использовании разделяемого сервера, пул RMAN db_name=DEFAULT db_files = 80 # SMALL db_file_multiblock_read_count = 8 # SMALL db_block_buffers = 100 # SMALL #SMALL log_checkpoint_interval = 10000 max_dump_file_size = 10240 # limit trace file size to 5 Meg each global_names = TRUE control_files = (ora_control1, ora_control2) /* По умолчанию используется spfile, бинарный файл $ORACLE_HOME/dbs/spfile${ORACLE_SID}.ora, при его отсутствии — spfile.ora, при его отсутствии init$ {ORACLE_SID}.ora, при его отсутствии init.ora */ sys@XE> alter system set sga_target=190M scope=spfile; /* при запуске c spfile scope=both по умолчанию, с pfile — scope=memory Можно создать spfile из pfile и наоборот*/ sys@XE>create pfile='/tmp/init.ora' from spfile; 7. Параметры СУБД, влияющие на распределение памяти JAVA_POOL_SIZE 9. Запуск и остановка СУБД $ export ORACLE_SID=XE SHARED_POOL_SIZE $ sqlplus /as\ sysdba LARGE_POOL_SIZE По стадиям: DB_*_CACHE_SIZE idle>startup nomount; // Запуск instance, чтение pfile/spfile LOG_BUFFER SGA_TARGET — для автоматического управления SGA SGA_MAX_SIZE — для управления максимальным размером SGA sys@XE>alter system set sga_target=190M; sys@XE>show parameter SGA idle>alter database mount; // Oracle определяет местоположение datafile'ов, но не открывает их idle>alter database open; // Полный запуск, осткрытие файлов данных Или, короче: $ sqlplus /as\ sysdba idle> startup; NAME lock_sga TYPE boolean VALUE FALSE pre_page_sga boolean sga_max_size big integer 200M sga_target FALSE big integer 192M 8. Использование файлов конфигурации PFILE и SPFILE Запуск listener'а $ lsnrctl start // если запустили после СУБД idle>alter system register; Остановка СУБД: idle>shutdown immediate; //не ждать отключений пользоаетелей idle>shutdown; // ждать отключений пользователей idle> shutdown transactional; // ждать завершения транзакций Добавляем в ~/.profile 10. Создание пользователя СУБД и выдача ему необходимых прав define _editor=vim alias sqlplus='rlwrap sqlplus' idle> shutdown abort; // убивает сервер, незавершенные /* Создаем ~/login.sql */ транзакции не откатываются, при запуске необходимо восстановление ~/login.sql $ sqlplus /as\ sysdba SQL> create user myuser identified by some_PAs$; SQL> grant create session to myuser; SQL> grant resource to myuser; SQL> grant create view to myuser; SQL> grant alter session to myuser; set serveroutput on format wrapped size 1000000 set trimspool on set long 5000 set linesize 100 set pagesize 9999 column plan_plus_exp format a80 column global_name new_value gname SQL> alter user myuser quota unlimited on users; set termout off /* Создание схемы HR, которая будет использоваться в define gname=idle заданиях */ column global_name new_value gname SQL> @/usr/lib/oracle/xe/app/oracle/product/10.2.0/server/demo/ select lower(user)|| '@'|| substr(global_name,1, schema/human_resources/hr_cre.sql decode( dot, 0,length(global_name),dot-1)) global_name QL> select object_name,object_type from user_objects; OBJECT_NAME OBJECT_TYPE from (select global_name,instr(global_name,'.') dot from global_name); set sqlprompt '&gname>' ------------------- set termout on REGIONS TABLE alter session set nls_date_format = 'dd-MM-yyyy hh24:mi:ss'; REG_ID_PK INDEX COUNTRIES TABLE COUNTRY_C_ID_PK INDEX …... EMPLOYEES_SEQ SEQUENCE JOB_HISTORY TABLE JHIST_EMP_ID_ST_DATE_PK INDEX EMP_DETAILS_VIEW VIEW 11. Удобства при работе в sqlplus По ссылке скачиваем и устанавливаем rlwrap (ну или собираем из исходников) http://halisway.blogspot.com/2006/10/rlwrap-for-rhelcentos-unbreakable.html # yum install compat-readline43 # rpm -ivh rpm -ivh rlwrap-hali-0.26-1.x86_64.rpm