20 мая 2008 г.

Подключение к iSQL*Plus как SYSDBA или SYSOPER в Oracle 9i

Как sysdba или sysoper можно подключиться через iSQL*Plus в Oracle 9i можно по другому url:
http://hostname:7776/isqlplusdba

По умолчанию на /isqlplusdba включена базовая аутентификация и при перед открытием страницы, запросит имя пользователя и пароль.
Чтоб добавить пользователя для базовой аутентификации в Oracle 9i используется стандартная утилита Apache - htpasswd (в Oracle10g - джава утилита jazn, о ней можно почитать здесь):

oracle@myhost $ cd $ORACLE_HOME/Apache/Apache/bin
oracle@myhost $ ./htpasswd -b $ORACLE_HOME/sqlplus/admin/iplusdba.pw username password
Тепер, при открытие в http://hostname:7776/isqlplusdba можно ввести логин (username) и пароль пользователя (password) и подключиться к базе данных как SYSDBA и SYSOPER.

Или же можно отключить базовую аутентификация в /isqlplusdba закомментировав 4 строчки в ORACLE_HOME/sqlplus/admin/isqlplus.conf:
<Location /isqlplusdba>
SetHandler fastcgi-script
Order deny,allow
#AuthType Basic
#AuthName 'iSQL*Plus DBA'
#AuthUserFile /u01/app/oracle/product/9.2.0.8.0/sqlplus/admin/iplusdba.pw
#Require valid-user
</Location>

Не забудьте перегрузить Apache после изменений:
oracle@hostname $ cd $ORACLE_HOME/Apache/Apache/bin
oracle@hostname $ ./apachectl stop
./apachectl stop: httpd stopped
oracle@hostname $ ./apachectl start
./apachectl start: httpd started
Теперь при открытии http://hostname:7776/isqlplusdba не будет запрашивать логин и пароль.

15 мая 2008 г.

DBMS_STATS или ANALYZE? (3)

Это продолжение темы "DBMS_STATS или ANALYZE?" Здесь я написала о том, почему Oracle рекомендует использовать dbms_stats вместо analyze, а здесь - о том, отличаются ли статистические данные собраные с помощью dbms_stats от данных, собранных с помощью analyze и если отличаются, то чем именно и кому из них верить.

Очередной вопрос: как определить, каким образом была собрана статистика? Пакетом dbms_stats или оператором analyze?

Столбец global_stats в представлениях dba_tables, dba_indexes, dba_tab_cols, dba_tab_columns, dba_tab_col_statistics определяет собрана глобальная статистика или нет.

Так как analyze не умеет собирать глобальную статистику (ее может собрать только dbms_stats), то можем сделать вывод, что если глобальная статистика собрана, то статистика была собрана с помощью dbms_stats, а если нет глобальной статистики - то статистика была собрана оператором analyze:

YES - собрана глобальная статистика, то есть статистика собрана с помощью dbms_stats
NO - статистика собрана с помощью аггрегирования статистики низлежащих партиций, субпартиций, то есть с помощью analyze

Вырезка из документации:

GLOBAL_STATS
For partitioned tables, indicates whether statistics were
collected for the table as a whole (YES) or were estimated from statistics on
underlying partitions and subpartitions (NO)
Подробней можно прочитать об этом на металинке Note: 236935.1.
SQL> analyze table emp compute statistics;
Table analyzed.

SQL> select table_name, partitioned, global_stats
2 from user_tables where table_name='EMP';
TABLE_NAME PARTITIONED GLOBAL_STATS
------------ ----------- ------------
EMP NO NO

SQL> exec dbms_stats.gather_table_stats(user, 'EMP', cascade=>true);
PL/SQL procedure successfully completed.

SQL> select table_name, partitioned, global_stats
2 from user_tables where table_name='EMP';
TABLE_NAME PARTITIONED GLOBAL_STATS
------------ ----------- ------------
EMP NO YES

DBMS_STATS или ANALYZE? (1)

И dbms_stats и analyze используются для сбора статистики, которая используются стоимостным оптимизатором (Cost-Based Optimizer) для построения планов выполнения. То есть их правильное использование оказывает очень большое влияние на производительность всей системы.
Но почему Oracle "настоятельно" рекомендует использовать пакет dbms_stats для сбора статистики вместо analyze?
Из документации Oracle:

"Oracle Corporation strongly recommends that you use the DBMS_STATS package rather than ANALYZE to collect optimizer statistics."
Так что же может dbms_stats, чего не может analyze:
- с помощью dbms_stats можно собирать системную статистику (analyze нет такой возможности)
(о системной статистике напишу отдельно, но "Oracle Corporation highly recommends that you gather system statistics.")
- с помощью dbms_stats можно собирать статистику в удаленной базе данных (через дблинк)
SQL> exec dbms_stats.gather_table_stats@remotedb('REMOTEUSER','REMOTETABLE',cascade=>true);
и еще:
"That package lets you collect statistics in parallel, collect global statistics for partitioned objects, and fine tune your statistics collection in other ways."
Кажется, что если Oracle рекомендует использовать dbms_stats для сбора статистики и имеет ряд преимуществ перед analyze, то зачем нужен analyze?

Здесь Том Кайт объясняет, что dbms_stats собирает статику только для оптимизатора (CBO).
А такие статистические данные, как количество перенесенных строк (chained rows), средний объем свободного места в блоке, количество неиспользованных блоков можно собрать только с помощью analyze.
Из документации Oracle :
"... you must use the ANALYZE statement rather than DBMS_STATS for statistics collection not related to the cost-based optimizer, such as:
To use the VALIDATE or LIST CHAINED ROWS clauses
To collect information on freelist blocks"
Если dbms_stats и analyze собирают одну и ту же статистику по объектам, то они собирают одинаковые данные?
Или эти данные отличаются?
Если отличаются, то кому из них верить?


Updated: 20 февраля, 2009
Попытаюсь ответить на эти вопросы: Некоторые столбцы/компоненты статистики, собранные dbms_stats-ом отличаются от той, которые собраны командой analyze.
Например кол-во строк (num_rows), высота индекса (blevel), конечно же НЕ отличаются.
А такие столбцы как avg_row_len, avg_col_len - отличаются: dbms_stat добавляет 1 байт за хранение длины столбца, а analyze - не учитывает байт, в котором хранится длина столбца. Вот что пишет Джонатан Льюис об этом:
As a general rule, the figures for bytes in execution plans are derived from the avg_col_len columns of user_tab_columns. The deprecated analyze command excludes the length byte(s) for the column, but the call to dbms_stats.gather_table_stats includes the length byte(s). Since the choice of build table in a hash join is affected by the size of the data sets involved, a switch from analyze to dbms_stats could (in principle) change the order of a hash join, or even cause the optimizer to use a different join mechanism.
В-общем, он говорит, что, в принципе, из-за этой разницы в статистике, оптимизатор может изменить план выполнения в зависимости от метода сбора статистики, так как статистика немного отличается.
Ответ на последний вопрос "Если отличаются, то кому из них верить?": Думаю достаточно иметь ввиду, что некоторые столбцы/компоненты статистики собранные dbms_stats-ом отличаются от той, которая собрана командой analyze. И, к тому же статистика нужна только оптимизатору, а вам она не нужна. Поэтому долго не думайте и собирайте статистику dbms_stats-ом, а чтоб увеличить скорость сбора, распараллельте или же собирайте с небольшим estimate-ом.

Здесь я написала о том, как определить, каким образом была собрана статистика: пакетом dbms_stats или оператором analyze.

14 мая 2008 г.

Где именно находится оптимизатор
в архитектуре Oracle RDBMS?

Oracle DBA обычно не интересуются вопросом "Где именно находится оптимизатор в архитектуре Oracle RDBMS?" Некоторые из моих знакомые ДБА отнесли его к категории вопросов о смысле жизни.
Но самый популярный ответ был "в ядре Oracle".

В книге Oracle Database 10g Insider Solutions пишут тоже самое:

"The Cost Based Optimizer is at the heart of the Oracle kernel and plays a large part in the efficient execution of SQL statements in Oracle Database 10g."
Но где именно находится это ядро (kernel)? Это обычный процесс? Если да, то можно ли его увидеть в юниксе в списке процессов командой "ps"?

Отрывок из книги Тома Кайта "Oracle для профессионалов: Архитектура и основные особенности":
"При получении запроса SELECT * FROM EMP именно выделенный/разделяемый сервер Oracle будет разбирать его и помещать в разделяемый пул (или находить соответствующий запрос в разделяемом пуле). Именно этот процесс создает план выполнения запроса. Этот процесс реализует план запроса, находя необходимые данные в буферном кеше или считывая данные в буферный кеш с диска. Такие серверные процессы можно назвать "рабочими лашадками" СУБД. Часто именно они потребляют основную часть процессорного времени в системе, поскольку выполняют сортировку, суммирование, соединения - в общем, почти все."
То есть функции оптимизатора выполняются серверными процессами и их мы можем увидеть в списке процессов:
oracle@myhost$ ps -ef  grep ora  grep LOCAL  more
oracle 22790 1 0 09:13:33 ? 0:03 oracleTESTDB (LOCAL=NO)
oracle 4426 1 0 11:20:58 ? 0:02 oracleTESTDB (LOCAL=NO)
oracle 29167 1 0 11:11:32 ? 0:01 oracleTESTDB (LOCAL=NO)
oracle 12778 1 0 09:53:02 ? 0:03 oracleTESTDB (LOCAL=NO)
oracle 14349 1 0 12:26:34 ? 0:01 oracleTESTDB (LOCAL=NO)
oracle 21141 1 0 11:47:35 ? 0:01 oracleTESTDB (LOCAL=NO)
oracle 11220 1 0 09:49:18 ? 0:06 oracleTESTDB (LOCAL=NO)
oracle 16823 1 0 11:40:49 ? 0:01 oracleTESTDB (LOCAL=NO)
oracle 26760 1 0 11:57:20 ? 0:01 oracleTESTDB (LOCAL=NO)
oracle 20814 1 0 09:09:42 ? 0:01 oracleTESTDB (LOCAL=NO)
oracle 17374 1 0 12:32:28 ? 0:02 oracleTESTDB (LOCAL=NO)
oracle 8911 1 0 22:14:38 ? 0:00 oracleTESTDB (LOCAL=NO)
Если серверные процессы разбирают все запросы (выполняют все функции оптимизатора), значит ли это, что:

Код самого оптимизатора находится в каждом серверном процессе?
Или серверные процессы всего лишь вызывают эти функции из ярда Oracle?
Или ядро Oracle - это и есть серверные процессы?


Для меня этот вопрос все еще остается открытым, если у кого-то есть идеи, буду рада их услышать.

Добавлено 16 мая, 2008:
Это ответ Джонатана Льюиса на этот вопрос (публикую с его разрешения):
There is one main executable for the database in Oracle distribution, and that is called oracle (on Unix systems, but oracle.exe on Windows).
This is the program that becomes pmon, smon, dbwr, s000, and all the other background processes when the instance starts up. The bits of code run from that executable vary across the different roles played in the instance.

As such, the optimiser is just part of the code that is called only by a program which is taking on the role of a dedicated server (oracle_{SID}_nnn in unix variants) or a shared server (oracle_{SID}_Snnn).

When people talk about the 'Oracle kernel' it's actually a very informal and inaccurate expression - they are trying to give a vague impression of the most commonly used part of the code with an emphasis, perhaps, on the code segments that do a lot of synchronised work in the shared memory area. But there is no specific process that you can see that is "the" kernel.

Regards

Jonathan Lewis
http://jonathanlewis.wordpress.com

Author: Cost Based Oracle: Fundamentals
http://www.jlcomp.demon.co.uk/cbo_book/ind_book.html

The Co-operative Oracle Users' FAQ
http://www.jlcomp.demon.co.uk/faq/ind_faq.html
Перевод:

Есть один основной бинарник в дистрибутиве Oracle, который так и называется oracle (в юникс системах, и oracle.exe в Windows). Когда стартуется инстанс, эта программа превращается в фоновые процессы pmon, smon, dbwr, s000 и тд.
В зависимости от роли, которую он выполняет в составе инстанса, выполняются отдельные биты кода этого бинарника.

Оптимизатор - это всего лишь кусочек кода, который вызывается программой, выполняющей роль выделенного сервера (oracle_{SID}_nnn в юниксе) или разделяемого сервера (oracle_{SID}_Snnn).

Когда люди говорят о "ядре Oracle", они на самом деле используют неформальное и не совсем точное выражение - они стараются дать смутное ощущение о часто используемой части кода, возможно имея ввиду сегменты кода, которые выполняют кучу синхронизированных операций в разделяемой памяти.
Но на самом деле нет отдельного процесса, которого можно увидеть и который являлся бы "ядром".

Прикольно, значит код самого оптимизатора находится в каждом серверном процессе.
Спасибо всем, кто участвовал в процессе выяснения местонахождения оптимизатора в архитектуре Oracle. Отдельное спасибо Джонатану Льюису, кстати всем, кто занимается тюнингом, рекомендую почитать его книжку Основы Стоимостной Оптимизации (Cost-Based Oracle Fundamentals).

6 мая 2008 г.

Одноблочное и многоблочное чтения
(single-block & multi-block read)

Если при полном просмотре таблицы (full table scan) выполняется многоблочное чтение, то это положительно влияет на производительность. То есть, за одну операцию ввода/вывода читается несколько блоков, и вся таблица будет прочитана с файла в буферный кэш за минимальное количество операций ввода/вывода.

Кол-во блоков, которое будет прочитано из файла в буферный кэш за одну системную операцию ввода/вывода устанавливается параметром db_file_multiblock_read_count. В OLTP системах он обычно равен от 8 до 16, а в OLAP системах от 32 и выше. На большинстве платформ значение db_file_multiblock_read_count может быть равен максимум 128, об это написано в предыдущей теме.

С помощью представления v$filestat можно посмотреть статистику по количеству одноблочных и многоблочных чтений. Описание полей из документации (только те, что интересуют нас и относятся к чтению):

FILE# Number of the file
PHYRDS Number of physical reads done
PHYBLKRD Number of physical blocks read
SINGLEBLKRDS Number of single block reads
В списке полей нет поля о кол-ве многоблочных чтений, но его мы можем получить отняв SINGLEBLKRDS (так как, за одну операцию одноблочного чтения читается один блок) от суммарного количества физических чтений PHYRDS:
MULTIRDS = PHYRDS-SINGLEBLKRDS
А кол-во блоков прочитанных в режиме многоблочного чтения можно получить отняв SINGLEBLKRDS от суммарного кол-ва прочитанных блоков PHYBLKRD:
MULTIBLKRDS = PHYBLKRD-SINGLEBLKRDS

Еще один важный параметр, который можно получить - это среднее количество блоков прочитанных в многоблочном чтении. Если этот параметр близок к db_file_multiblock_read_count, то это хорошо. Это значит, что при многоблочном чтении из файла в буферный кэш, за минимальное количество операций ввода/вывода, читается максимальное количество блоков.
BLKSMULTIBLKRDS = MULTIBLKRDS/MULTIRDS

Скрипт:
select round(SINGLEBLKRDS/PHYBLKRD,2) SINGLEBLKRDS_PCT,
round((PHYBLKRD-SINGLEBLKRDS)/PHYBLKRD,2) MULTIBLKRDS_PCT,
round((PHYBLKRD-SINGLEBLKRDS)/(PHYRDS-SINGLEBLKRDS),2) BLKSMULTIBLKRDS,
k.tablespace_name
from v$filestat t, dba_data_files k
where t.file#=k.file_id
order by 1

Здесь приблизительный результат:
SINGLEBLKRDS_PCT MULTIBLKRDS_PCT BLKSMULTIBLKRDS TABLESPACE_NAME
0 1 7,74 CCCTBS
0 1 7,83 CCCTBS
0 1 7,88 CCCTBS
0 1 15,73 USERS
0,01 0,99 7,88 CCCTBS
0,01 0,99 14,65 DDDDTBS
0,02 0,98 11,82 DATA_MED
0,03 0,97 11,73 DATA_MED
0,05 0,95 13,54 AAA_BBB
0,07 0,93 1,03 EEEETBS
0,26 0,74 14,49 DATA_SML
0,3 0,7 10,32 GGGDATA
0,31 0,69 9,35 SYSTEM
0,49 0,51 11,32 DATA_BIG
0,5 0,5 11,41 DATA_BIG
0,52 0,48 10 DATA_BIG
0,52 0,48 11,47 DATA_BIG
0,53 0,47 10,21 DATA_BIG
0,68 0,32 14,52 DATA_BIG
0,91 0,09 14,68 DATA_BIG_IX
0,91 0,09 15,28 DATA_BIG_IX
0,92 0,08 1 UNDO
0,92 0,08 14,81 DATA_BIG_IX
0,92 0,08 15,08 DATA_BIG_IX
0,93 0,07 15,32 DATA_BIG_IX
0,98 0,02 1 AAA_BBB_IX
0,99 0,01 1,65 FFFFTBS
1 0 1 DATA_SML_IX
1 0 1 DATA_MED_IX
Как показывает отчет, в табличных пространствах, где хранятся индексы (_IX) почти нет (или очень низкий процент) многоблочного чтения, думаю это из-за того, что в них нет таблиц, соответсвенно не бывает полных просмотров таблиц (table full scan) и очень низок процент fast full index scan.

5 мая 2008 г.

Максимальное значение db_file_multiblock_read_count

Параметр db_file_multiblock_read_count определяет количество блоков, которые будут считаны за одну системную операцию чтения.

Он используется стоимостным оптимизатором (Cost-based Optimizer) для вычисления суммарного кол-ва операций чтения для полного просмотра таблицы (full table scan).

Нередко стараются увеличить этот параметр, для улучшение производительности базы данных. Но необходимо тщательно выбирать значение этого параметра, так как слишком большое значение увеличит количество полных просмотров (full scan), а слишком маленькое значение увеличит использование индексов, даже в тех случаях, где полный просмотр таблиц был бы более эффективен.

Самый лёгкий способ узнать максимальный размер db_file_multiblock_read_count - это присвоить этому параметру очень большое значение и он скорректируется до максимально возможного размера:

SQL> select name, value from v$parameter
2 where name = 'db_file_multiblock_read_count';

NAME VALUE
------------------------------ ----------
db_file_multiblock_read_count 8

SQL> alter session set db_file_multiblock_read_count=100000000;

System altered

SQL>
SQL> select name, value from v$parameter
2 where name = 'db_file_multiblock_read_count';

NAME VALUE
------------------------------ ----------
db_file_multiblock_read_count
128

Этот запрос был выполнен на Oracle 9.2.0.8, размер блока БД - 8K, Solaris 5.9.
Максимальное значение этого параметра зависит от внутреннего параметра (константы) SSTIOMAX, который зависит от версии Oracle и размера блока базы данных. Это вырезка из Металинка Note:131530.1:
What is SSTIOMAX?
-----------------

SSTIOMAX is an internal parameter/constant used by oracle, which limits the
maximum amount of data transfer in a single IO of a read or write operation.
This parameter is fixed and cannot be tuned/changed.


Relationship between SSTIOMAX and db_file_multiblock_read_count (MBRC)
----------------------------------------------------------------------

More often than not, DBAs try to increase the db_file_multiblock_read_count
parameter (which can be set in the init.ora), in an attempt to optimize the
IO performance of the read and write operations.

Normally, with a higher value of MBRC, the IO performance is expected to be
better. So, users tend to increase this parameter to a higher value, in case
they find it beneficial. But, there is a limitation on this.

The limitation is, the product of db_block_size and MBRC cannot exceed the
SSTIOMAX. For example:

db_block_size * db_file_multiblock_read_count <= SSTIOMAX (which is predefined for a particular version of oracle) If the value of the product exceeds this, then the value of db_file_multiblock_read_count set in the init.ora is ignored and it is set as follows: db_file_multiblock_read_count = SSTIOMAX/db_block_size (rounded)

В Oracle 9i SSTIOMAX = 1M, то есть если
размер блока БД 16K, то максимальный размер db_file_multiblock_read_count = 1M / 16K = 64;
размер блока БД 8K, то максимальный размер db_file_multiblock_read_count = 1M / 8K = 128;
размер блока БД 4K, то максимальный размер db_file_multiblock_read_count = 1M / 4K = 256;

Для сравнения, в Oracle 7.3 SSTIOMAX был равен 128K.

4 мая 2008 г.

Создание табличного пространства, размер блока которого отличается от размера блока БД

Для создания табличного пространства, размер блока которого отличается от размера блока БД, необходимо выделить память под соответствующий db_Xk_cache_size
(db_2k_cache_size,db_4k_cache_size,db_8k_cache_size, db_16k_cache_size, db_32k_cache_size).

SQL> show parameter db_block_size

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_block_size integer 8192
SQL> create tablespace tbs4k blocksize 4096
2 datafile '/u01/oradata/TESTDB/tbs4kTESTDB01.dbf'
3 size 10M autoextend on next 1M;
create tablespace tbs4k blocksize 4096
*
ERROR at line 1:
ORA-29339: tablespace block size 4096 does not match configured block sizes

SQL> show parameter cache_size

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_16k_cache_size big integer 0
db_2k_cache_size big integer 0
db_32k_cache_size big integer 0
db_4k_cache_size big integer 0
db_8k_cache_size big integer 0
db_cache_size big integer 536870912
db_keep_cache_size big integer 0
db_recycle_cache_size big integer 0

SQL> alter system set db_4k_cache_size=16M scope=spfile;

System altered.

SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL>
SQL>
SQL> startup
ORACLE instance started.

Total System Global Area 1159537920 bytes
Fixed Size 730368 bytes
Variable Size 603979776 bytes
Database Buffers 553648128 bytes
Redo Buffers 1179648 bytes
Database mounted.
Database opened.

SQL> show parameter cache

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_16k_cache_size big integer 0
db_2k_cache_size big integer 0
db_32k_cache_size big integer 0
db_4k_cache_size big integer 16777216
db_8k_cache_size big integer 0
db_cache_advice string ON
db_cache_size big integer 536870912
db_keep_cache_size big integer 0
db_recycle_cache_size big integer 0
object_cache_max_size_percent integer 10
object_cache_optimal_size integer 102400

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
session_cached_cursors integer 100
SQL> create tablespace tbs4k blocksize 4096
2 datafile '/u01/oradata/TESTDB/tbs4kTESTDB01.dbf'
3 size 10M autoextend on next 1M;

Tablespace created.

28 апреля 2008 г.

Загрузка данных из Агента в OMS


Oracle Management Agent 10g был установлен на узле с помощью скрипта agentDownload script. Несмотря на то, что установка и настройка агента прошла успешно, новый узел не появился в списке хостов в веб-интерфейсе Enterprise Manager Grid Control.

Статус агента:
gc@agenthost $ emctl status agent
Oracle Enterprise Manager 10g Release 4 Grid Control 10.2.0.4.0.
Copyright (c) 1996, 2007 Oracle Corporation. All rights reserved.
---------------------------------------------------------------
Agent Version : 10.2.0.4.0
OMS Version : 10.2.0.1.0
Protocol Version : 10.2.0.0.0
Agent Home : /u01/app/gc/product/agent10g
Agent binaries : /u01/app/gc/product/agent10g
Agent Process ID : 26774
Parent Process ID : 26765
Agent URL : https://agenthost.domain.com:3872/emd/main/
Repository URL : https://omshost:1159/em/upload
Started at : 2008-04-24 12:20:17
Started by user : gc
Last Reload : 2008-04-24 12:20:17
Last successful upload : (none)
Last attempted upload : (none)

Total Megabytes of XML files uploaded so far : 0.00
Number of XML files pending upload : 6
Size of XML files pending upload(MB) : 5.88
Available disk space on upload filesystem : 18.10%
Last successful heartbeat to OMS : 2008-04-24 12:20:26
---------------------------------------------------------------
Agent is Running and Ready
В статусе агента видно, что Агент не может загрузить данные в OMS, а если вручную попробывать загрузить данные, то выводит такое сообщение:
gc@agenthost $ emctl upload
Oracle Enterprise Manager 10g Release 4 Grid Control 10.2.0.4.0.
Copyright (c) 1996, 2007 Oracle Corporation. All rights reserved.
---------------------------------------------------------------
EMD upload error: uploadXMLFiles skipped :: OMS version not checked yet..
В логах агента, нашла такие ошибки в ORACLE_HOME/sysman/log/emagent.trc:
2008-04-23 19:54:26,063 Thread-20 ERROR http: snmehl_connect: Failed to get address for omshost: Non-Authoritive Host not found (error = 2)
2008-04-23 19:54:26,064 Thread-20 ERROR pingManager: nmepm_pingReposURL: Cannot connect to https://omshost:1159/em/upload: retStatus=-32
2008-04-23 19:54:26,067 Thread-20 ERROR http: snmehl_connect: Failed to get address for omshost: Non-Authoritive Host not found (error = 2)
2008-04-23 19:54:26,067 Thread-20 ERROR pingManager: nmepm_pingReposURL: Cannot connect to https://omshost:1159/em/upload: retStatus=-32
2008-04-23 19:54:26,359 Thread-5 ERROR http: snmehl_connect: Failed to get address for omshost: Non-Authoritive Host not found (error = 2)
2008-04-23 19:54:26,359 Thread-5 ERROR command: nmejcn: failed http connection to https://omshost:1159/em/upload: retStatus=-32
2008-04-23 19:54:28,368 Thread-5 ERROR http: snmehl_connect: Failed to get address for omshost: Non-Authoritive Host not found (error = 2)

Причина ошибки оказалась простой, из узла agenthost не определялся omshost:
gc@agenthost $ ping -a omshost
ping: unknown host omshost

После, прописания omshost в /etc/hosts (555.555.555.555 omshost), загрузка данных в OMS прошла успешно

gc@agenthost $ ping -a omshost
omshost (555.555.555.555) is alive

gc@agenthost $ emctl upload
Oracle Enterprise Manager 10g Release 4 Grid Control 10.2.0.4.0.
Copyright (c) 1996, 2007 Oracle Corporation. All rights reserved.
---------------------------------------------------------------
EMD upload error: Upload timed out before completion.
Number of files to upload before the upload: 13, total size (MB): 5.25.
Remaining number of files to upload: 13, total size (MB): 5.25.

gc@agenthost $ emctl upload
Oracle Enterprise Manager 10g Release 4 Grid Control 10.2.0.4.0.
Copyright (c) 1996, 2007 Oracle Corporation. All rights reserved.
---------------------------------------------------------------
EMD upload error: Upload timed out before completion.
Number of files to upload before the upload: 6, total size (MB): 1.38.
Remaining number of files to upload: 6, total size (MB): 1.38.

gc@agenthost $ emctl upload
Oracle Enterprise Manager 10g Release 4 Grid Control 10.2.0.4.0.
Copyright (c) 1996, 2007 Oracle Corporation. All rights reserved.
---------------------------------------------------------------
EMD upload completed successfully
Теперь в статусе агента видно, что загрузка прошла успешно:
gc@agenthost $ emctl status agent
Oracle Enterprise Manager 10g Release 4 Grid Control 10.2.0.4.0.
Copyright (c) 1996, 2007 Oracle Corporation. All rights reserved.
---------------------------------------------------------------
Agent Version : 10.2.0.4.0
OMS Version : 10.2.0.1.0
Protocol Version : 10.2.0.0.0
Agent Home : /u01/app/gc/product/agent10g
Agent binaries : /u01/app/gc/product/agent10g
Agent Process ID : 26774
Parent Process ID : 26765
Agent URL : https://agenthost.domain.com:3872/emd/main/
Repository URL : https://omshost:1159/em/upload
Started at : 2008-04-24 12:20:17
Started by user : gc
Last Reload : 2008-04-24 12:20:17
Last successful upload : 2008-04-24 12:39:02
Total Megabytes of XML files uploaded so far : 7.44
Number of XML files pending upload : 0
Size of XML files pending upload(MB) : 0.00
Available disk space on upload filesystem : 18.13%
Last successful heartbeat to OMS : 2008-04-24 12:39:27
---------------------------------------------------------------
Agent is Running and Ready

Problem with Management Agent 10g Upload


I had a problem adding another target to Oracle Grid Control 10g. The Management Agent was installed by agentDownload script, the installation finished successfully, but I the target didn’t show up in the Host list of Grid Control web page.

I checked the status of agent on target host:
gc@agenthost $ emctl status agent
Oracle Enterprise Manager 10g Release 4 Grid Control 10.2.0.4.0.
Copyright (c) 1996, 2007 Oracle Corporation. All rights reserved.
---------------------------------------------------------------
Agent Version : 10.2.0.4.0
OMS Version : 10.2.0.1.0
Protocol Version : 10.2.0.0.0
Agent Home : /u01/app/gc/product/agent10g
Agent binaries : /u01/app/gc/product/agent10g
Agent Process ID : 26774
Parent Process ID : 26765
Agent URL : https://agenthost.domain.com:3872/emd/main/
Repository URL : https://omshost:1159/em/upload
Started at : 2008-04-24 12:20:17
Started by user : gc
Last Reload : 2008-04-24 12:20:17
Last successful upload : (none)
Last attempted upload : (none)

Total Megabytes of XML files uploaded so far : 0.00
Number of XML files pending upload : 6
Size of XML files pending upload(MB) : 5.88
Available disk space on upload filesystem : 18.10%
Last successful heartbeat to OMS : 2008-04-24 12:20:26
---------------------------------------------------------------
Agent is Running and Ready
The status report showed that Agent could NOT upload to OMS, so I tried to manually upload to OMS:
gc@agenthost $ emctl upload
Oracle Enterprise Manager 10g Release 4 Grid Control 10.2.0.4.0.
Copyright (c) 1996, 2007 Oracle Corporation. All rights reserved.
---------------------------------------------------------------
EMD upload error: uploadXMLFiles skipped :: OMS version not checked yet..
I checked the agent logs and came across this message in ORACLE_HOME/sysman/log/emagent.trc:
2008-04-23 19:54:26,063 Thread-20 ERROR http: snmehl_connect: Failed to get address for omshost: Non-Authoritive Host not found (error = 2)
2008-04-23 19:54:26,064 Thread-20 ERROR pingManager: nmepm_pingReposURL: Cannot connect to https://omshost:1159/em/upload: retStatus=-32
2008-04-23 19:54:26,067 Thread-20 ERROR http: snmehl_connect: Failed to get address for omshost: Non-Authoritive Host not found (error = 2)
2008-04-23 19:54:26,067 Thread-20 ERROR pingManager: nmepm_pingReposURL: Cannot connect to https://omshost:1159/em/upload: retStatus=-32
2008-04-23 19:54:26,359 Thread-5 ERROR http: snmehl_connect: Failed to get address for omshost: Non-Authoritive Host not found (error = 2)
2008-04-23 19:54:26,359 Thread-5 ERROR command: nmejcn: failed http connection to https://omshost:1159/em/upload: retStatus=-32
2008-04-23 19:54:28,368 Thread-5 ERROR http: snmehl_connect: Failed to get address for omshost: Non-Authoritive Host not found (error = 2)
The omshost could not be resolved from agenthost:
gc@agenthost $ ping -a omshost
ping: unknown host omshost
After configuring /etc/hosts (adding 555.555.555.555 omshost), and re-trying the upload, upload was successful:
gc@agenthost $ ping -a omshost
omshost (555.555.555.555) is alive

gc@agenthost $ emctl upload
Oracle Enterprise Manager 10g Release 4 Grid Control 10.2.0.4.0.
Copyright (c) 1996, 2007 Oracle Corporation. All rights reserved.
---------------------------------------------------------------
EMD upload error: Upload timed out before completion.
Number of files to upload before the upload: 13, total size (MB): 5.25.
Remaining number of files to upload: 13, total size (MB): 5.25.

gc@agenthost $ emctl upload
Oracle Enterprise Manager 10g Release 4 Grid Control 10.2.0.4.0.
Copyright (c) 1996, 2007 Oracle Corporation. All rights reserved.
---------------------------------------------------------------
EMD upload error: Upload timed out before completion.
Number of files to upload before the upload: 6, total size (MB): 1.38.
Remaining number of files to upload: 6, total size (MB): 1.38.

gc@agenthost $ emctl upload
Oracle Enterprise Manager 10g Release 4 Grid Control 10.2.0.4.0.
Copyright (c) 1996, 2007 Oracle Corporation. All rights reserved.
---------------------------------------------------------------
EMD upload completed successfully
The agent status shows that upload is successful now:
gc@agenthost $ emctl status agent
Oracle Enterprise Manager 10g Release 4 Grid Control 10.2.0.4.0.
Copyright (c) 1996, 2007 Oracle Corporation. All rights reserved.
---------------------------------------------------------------
Agent Version : 10.2.0.4.0
OMS Version : 10.2.0.1.0
Protocol Version : 10.2.0.0.0
Agent Home : /u01/app/gc/product/agent10g
Agent binaries : /u01/app/gc/product/agent10g
Agent Process ID : 26774
Parent Process ID : 26765
Agent URL : https://agenthost.domain.com:3872/emd/main/
Repository URL : https://omshost:1159/em/upload
Started at : 2008-04-24 12:20:17
Started by user : gc
Last Reload : 2008-04-24 12:20:17
Last successful upload : 2008-04-24 12:39:02Total Megabytes of XML files uploaded so far : 7.44
Number of XML files pending upload : 0
Size of XML files pending upload(MB) : 0.00
Available disk space on upload filesystem : 18.13%
Last successful heartbeat to OMS : 2008-04-24 12:39:27
---------------------------------------------------------------
Agent is Running and Ready

Installation of Oracle Application Server 10g in Windows Vista

Installation of Oracle Application Server 10g in Windows Vista failed with the following error:

Starting Oracle Universal Installer...

Checking installer requirements...

Checking operating system version: must be 5.0, 5.1 or 5.2 . Actual 6.0
Failed <<<<

Exiting Oracle Universal Installer, log for this session can be found at C:\User
s\Raku\AppData\Local\Temp\OraInstall2008-03-22_02-00-54AM\installActions2008-03-
22_02-00-54AM.log

Please press Enter to exit...


It's a pity that OAS 10g is not supported in Windows Vista.
However, you can add 6.0 (for Vista) in install/oraparam file:
Windows=5.0,5.1,5.2,6.0
and restart the installation.
There is, of course, no guarantee that it will work error-free.
I installed the same way, I will look if it works correctly.

Error in upgrading 9.2.0.1 database to 10g

Today, I was trying to upgrade my 9.2.0.1 database to 10g. I installed the 10g server, and run the Pre-Upgrade Information Tool (utlu102i.sql) to analyze and prepare my 9.2.0.1 database for upgrade.

SQL> @?/rdbms/admin/utlu102i
DECLARE
*
ERROR at line 1:
ORA-20000: Version 9.2.0.1.0 not supported for upgrade to release 10.2.0
ORA-06512: at line 1523


It turned out that I should have upgraded it to at least 9.2.0.4 before installing 10g server software. Should have....
Here is the link to the upgrade documentation.

Error Creating Snapshot in AWR

When trying to run an ADDM Report in Enterprise Manager Grid Control 10g, I got the following error:

“Insufficient Data in Interval. For displaying data on this page, two historical snapshots are needed. Make sure that two snapshots are present in the target database instance. In addition modify the interval so that it is contained within two available snapshots”

I looked at Automatic Workload Repository, it wasn’t configured automatically.
Then I tried to manually create snapshot in Automatic Workload Repository:

“Are you sure you want to create a manual snapshot?
Snapshots are created automatically by the database. Creating one manually may affect the results of the automatic snapshot immediately following.”


I answered Yes, but snapshot couldn’t be created:

ORA-13516: SWRF Operation failed: SWRF Schema not initialized
ORA-06512: at "SYS.DBMS_WORKLOAD_REPOSITORY", line 8
ORA-06512: at "SYS.DBMS_WORKLOAD_REPOSITORY", line 31
ORA-06512: at line 1


Then I tried the same thing to manually create snapshot using the package:

SQL> exec dbms_workload_repository.create_snapshot();

begin dbms_workload_repository.create_snapshot(); end;

ORA-13516: SWRF Operation failed: SWRF Schema not initialized
ORA-06512: at "SYS.DBMS_WORKLOAD_REPOSITORY", line 8
ORA-06512: at "SYS.DBMS_WORKLOAD_REPOSITORY", line 31
ORA-06512: at line 1
The metalink Note:287818.1:
Error: ORA-13516 (ORA-13516)
Text: SWRF Operation failed: %s
---------------------------------------------------------------------------
Cause: The operation failed because SWRF is not available. The possible
causes are: SWRF schema not yet created; SWRF not enabled; SWRF
schema not initialized; or database not open or is running in
READONLY or STANDBY mode.
Action: check the above conditions and retry the operation.


Note:459887.1:

Cause
These errors would be caused because of wrong or invalid objects with respect to AWR

Solution
In order to resolve this issue it is recommended to drop and recreate the AWR objects , which can be done using CATNOAWR.SQL and CATAWR.SQL.

But from 10.2 onwards, the script name has changed. The catalog script for AWR Tables, used to create the Workload Repository Schema is CATAWRTB.SQL .

Dropping and recreating the AWR objects and bouncing the database:
SQL> @$ORACLE_HOME/rdbms/admin/catnoawr.sql
SQL> @$ORACLE_HOME/rdbms/admin/catawr.sql

Ошибки в Oracle Management Agent 10g: 'No username specified for WBEM fetchlet'


После добавления нового узла в Oracle Grid Control 10g, в логах агента я заметила такие ошибки в emagent.trc:
2008-04-25 15:32:17,560 Thread-14019 WARN  collector:  Error exit. Error message: No username specified for WBEM fetchlet.
2008-04-25 15:37:34,865 Thread-14064 ERROR fetchlets.wbem: No username specified for WBEM fetchlet.
2008-04-25 15:37:34,865 Thread-14064 ERROR engine: [host,eccisdb,ProjectResourceUsage] : nmeegd_GetMetricData failed : No username specified for WBEM fetchlet.
2008-04-25 15:37:34,865 Thread-14064 WARN collector: Error exit. Error message: No username specified for WBEM fetchlet.
Такая же ошибка была в веб-интерфейсе Oracle Grid Control:
Host: agenthost55  >  Metric Collection Errors  >
Error Details
Target: agenthost55
Type: Host
Metric: Aggregate Resource Usage Statistics (By Project)
Collection Timestamp: 09-Apr-2008 12:24:18
Error Type: Collection Failure
Message: No username specified for WBEM fetchlet.

Ниже описание причины ошибки и ее решение из Металинка Note:271632.1:
Cause:
Beginning with EM 10g, certain OS vendors have enhanced their systems to include a new metric - Aggregate resource usage statistics, gathered by User and by Project. These metrics are collected by using the "CIM Object Manager" on the Solaris 9 host. In order to get this information, the CIM Object Manager needs to be supplied with Username and Password of a user on that host so that authentication can successfully happen

Solution:
From within the EM 10g Grid Control UI,
1. Click on Targets -> Host tab
2. Select your Solaris 9 host and go to the Hosts Home page (repeat these steps for each Solaris 9 host)
3. Click on the Monitoring Configuration link at the bottom right side of the page
4. Enter your OS username/password. It's best to enter a user that has DBA privileges.
5. Click save.
This will update the central Management Agent's targets.xml file on the Solaris 9 host and force a reload of the configuration files. The error above should stop.

25 апреля 2008 г.

'No username specified for WBEM fetchlet' errors in Agent 10g


After adding a new target to Oracle Grid Control 10g, I noticed these errors in emagent.trc:
2008-04-25 15:32:17,560 Thread-14019 WARN  collector:  Error exit. Error message: No username specified for WBEM fetchlet.
2008-04-25 15:37:34,865 Thread-14064 ERROR fetchlets.wbem: No username specified for WBEM fetchlet.
2008-04-25 15:37:34,865 Thread-14064 ERROR engine: [host,eccisdb,ProjectResourceUsage] : nmeegd_GetMetricData failed : No username specified for WBEM fetchlet.
2008-04-25 15:37:34,865 Thread-14064 WARN collector: Error exit. Error message: No username specified for WBEM fetchlet.
The same error was in the Grid Control Console:
Host: agenthost55  >  Metric Collection Errors  >
Error Details
Target: agenthost55
Type: Host
Metric: Aggregate Resource Usage Statistics (By Project)
Collection Timestamp: 09-Apr-2008 12:24:18
Error Type: Collection Failure
Message: No username specified for WBEM fetchlet.

Here is the solution from Metalink Note:271632.1:
Cause:
Beginning with EM 10g, certain OS vendors have enhanced their systems to include a new metric - Aggregate resource usage statistics, gathered by User and by Project. These metrics are collected by using the "CIM Object Manager" on the Solaris 9 host. In order to get this information, the CIM Object Manager needs to be supplied with Username and Password of a user on that host so that authentication can successfully happen

Solution:
From within the EM 10g Grid Control UI,
1. Click on Targets -> Host tab
2. Select your Solaris 9 host and go to the Hosts Home page (repeat these steps for each Solaris 9 host)
3. Click on the Monitoring Configuration link at the bottom right side of the page
4. Enter your OS username/password. It's best to enter a user that has DBA privileges.
5. Click save.
This will update the central Management Agent's targets.xml file on the Solaris 9 host and force a reload of the configuration files. The error above should stop.

23 апреля 2008 г.

Automatic Optimizer Statistics Collection

В Oracle 10g сбор статистики для оптимизатора выполняется автоматически запланированным джобом (scheduled job) GATHER_STATS_JOB. Данная статистика об объектах используется оптимизатором (Cost-Based Optimizer) для построения эффективных планов выполнения для запросов, тем самым значительно уменьшая время выполнения запросов.

По умолчанию, сбор статистики выполняется по ночам с 22:00 до 06:00 утра и весь день в выходные дни.
Собирается статистика только по тем объектам, у которых отсутствует статистика, или устарела.

Каким образом Oracle узнает, что статистика устарела?
Данные о кол-ве DML операциий (INSERT, DELETE, UPDATE) над объектом с момента последнего сбора статистики фиксируются в SGA, которые периодически записываются в таблицу DBA_TAB_MODIFICATIONS. База данных использует эти данные для того, чтобы определить устарела ли статистика объекта.

Из документации Oracle:

Optimizer statistics are automatically gathered with the job GATHER_STATS_JOB. This job gathers statistics on all objects in the database which have:
Missing statistics
Stale statistics

This job is created automatically at database creation time and is managed by the Scheduler. This Scheduler runs this job when the maintenance window is opened. By default, the maintenance window opens every night from 10 P.M. to 6 A.M. and all day on weekends. The GATHER_STATS_JOB continues until it finishes, even if it exceeds the allocated time for the maintenance window. The default behavior of the maintenance window can be changed.
Запланированный джоб GATHER_STATS_JOB:

SQL> select owner, job_name, program_name, enabled from dba_scheduler_jobs
where job_name='GATHER_STATS_JOB';


OWNER JOB_NAME PROGRAM_NAME ENABLED
---------- ------------------ -------------------- -----
SYS GATHER_STATS_JOB GATHER_STATS_PROG TRUE
Выключить Автоматический Сбор Статистики для Оптимизатора, можно отключив джоб:
SQL> exec dbms_scheduler.disable('GATHER_STATS_JOB');
PL/SQL procedure successfully completed.


SQL> select owner, job_name, program_name, enabled from dba_scheduler_jobs
where job_name='GATHER_STATS_JOB';


OWNER JOB_NAME PROGRAM_NAME ENABLED
---------- ------------------ -------------------- -----
SYS GATHER_STATS_JOB GATHER_STATS_PROG FALSE

Если в базе данных имеются таблицы, которые часто обновляются, то частый сбор статистики может негативно повлиять на производительность базы данных. Для того, чтоб исключить объекты из автоматического или любого другого сбора статистики можно "закрепить" ее статистику:

begin
dbms_stats.gather_table_stats('SCOTT','EMP');
dbms_stats.lock_table_stats('SCOTT','EMP');
end;
/
Теперь, по этой таблице невозможно будет собрать статистику ни автоматически, ни вручную:

SQL>exec dbms_stats.gather_table_stats('SCOTT','EMP');

begin dbms_stats.gather_table_stats('SCOTT','EMP'); end;
ORA-20005: object statistics are locked (stattype = ALL)
ORA-06512: at "SYS.DBMS_STATS", line 13182
ORA-06512: at "SYS.DBMS_STATS", line 13202
ORA-06512: at line 2
Снять блокировку статистики:

dbms_stats.unlock_table_stats('SCOTT','EMP');

22 апреля 2008 г.

Statspack (9i) и Automatic Workload Repository (10g)

Для сбора информации о производительности базы данных в Oracle 9i использовался statspack, в Oracle 10g statspack эволюционировал в Automatic Workload Repository (Автоматически управляемый репозитарий рабочей нагрузки).

В Oracle 9i statspack устанавливался дополнительно скриптом spcreate.sql, который создавал пользователя perfstat, под которым и создавался пакет statspack и другие необходимые объекты.

В Oracle 10g Automatic Workload Repository устанавливается автоматически прямо в схеме SYS, и по умолчанию собирает статистику о производительности каждый час и хранит ее 7 дней.

В Oracle 9i, снимок (snapshot) делался с помощью пакета statspack:
exec statspack.snap;

В Oracle 10g используется новый пакет dbms_workload_repository:
exec dbms_workload_repository.create_snapshot;


Список снимков (snapshots) в Oracle 9i:
select * from stats$snapshot;

Список снимков (snapshots) в Oracle 10g:
select * from dba_hist_snapshot;


Для создания отчета на основе двух снимков, в Oracle 9i использовался скрипт:
SQL> @?/rdbms/admin/spreport.sql

В Oracle 10g используется скрипт, который может сгенерировать отчет и текстовом, и в html формате:
SQL> @?/rdbms/admin/awrrpt.sql

В Oracle 10g все эти операции, то есть сделать снимок, просмотреть список снимков, и создать отчет в формате html, можно проделать в Enterprise Manager Database Control или Grid Control.

21 апреля 2008 г.

Prstat и процессы oracle

Отчет ниже показывает, что процессы пользователя oracle занимают 94% всей оперативной памяти, то есть почти 188GB, в то время как оперативная память на сервере в сумме равна всего 32GB (16GB физической памяти + 4GB виртуальной памяти).

Физическая память:
oracle@myhost $ prtdiag grep Memory
Memory size: 16384 Megabytes


Виртуальная память:
oracle@myhost $ vmstat 3 3
kthr memory page disk faults cpu r b w swap free re mf pi po fr de sr s0 sd sd sd in sy cs us sy id
0 0 0 16319144 8342704 15 104 7 8 8 15688 0 0 0 0 0 473 2256 2086 2 1 97
0 0 0 4425048 280488 33 409 0 3 3 11448 0 0 0 0 0 1076 408191 5033 24 15 60
0 0 0 4425048 280440 25 255 0 13 13 8352 0 0 0 0 0 867 429324 6717 25 15 59

oracle@myhost $ prstat -a -s size
PID USERNAME SIZE RSS STATE PRI NICE TIME CPU PROCESS/NLWP
29689 user1 2540M 2313M cpu1 42 0 10:24:56 6.3% java/103
24113 user2 1689M 1153M sleep 14 0 0:48:16 0.0% java/114
21867 user3 1270M 829M sleep 15 0 1:19:42 0.1% java/81
20270 user1 1267M 931M sleep 6 0 0:09:12 0.0% java/83
13020 user3 1259M 821M sleep 1 0 1:15:39 0.0% java/81
22021 oracle 1117M 1069M sleep 59 0 0:00:52 0.0% oracle/258
22023 oracle 1115M 1064M sleep 59 0 0:01:17 0.0% oracle/11
22086 oracle 1112M 1061M sleep 1 0 0:00:00 0.0% oracle/1
22088 oracle 1112M 1061M sleep 59 0 0:00:00 0.0% oracle/1
22025 oracle 1111M 1064M sleep 59 0 0:00:12 0.0% oracle/11
2768 oracle 1110M 1072M sleep 59 0 0:00:01 0.0% oracle/11
19012 oracle 1110M 1072M sleep 59 0 0:00:00 0.0% oracle/1
19030 oracle 1110M 1069M sleep 59 0 0:00:00 0.0% oracle/1
11409 oracle 1110M 1069M sleep 59 0 0:00:00 0.0% oracle/1
22027 oracle 1110M 1070M sleep 1 0 0:00:31 0.0% oracle/1
4125 oracle 1109M 1071M sleep 59 0 0:00:00 0.0% oracle/1
22019 oracle 1109M 1064M sleep 59 0 0:03:36 0.0% oracle/1
4005 oracle 1109M 1069M sleep 59 0 0:00:00 0.0% oracle/1
27534 oracle 1109M 1068M sleep 59 0 0:00:00 0.0% oracle/1
27536 oracle 1109M 1068M sleep 59 0 0:00:00 0.0% oracle/1
22048 oracle 1109M 1062M sleep 59 0 0:00:00 0.0% oracle/1
22037 oracle 1109M 1062M sleep 59 0 0:00:00 0.0% oracle/1
22035 oracle 1109M 1062M sleep 59 0 0:00:00 0.0% oracle/1
22042 oracle 1109M 1062M sleep 59 0 0:00:00 0.0% oracle/1
22050 oracle 1109M 1062M sleep 59 0 0:00:00 0.0% oracle/1
22054 oracle 1109M 1062M sleep 21 0 0:00:00 0.0% oracle/1
22056 oracle 1109M 1062M sleep 59 0 0:00:00 0.0% oracle/1
22060 oracle 1109M 1062M sleep 59 0 0:00:00 0.0% oracle/1
22064 oracle 1109M 1062M sleep 59 0 0:00:00 0.0% oracle/1
22058 oracle 1109M 1062M sleep 59 0 0:00:00 0.0% oracle/1
22070 oracle 1109M 1062M sleep 53 0 0:00:00 0.0% oracle/1
22066 oracle 1109M 1062M sleep 59 0 0:00:00 0.0% oracle/1
22068 oracle 1109M 1062M sleep 59 0 0:00:00 0.0% oracle/1
NPROC USERNAME SIZE RSS MEMORY TIME CPU
184 oracle 196G 188G 94% 0:44:30 0.1%
1 vmpapp2 2540M 2313M 1.1% 10:24:56 6.3%
1 vmpapp3 1689M 1153M 0.6% 0:48:16 0.0%
4 vmpods5 1272M 935M 0.5% 0:09:12 0.0%
1 vmpods2 1270M 829M 0.4% 1:19:42 0.1%
1 vmpods4 1259M 821M 0.4% 1:15:39 0.0%
6 vmpapp1 1012M 537M 0.3% 0:06:59 0.0%
1 vmpapp4 1005M 516M 0.3% 0:06:23 0.0%
2 vmpapp5 978M 492M 0.2% 0:08:46 0.6%
1 vmpjms4 975M 479M 0.2% 0:04:49 0.0%
Total: 277 processes, 2763 lwps, load averages: 2.62, 2.61, 2.52

Многие утилиты Solaris не совсем правильно считают статистику по процессам, которые работают с разделяемой памятью (shared memory), в данном случае с разделяемой памятью Oracle.

Получается, что утилита prstat суммирует разделяемую память на все процессы oracle.

Кол-во процессов oracle:
oracle@myhost $ ps -ef grep ora wc -l
185


Общий размер SGA экземпляра oracle:
oracle@myhost $ sqlplus '/as sysdba'
SQL> show sga
Total System Global Area 1075651720 bytes


Если умножим кол-во процессов на общий размер SGA, то мы приблизимся к 188GB, которое нам показал prstat. Конечно, для более точного подсчёта, нужно добавить еще размер PGA под каждый процесс.

185 * 1 075 651 720 bytes = 198 995 568 200 bytes = 185GB

19 апреля 2008 г.

Табличные пространства в Oracle 10g

В Oracle 10g появились следующие новые возможности по работе с табличными пространствами:

1) Возможность переименовать табличные пространства
2) Установка постоянного табличного пространства по умолчанию (default permanent tablespace)
3) Поддержка больших файлов (bigfile tablespaces)
4) Возможность переносить табличные пространства на другие платформы (cross platform transportable tablespaces)
5) Группы временных табличных пространств (temporary tablespace groups)
6) Передача файлов (DBMS_FILE_TRANSFER)

1) Возможность переименовать табличные пространства

SQL> select tablespace_name, count(*) from dba_segments where tablespace_name like 'USERS%' group by tablespace_name;

TABLESPACE_NAME COUNT(*)
------------------------------ ----------
USERS 43

SQL> alter tablespace users rename to users_new;

Tablespace altered

SQL> select tablespace_name, count(*) from dba_segments where tablespace_name like 'USERS%' group by tablespace_name;

TABLESPACE_NAME COUNT(*)
------------------------------ ----------
USERS_NEW 43


Правда, если вы не используете OMF, то файл данных не переименуется автоматически.

SQL> select tablespace_name, file_name from dba_data_files where tablespace_name like 'USERS%';

TABLESPACE_NAME FILE_NAME
------------------------------ --------------------------------------------------------------------------------
USERS D:\ORACLE\PRODUCT\ORADATA\TESTDB\USERS01.DBF

SQL> alter tablespace users rename to users_new;

Tablespace altered

SQL> select tablespace_name, file_name from dba_data_files where tablespace_name like 'USERS%';

TABLESPACE_NAME FILE_NAME
------------------------------ --------------------------------------------------------------------------------
USERS_NEW D:\ORACLE\PRODUCT\ORADATA\TESTDB\USERS01.DBF


Табличные пространства SYSTEM и SYSAUX нельзя переименовать таким образом.

SQL> alter tablespace sysaux rename to sysaux2;

alter tablespace sysaux rename to sysaux2

ORA-13502: Cannot rename SYSAUX tablespace

SQL> alter tablespace system rename to system2;

alter tablespace system rename to system2

ORA-00712: cannot rename system tablespace

При переименовании табличного пространства UNDO, ссылка на него в файле параметров тоже автоматически меняется после перегруза, если используется spfile.
Если экземпляр был старторван с pfile, но в alert.log выводится напоминание вручную обновить pfile.

SQL> show parameter pfile

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
spfile string D:\ORACLE\PRODUCT\10.2.0\DATAB
ASE\SPFILETESTDB.ORA
SQL>
SQL> show parameter undo

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
undo_management string AUTO
undo_retention integer 900
undo_tablespace string UNDOTBS1
SQL>
SQL> alter tablespace undotbs1 rename to undotbs_new;

Tablespace altered.

SQL>
SQL>
SQL> show parameter undo

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
undo_management string AUTO
undo_retention integer 900
undo_tablespace string UNDOTBS1
SQL>
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORACLE instance started.

Total System Global Area 612368384 bytes
Fixed Size 1292036 bytes
Variable Size 348129532 bytes
Database Buffers 255852544 bytes
Redo Buffers 7094272 bytes
Database mounted.
Database opened.
SQL>
SQL> show parameter undo

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
undo_management string AUTO
undo_retention integer 900
undo_tablespace string UNDOTBS_NEW
SQL>


2) Установка постоянного табличного пространства по умолчанию (default permanent tablespace)

SQL> alter database default tablespace example;

Database altered

SQL> select property_name, property_value from database_properties where property_name like 'DEFAULT_PERMANENT_TABLESPACE%';

PROPERTY_NAME PROPERTY_VALUE
------------------------------ --------------------------------------------------------------------------------
DEFAULT_PERMANENT_TABLESPACE EXAMPLE

SQL> create user rahat identified by agivetova;

User created

SQL> select username, default_tablespace from dba_users where username ='RAHAT';

USERNAME DEFAULT_TABLESPACE
------------------------------ ------------------------------
RAHAT EXAMPLE




3) Поддержка табличных пространств состоящих из большого файла (bigfile tablespaces)

Одним из основных новинок в работе с табличными пространствами в Oracle 10g являются поддержка больших файлов.
Табличные пространства bigfile состоят только из 1 файла данных, который может расти до 128TB в зависимости от размера блока.
Например, если размер блока табличного пространства 8К, то табличное пространство может расти до 32ТВ.
Внизу таблица с максимальными размерами табличных пространств в зависимости от размера блока:

Размер блока табличного пространства Максимальный размер табличного пространства
2K 8TB
4K 16TB
8K 32TB
16K 64TB
32K 128TB

В представление dba_tablespaces добавлено поле bigfile, которое указывает, является ли табличное пространство - bigfile tablespace.

SQL> select tablespace_name, bigfile from dba_tablespaces;

TABLESPACE_NAME BIGFILE
------------------------------ -------
SYSTEM NO
UNDOTBS_NEW NO
SYSAUX NO
TEMP NO
USERS NO
EXAMPLE NO

6 rows selected

SQL> create bigfile tablespace big_users datafile 'D:\ORACLE\PRODUCT\ORADATA\TESTDB\BIG_USERS01.DBF' size 10M autoextend on next 10M;

Tablespace created

SQL> select tablespace_name, bigfile from dba_tablespaces;

TABLESPACE_NAME BIGFILE
------------------------------ -------
SYSTEM NO
UNDOTBS_NEW NO
SYSAUX NO
TEMP NO
USERS NO
BIG_USERS YES
EXAMPLE NO

7 rows selected


На практике оказывается, что многие операционные системы не поддерживают настолько большие файлы, поэтому прежде тем,
как решить использовать bigfile табличные пространства, следует узнать поддерживает ли ОС большие файлы.
В противном случае можно оказаться в ситуации, что невозможно будет увеличить табличное пространство, так как
bigfile tablespace состоит только из одного файла данных и к нему невозможно добавить дополнительные файлы данных.


SQL> alter tablespace big_users add datafile 'D:\ORACLE\PRODUCT\ORADATA\TESTDB\BIG_USERS02.DBF' size 20M;

alter tablespace big_users add datafile 'D:\ORACLE\PRODUCT\ORADATA\TESTDB\BIG_USERS02.DBF' size 20M

ORA-32771: cannot add file to bigfile tablespace


По умолчанию, все табличные пространства создаются c smallfile, но эту настройку можно изменить следующей командой:


SQL> select property_name, property_value from database_properties where property_name like 'DEFAULT_TBS_TYPE';

PROPERTY_NAME PROPERTY_VALUE
------------------------------ --------------------------------------------------------------------------------
DEFAULT_TBS_TYPE SMALLFILE

SQL> alter database set default bigfile tablespace;

Database altered

SQL> select property_name, property_value from database_properties where property_name like 'DEFAULT_TBS_TYPE';

PROPERTY_NAME PROPERTY_VALUE
------------------------------ --------------------------------------------------------------------------------
DEFAULT_TBS_TYPE BIGFILE


Теперь, команда create tablespace будет создавать bigfile табличные пространства.

18 апреля 2008 г.

Ошибка при установке SOA Suite 10g

При установке SOA Suite 10g в Solaris 5.10, я столкнулась с такой ошибкой на последнем этапе инсталляции:
Configuration assistant "Oracle Application Server Configuration Assistant" failed

Так как данная настройка была необязательной, то есть "Optional", инсталляция в-общем считалась успешной. Но не стартовал ни один процесс, не стартовал сам Oracle Aplication Server.

Логи этого ассистента, которая завершилась неуспешно можно посмотреть в следующих файлах:

1) $ORACLE_BASE/oraInventory/logs/installActionstimestamp.log - сюда пишутся логи любого из неуспешно заверщенных ассистентов

2) $ORACLE_HOME/cfgtoollogs/configtoolstimestamp.log - здесь логи Oracle Application Server Configuration Assistant, с которой связана данная ошибка.
Здесь можно посмотреть куда кладутся логи других ассистентов.

3)$ORACLE_HOME/opmn/logs/opmn.log - один из логов OPMN, который тоже не стартовал после установки.
Здесь есть описание каждого из логов OPMN.

Логи из ~/oraInventory/logs/oraInstall2008-04-17_02-22-00PM.out:
Oracle JAAS [Thu Apr 17 14:27:05 MSD 2008] admin password is changed successfully
opmnctl: starting opmn and all managed processes...
opmnctl: opmn start failed.
--------------------------------------
The following configuration assistants have not been successfully completed. These assistants must be completed for your product to be completely configured.
Execute file /zones/u01/app/oas/product/oas10g/cfgtoollogs/configToolCommands to re-run all skipped/failed configuration assistants.
/zones/u01/app/oas/product/oas10g/jdk/bin/java -cp /zones/u01/app/oas/product/oas10g/j2ee/home/applications/ascontrol/ascontrol/WEB-INF/lib/ascontrol.jar:/zones/u01/app/oas/product/oas10g/j2ee/home/applications/ascontrol/ascontrol/WEB-INF/lib/log4j-core.jar:/zones/u01/app/oas/product/oas10g/jlib/oraclepki.jar:/zones/u01/app/oas/product/oas10g/jlib/ojmisc.jar: oracle.sysman.ias.studio.installer.ASControlConfigAssistant -sso true -j2eeinstance home -username oc4jadmin -password *Protected value, not to be logged* -oraclehome /zones/u01/app/oas/product/oas10g
/zones/u01/app/oas/product/oas10g/jdk/bin/java -jar /zones/u01/app/oas/product/oas10g/bpel/system/services/lib/bpm-install.jar installSOABasic -oracle-home "/zones/u01/app/oas/product/oas10g" -http-proxy-required false -dbvendor oracle -database myhost 1521 OASDB -username ORABPEL -password *Protected value, not to be logged* -ias-name APPSRV.myhost -iasadmin-password *Protected value, not to be logged* -sso true -homeContainer home -ohstype oc4j -ohshost myhost -ohsport 8889
/zones/u01/app/oas/product/oas10g/owsm/bin/wsmadmin.sh install
/zones/u01/app/oas/product/oas10g/perl/bin/perl /zones/u01/app/oas/product/oas10g/config/launchopmnCA.pl
/zones/u01/app/oas/product/oas10g/ant/bin/ant -buildfile /zones/u01/app/oas/product/oas10g/webservices/lib/wsil-install.xml -logfile /zones/u01/app/oas/product/oas10g/cfgtoollogs/wsil.txt -DHOST=myhost -DOPMNPORT="6003" -DADMIN_USER=oc4jadmin -DOPMNINSTANCE=home -Denv.JAVA_HOME=/zones/u01/app/oas/product/oas10g/jdk -Denv.ANT_HOME=/zones/u01/app/oas/product/oas10g/ant -Denv.ORACLE_HOME=/zones/u01/app/oas/product/oas10g -DENABLE_SSO=true *Protected value, not to be logged*
--------------------------------------

Вырезка из $ORACLE_HOME/cfgtoollogs/configtools2008-04-17_02-22-00PM.log:
------------------------------------------------
Launched configuration assistant 'Oracle Application Server Configuration Assistant'
------------------------------------------------


Tool type is: Optional.
The command being spawned is: '/zones/u01/app/oas/product/oas10g/jdk/bin/java -cp /zones/u01/app/oas/product/oas10g/j2ee/home/applic
ations/ascontrol/ascontrol/WEB-INF/lib/ascontrol.jar:/zones/u01/app/oas/product/oas10g/j2ee/home/applications/ascontrol/ascontrol/WE
B-INF/lib/log4j-core.jar:/zones/u01/app/oas/product/oas10g/jlib/oraclepki.jar:/zones/u01/app/oas/product/oas10g/jlib/ojmisc.jar: ora
cle.sysman.ias.studio.installer.ASControlConfigAssistant -sso true -j2eeinstance home -username oc4jadmin -password *Protected value
, not to be logged* -oraclehome /zones/u01/app/oas/product/oas10g'

Configuration assistant "Oracle Application Server Configuration Assistant" failed


Содержимое лог файла $ORACLE_HOME/opmn/logs/opmn.log: (Реальные айпи адреса заменены на 555.555.555.555)
08/04/17 14:27:07 [ons-internal] ONS server initiated
08/04/17 14:27:07 [pm-internal] Create pm state directory: /zones/u01/app/oas/product/oas10g/opmn/logs/states
08/04/17 14:27:07 [pm-internal] PM state file does not exist: /zones/u01/app/oas/product/oas10g/opmn/logs/states/.opmndat
08/04/17 14:27:07 [pm-internal] OPMN server ready. Request handling enabled.
08/04/17 14:27:07 [ons-listener] 555.555.555.555,6200: BIND (Cannot assign requested address)
08/04/17 14:33:46 [ons-internal] ONS server initiated
08/04/17 14:33:46 [pm-internal] PM state directory exists: /zones/u01/app/oas/product/oas10g/opmn/logs/states
08/04/17 14:33:46 [pm-internal] PM state file does not exist: /zones/u01/app/oas/product/oas10g/opmn/logs/states/.opmndat
08/04/17 14:33:46 [pm-internal] OPMN server ready. Request handling enabled.
08/04/17 14:33:46 [ons-listener] 555.555.555.555,6200: BIND (Cannot assign requested address)

Решение:

Причиной ошибки оказались настройки сети, о которой можно прочитать на металинке Note:549091.1 под темой OPMN Tries To Bind To Wrong IP Address During Install.

Вырезка из металинка Note:549091.1:

- The OPMN local port above should be binding to "localhost" i.e 127.0.0.1
- "ping localhost" resolves to 127.0.0.1
- "nslookup localhost" resolves to 127.0.0.1
- "nslookup 3.3.3.3" resolves to localhost.subdn.us.oracle.com

Cause
The problem here is caused by the fact "localhost" is stored within DNS. Normally localhost should not be in DNS.

Solution
-- To implement the solution, execute the following steps::
Either:
1. Remove localhost entry from DNS (preferred option)
Or:
2. Change the search order in /etc/resolv.conf so it searches the local domain first, so it reads:

search us.oracle.com uk.oracle.com subdns.us.oracle.com
nameserver 1.1.1.1
nameserver 2.2.2.2


У меня localhost определялся правильно, но оказалось, что у самого хоста оказалось 2 разных IP адреса:

oas@myhost $ ping -a myhost
myhost (333.333.333.333) is alive
oas@myhost $ ping -a myhost.domain.com
myhost.domain.com (555.555.555.555) is alive


Содержимое /etc/hosts:

root@myhost.domain.com # cat /etc/hosts
#
# Internet host table
#
127.0.0.1 localhost
333.333.333.333 myhost myhost.domain.com loghost

Из справочника по ОС Solaris (ссылка здесь):

On Solaris 10, IPv4 addresses are looked up in /etc/inet/ipnodes before /etc/inet/hosts.

Содержимое /etc/inet/ipnodes:

root@myhost.domain.com # cat /etc/inet/ipnodes
#
# Internet host table
#
::1 localhost
127.0.0.1 localhost
555.555.555.555 myhost.domain.com loghost


Ошибка возникала из-за того, что IP адрес хоста был прописан неправильно в /etc/inet/ipnodes:
555.555.555.555 myhost.domain.com loghost

Теперь хост определяется правильно:
oas@myhost $ ping -a myhost
myhost (333.333.333.333) is alive
oas@myhost $ ping -a myhost.domain.com
myhost.domain.com (333.333.333.333) is alive


После исправления этой ошибки, деисталлировала Oracle Suite 10g и установила заново. Инсталляция прошла успешно.

17 апреля 2008 г.

Удаление репозитария Enterprise Manager Database Control

При удалении Enterprise Manager Database Control repository с помощью команды

emca -deconfig dbcontrol db -repos drop

процесс может зависнуть на неопреленное время:

oracle@myhost$ emca -deconfig dbcontrol db -repos drop

STARTED EMCA at Apr 17, 2008 5:08:41 PM
EM Configuration Assistant, Version 10.2.0.1.0 Production
Copyright (c) 2003, 2005, Oracle. All rights reserved.

Enter the following information:
Database SID: TESTDB
Listener port number: 1521
Password for SYS user:
Password for SYSMAN user:

Do you wish to continue? [yes(Y)/no(N)]: Y
Apr 17, 2008 5:08:53 PM oracle.sysman.emcp.EMConfig perform
INFO: This operation is being logged at /zones/u01/app/oracle/product/10.2.0/cfgtoollogs/emca/TESTDB/emca_2008-04-17_05-08-41-PM.log.
Apr 17, 2008 5:08:54 PM oracle.sysman.emcp.util.DBControlUtil stopOMS
INFO: Stopping Database Control (this may take a while) ...
Apr 17, 2008 5:08:59 PM oracle.sysman.emcp.EMReposConfig dropRepository
INFO: Dropping the EM repository (this may take a while) ...


Одной из причин, может быть то, что у пользователя SYSMAN есть активные сессии в базе данных. Вырезка из документации:

"While installing Enterprise Manager using existing database, Oracle Management Service configuration hangs while dropping the repository. This is due to active SYSMAN sessions connected to the database.

To resolve this issue, shutdown any existing Enterprise Manager sessions (both Grid Control and Database Control) or other SQLPLUS SYSMAN sessions."


Также, следует удалить файлы с расширением *.lck в директориях $ORACLE_HOME/cfgtoollogs/emca и $ORACLE_HOME/cfgtoollogs/emca/$ORACLE_SID.