Попробую оживить журнал
Скачал программу Semagic для удобного написания постов в блогС возвращением.По-центру
Linux core parameters
Коротко о параметрах ядра, важных для базы данных Oracle
SHMMAX
[root@rac2 ~]# cat /proc/sys/kernel/shmmax
4294967295
Определяет максимальный размер одного общего сегмента. В примере выше 4G. Важно следить чтобы размер SGA не превышал значения shmmax
SHMMNI
[root@rac2 ~]# cat /proc/sys/kernel/shmmni
4096
Определяет максимальное количество общих сегментов. Значение по-умолчанию вполне годится.
SHMALL
[root@rac2 ~]# cat /proc/sys/kernel/shmall
268435456
Максимальное количество памяти (в блоках, в линуксе блок = 4096 байт) доступное [...]
Instance tuning
Перечислю основные вьюхи мониторинга.
I. SGA
select * from V$SGA_TARGET_ADVICE
order by sga_size_factor
Если увеличить SGA_TARGET и SGA_MAX_TARGET до 3760Mb, DB_TIME уменьшится на 35%, а также станет заметно меньше физических чтений с диска.
Коротко получаем информацию о текущем состоянии SGA
select * from v$sgainfo
Перед нам состоянии всех объектов SGA. Далее можно углубиться в детали, обратившиь к v$sgastat.
Если используем динамически [...]
С Новым Годом
Поздравляю читателей с самым чистым и искренним праздником! Желаю исполнения желаний.
Rman change
Я создал бэкап базы данных и перебросил ее на другой хост, с тем, чтобы организовать физический стэндбай. Однако за ночь на базе прошел еще один плановый бэкап, и наутро стэндбай пытался восстановиться с новой копии, которой не было не сервере.
RMAN> change backup of database completed after ’sysdate-1′
Open for
Курсорный тип и связка параметров.
declare
type t_type is ref cursor;
t t_type;
tt dict_add%rowtype;
begin
open t for
’select * from dict_add where name=:p1′
using ‘uno’;
loop
fetch t into tt;
exit when t%NOTFOUND;
dbms_output.put_line(tt.name);
end loop;
close t;
end;
Или же варианта c BULK COLLECT
declare
type t_type is ref cursor;
t t_type;
tt dict_add%rowtype;
type ttt_type is [...]
Execute immediate bulk collect
При выполнении execute immediate можно собрать данные через bulk collect. Также продемонстрировано, каким образом можно передать переменный параметр.
declare
type t_type is table of dict_add%rowtype;
t t_type;
str varchar2(40) := ’select * from dict_add where name = :p1′;
begin
execute immediate str
bulk collect into t
using ‘uno’;
for i in t.first .. t.last
loop
dbms_output.put_line(t(i).name);
end [...]
Current of cur_name for update
Можно использовать выражение current of name_of_cursor. Но в таком случае нужно объявлять курсор for update
declare
cursor c_cur is
select * from dict_add
for update;
c_rec dict_add%rowtype;
begin
open c_cur;
loop
fetch c_cur into c_rec;
exit when c_cur%NOTFOUND;
update dict_add
set name= name || name
where current of c_cur;
end loop;
close c_cur;
end;
Open cursor
Из курсора также можно извлечь записи за одно обращение.
declare
type t_type is table of dict_add%rowtype;
t t_type;
cursor c_cur is
select * from dict_add;
– c c_cur;
begin
open c_cur;
fetch c_cur
bulk collect into t;
close c_cur;
for i in t.first..t.last
loop
dbms_output.put_line(t(i).name);
end loop;
end;