Основы работы с DBMS Oracle 5. Взаимодействие с СУБД

advertisement
Основы работы с 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
Download