Показаны сообщения с ярлыком DBA. Показать все сообщения
Показаны сообщения с ярлыком DBA. Показать все сообщения

среда, 10 февраля 2010 г.

Oracle Remote Diagnostic Agent (RDA)

Metalink arcticle: RDA Documentation Index [ID 414966.1]

# Connect Oracle software owner:
su - oracle

# Add PATH for RDA executable files:
vi ~/.bash_profile
PATH=${ORACLE_BASE}/rda:${PATH}


# Test REPL:
which perl
perl -V

# Verify RDA:
rda.sh -cv

# Configure RDA:
cd ${HOME}
export ORACLE_SID=orcl
rda.sh -S

# View configuration file:
more ${HOME}/setup.cfg

# Collect RDA:
export ORACLE_SID=orcl
rda.sh

# Review RDA output:
cd ${HOME}/output

понедельник, 7 декабря 2009 г.

Index online redefinition repair

--
-- 1) alter index owner.index_name rebuild online;
-- 2)kill session
-- 3) ...
--

-- Check Locks On online_index:
select *
from v$session
where sid in
(select session_id from dba_dml_locks where name = 'EVENTCOMMIT')


-- Cleanup index:
declare
  retval boolean;
  object_id binary_integer;
  wait_for_lock binary_integer;
begin
  object_id := 71593;
  wait_for_lock := 0;
  
  retval := dbms_repair.online_index_clean (object_id, wait_for_lock);
  commit;
  
  dbms_output.put_line(retval);
end;

четверг, 27 августа 2009 г.

Установка и конфигурирование шлюза Oracle к SQL Server

Установка шлюза

Соблюдение требований к оборудованию и операционной системе (Certification Matrix for Open System Gateways).

Настройка переменных среды окружения
export DISPLAY=xxx.xxx.xxx.xxx:0.0
export ORACLE_BASE=/app/oracle

Шаги установщика Oracle Universal Installer:
Oracle Universal Installer: Welcome   -> Next
Oracle Universal Installer: Select a Product to Install   -> Oracle Database  Gateways 11.1.0.6
Oracle Universal Installer: Specify Home Details  -> 
   Name: OraGtw11g_home1
   Path: /app/oracle/product/11.1.0/tg_1
Oracle Universal Installer: Available Product Components   -> 
    a. Select Oracle Database Gateway for SQL Server 11.1.0.6.0.
    b. Click Next.
Oracle Universal Installer: Oracle Database Gateway for SQL Server   ->
  SQL Server Database Server Host Name: testhost
  SQL Server Database Server Port number: 1344
  SQL Server Instance Name:  
  SQL Server Database Name: testdb
Oracle Universal Installer: Summary   -> Click Install.
Oracle Net Configuration Assistant: Welcome   -> Click Cancel.
Oracle Net Configuration Assistant   -> Click Yes.
Error   ->  Click Ok.
Oracle Universal Installer: Configuration Assistants   ->  Click Next.
Execute Configuration Scripts   -> (as root)# /app/oracle/product/11.1.0/tg_1/root.sh
  -> Then Click OK.
Oracle Net Configuration Assistant: End of Installation -> Click Exit

четверг, 20 августа 2009 г.

Индексы требующие перестроения

declare
  v_Owner    dba_indexes.owner%type;        -- Setup Index Owner
  v_IdxName  dba_indexes.index_name%type;   -- Setup Index Name
  
  vOwner     dba_indexes.owner%type;        -- Index Owner
  vIdxName   dba_indexes.index_name%type;   -- Index Name
  vAnalyze   varchar2(100);                 -- String of Analyze Stmt
  vCursor    number;                        -- DBMS_SQL cursor
  vNumRows   integer;                       -- DBMS_SQL return rows
  vHeight    index_stats.height%type;       -- Height of index tree
  vLfRows    index_stats.lf_rows%type;      -- Index Leaf Rows
  vDLfRows   index_stats.del_lf_rows%type;  -- Deleted Leaf Rows
  vDLfPerc   number;                        -- Del lf Percentage
  vMaxHeight number;                        -- Max tree height
  vMaxDel    number;                        -- Max del lf percentage
  
  cursor cGetIdx(
    pc_owner dba_indexes.owner%type,
    pc_index dba_indexes.owner%type
  )
  is select owner,index_name
  from dba_indexes
  where owner = nvl(pc_owner, owner)
    and index_name = nvl(pc_index, index_name)
    and index_type='NORMAL'
    order by owner, index_name;
begin
  -- Customize maximums:
  vMaxHeight := 3;
  vMaxDel    := 20;
  
  -- Customize indexes:
  v_Owner   := 'OWNER_NAME';
  v_IdxName := 'INDEX_NAME';
  
  -- Open Indexes Cursor:
  open cGetIdx(v_Owner, v_IdxName);
  
  -- For every index, validate structure:
  loop
    fetch cGetIdx
    into vOwner, vIdxName;
    
    exit when cGetIdx% notfound;
    
    -- Try Analyze Index:
    begin
      -- Open DBMS_SQL cursor:
      vCursor := dbms_sql.open_cursor;
      
      -- Set up dynamic string to validate structure:
      vAnalyze := 'analyze index ' || vOwner || '.' || vIdxName || ' validate structure';
      dbms_sql.parse(vCursor, vAnalyze, dbms_sql.v7);
      vNumRows := dbms_sql.execute(vCursor);
      
      -- Close DBMS_SQL cursor:
      dbms_sql.close_cursor(vCursor);
      
      -- Does index need rebuilding? If so, then generate command
      select height, lf_rows, del_lf_rows
      into vHeight, vLfRows, vDLfRows
      from index_stats;
      
      -- Handle case where div by zero:
      if vDLfRows = 0 then 
        vDLfPerc := 0;
      else
        vDLfPerc := trim((vDLfRows / vLfRows) * 100);
      end if;
      
      if (vDLfPerc > vMaxDel) then
        dbms_output.put_line(
          'alter index ' || vOwner || '.' || vIdxName ||
          ' rebuild online compute statistics;' || ' -- ' || to_char(vDLfPerc, '09') || '%'
        );
      end if;
    exception
      when others then
        dbms_output.put_line( '-- ' || vOwner || '.' || vIdxName || ': ' || sqlerrm());
    end;
  end loop;
  
  -- Close Indexes Cursor:
  close cGetIdx;
end;
/

среда, 15 апреля 2009 г.

Мониторинг отката транзакций

Иногда после принудительного прекращения массового обновления ощущается замедление работы СУБД.
Можно проверить наличие отката транзакций запросом:

select *
from V$FAST_START_SERVERS t;

который вернет информацию по процесам, выполняющим откат незавершенной транзакции.

Ход выполнения отката транзакции можно уточнить запросом:

select t.UNDOBLOCKSDONE/t.UNDOBLOCKSTOTAL*100
from v$fast_start_transactions t;

Более подробно можно почитать здесь:
week2_10gdba.html

вторник, 16 декабря 2008 г.

Standby сервер - заметки

-- Включение/отключение автоматического управления файлами на резервном сервере:
ALTER SYSTEM STANDBY_FILE_MANAGEMENT = AUTO;
ALTER SYSTEM STANDBY_FILE_MANAGEMENT = MANUAL;

-- Команда ручного добавления файла данных на резервном сервере:
alter database create datafile 'UNNAMED00012' as '/oradata/users02.dbf';

-- Включение режима принудительного переключения журналов повтора:
alter system set archive_lag_target=900;

-- Включение режима принудительного журналирования:
ALTER DATABASE FORCE LOGGING;

среда, 1 октября 2008 г.

Просмотр плана выполнения SQL запроса по его HASH_VALUE

--
-- Просмотр плана выполнения SQL запроса по его HASH_VALUE:
--
select hash_value,
child_number,
lpad(' ',2*depth)||operation||' '||options||decode(id, 0, substr(optimizer,1,6)||' Cost='||to_char(cost)) operation,
object_name object,
cost,
cardinality,
round(bytes / 1024) kbytesfrom,
id,
depth,
access_predicates,
filter_predicates
from v$sql_plan
where hash_value = &SQL_HASH_VALUE
order by hash_value, child_number, id;

воскресенье, 28 сентября 2008 г.

Создание резервного сервера для кластерной СУБД

  • Subject: RMAN: RAC Backup and Recovery using RMAN
  • Subject: Step By Step Guide To Create Physical Standby Database Using RMAN

Резервирование открытой базы данных Oracle

Резервирование открытой базы данных Oracle производится с режиме ARCHIVELOG, путем перевода табличного пространства в режим резервирования.

Команды смены состояния табличных пространств:
alter tablespace begin backup;
-- !cp -p
alter tablespace end backup;

В скриптах обратить внимание на спецсимвол $ - т.к. в unix системах командный интерпретатор пытается обработать знак $.

Еще с чем пришлось столкнуться - так это зарезервированные слова в СУБД Oracle. Например, название табличного пространства DEFAULT - зарезервированное слово. Желательно названия табличных пространств указывать в двойных кавычках.


Некоторые команды диагностики:
--PROD
select * from v$backup;
select name, status, fuzzy from V$DATAFILE_HEADER;
select * from v$backup where status = 'ACTIVE';

-- Подробная информация по состоянию резервного копирования:
SELECT t.name AS "TB_NAME", d.file# as "DF#", d.name AS "DF_NAME", b.status,b.Change#,b.time
FROM V$DATAFILE d, V$TABLESPACE t, V$BACKUP b
WHERE d.TS#=t.TS#
AND b.FILE#=d.FILE#


-- STBY
select file#, FUZZY from V$DATAFILE_HEADER;


-- Упомининие случаев на "Metalink":
Bug 1158714 - V$Datafile_Header.Fuzzy Field Only Reflects Hot Backup Fuzziness
Note 90220.1 - How to determine the Status of files ALTER TABLESPACE BEGIN BACKUP

вторник, 9 сентября 2008 г.

Включение режима архивирования

alter system set log_archive_dest_1='LOCATION=/u01/oradata/arch_logs_01/loans/ MANDATORY' scope=spfile;
alter system set log_archive_dest_2='LOCATION=/u01/oradata/arch_logs_02/loans/ OPTIONAL' scope=spfile;

alter system set log_archive_format='loans_%t_%s_%r.arc' scope=spfile;
alter system set archive_lag_target=900 scope=spfile;

-- Включение режима архивирования:
shutdown immediate
startup mount
alter database archivelog;
alter database open;

alter system switch logfile;
alter system switch logfile;
alter system switch logfile;
alter system switch logfile;
alter system switch logfile;

среда, 27 августа 2008 г.

Использование переменных привязки в SQLPLUS

Оригинальная статья
Using bind variables in SQL*Plus

Трассировка в Oracle

Расмотрены вопросы использования трассировки в Oracle.

Дополнительно:
http://oradba.com.ru/tuning/optimizer/tips/t2_sqltrace.shtml


Пример:
grant alter session to ;

-- On:
begin
execute immediate 'alter session set max_dump_file_size = UNLIMITED';
execute immediate 'alter session set tracefile_identifier=TRACE_LABEL';
execute immediate 'alter session set events=''10046 trace name context forever,level 12''';
end;
/

-- Select:
select * from dual;

-- Off:
begin
execute immediate 'alter session set events=''10046 trace name context off''';
end;
/


Еще один пример:
-- Включение:
begin
dbms_system.set_bool_param_in_session(129,9871,'timed_statistics',true);
dbms_system.set_int_param_in_session(129,9871,'max_dump_file_size',2147483647);
dbms_system.set_ev(129,9871,10046,12,'');
end;
/

-- Выключение:
begin
--dbms_system.set_bool_param_in_session(129,9871,'timed_statistics',true);
--dbms_system.set_int_param_in_session(129,9871,'max_dump_file_size',2147483647);
dbms_system.set_ev(129,9871,10046,0,'');
end;
/

среда, 13 августа 2008 г.

System Stats strategy

В оригинальной статье рассмотриваются вопросы калибровки стоимости чтения при индексном доступе и при многоблочном чтении - полном сканировании таблицы.

При значениях, получаемых по умолчанию в Oracle 10g - оказывается что полное сканирование таблицы с 30 млн. строк дешевле чем индексный доспуп по первичному ключу.

Для операционной системы SOLARIS можно попробовать "пузомерку" для определения истинных значений характеристик IO (исключая буферизирующее чтение и прочие кэши)
FileBench

Для этих же целей можно использовать Oracle утилиту Orion.

Также рассматриваются настройки параметров в случае сбора системной статистики
optimizer_index_cost_adj
optimizer_index_caching

вторник, 12 августа 2008 г.

Выполнение настроек сессии - after_logon_trigger

create or replace trigger bkw$_after_logon_on_database
after logon on database
declare
-- Target parameters:
l_tracefile_id      varchar(100);
l_event             varchar(100);

l_target_username   varchar(100);
l_targer_ip_address varchar(100);


-- Current Parameters:
l_cur_username   varchar(100);
l_cur_ip_address varchar(100);
begin
--
-- Setup Target parameters:
--
l_tracefile_id      := 'BKW_TRACE_001';
l_event             := '10046 trace name context forever,level 12';

l_target_username   := '';
l_targer_ip_address := '';


--
-- Read current parameters From Syscontext:
--

-- Username:
select sys_context('USERENV','SESSION_USER') into l_cur_username from dual;

-- Client IP:
select sys_context('USERENV','IP_ADDRESS')  into l_cur_ip_address from dual;


--
-- Check Conditions:
--
if (l_cur_username=l_target_username) and (l_cur_ip_address=l_targer_ip_address) then
execute immediate 'alter session set max_dump_file_size = UNLIMITED';
execute immediate 'alter session set tracefile_identifier='||l_tracefile_id;
execute immediate 'alter session set events=''||l_event||''';
end if;
exception
when others then
null;
end;
/

понедельник, 11 августа 2008 г.

Oracle Events

Diagnostic events

10046
Трассировка sql запросов.
Источник

10053
Отладка стоимостного оптимизатора (optimizer debug event)
Источник

10195
Отключение генерации транзитивных предикатов
Что-то в инете

Настройка производительности приложения

Общая методика настройки приложения в среде Oracle 10g заключается в последовательном выполнении серии мероприятий. На первой стадии настраиваются общие параметры экземпляра СУБД.

Необходимо выбрать значение параметра optimizer_mode на уровне экземпляра СУБД. Что позволит перейти к дальнейшим настройкам на следующих уровнях.

Выбор значения параметра optimizer_mode зависит от специфики приложения. Для транзакционных систем - "OLTP систем" установите значение в FIRST_ROWS, а для гибридных и аналитических "OLAP систем" - рекомендуется ALL_ROWS, что является значением по умолчанию. Существуют и другие значения параметра, но они в контексте СУБД Oracle версии 10g менее "привлекательны" - речь идет о значении параметра optimizer_mode=CHOOSE, т.к. оптимизатор по правилам в редакции СУБД ORACLE начиная с версии 10g не поддерживается.

На примере одной Автоматизированной Банковской Системы (АБС) - пробовались следующие значения параметра optimizer_mode: ALL_ROWS, FIRST_ROWS и CHOOSE.
После миграции на версию СУБД Oracle 10g sql запросы АБС сменили планы выполнения. Часть sql запросов показали сравнительно лучшую производительность по сравнению с предыдущими версиями СУБД Oracle (8i) - однако получить положительный отклик от пользователей АБС не представляется возможным. Другая часть sql запросов кардинально не изменила своих временных характеристик.
А вот с чем придется столкнуться, так это подмножество SQL запросов - которое стало выполняться значительно медленнее.

Продолжение следует...
Статья не закончена...