Представления для управления объектами базы данных Oracle

Существует несколько важных представлений словаря базы данных, которые можно использовать для нахождения детальной информации о любом из объектов базы данных, о которых говорилось в этой главе. Администраторы баз данных также интенсивно используют представления словаря данных, чтобы управлять различными объектами схемы. Здесь приводится краткий список важнейших представлений, часть из которых упоминалась выше. Полные данные о типах информации, которую можно получить от каждого из этих представлений, доступны по команде DESCRIBE (например, DESCRIBE DBA_CATALOG).

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

  • DBA_SYNONYMS. Информация о синонимах базы данных.
  • DBA_TRIGGERS. Информация о триггерах.
  • DBA_SEQUENCES. Информация о созданных пользователем последовательностях.
  • DBA_DB_LINKS. Информация о связях базы данных.

Как упоминалось ранее, представление DBA_OBJECTS предоставляет важную информацию обо всех перечисленных объектах, наряду с некоторыми другими типами объектов базы данных. Однако перечисленные представления содержат детальную информацию о каждом объекте, такую как исходный текст триггера, которую вы не получите из представления DBA_OBJECTS.

Управление такими объектами, как таблицы и представления, осуществляется ссылкой на представления словаря данных, наподобие DBA_TABLES и DBA_VIEWS. Существуют также отдельные представления для секционированных таблиц. Давайте рассмотрим ключевые представления словаря данных, относящиеся к таблицам и индексам.

DBA_OBJECTS

Представление DBA_OBJECTS содержит информацию обо всех объектах базы данных, включая таблицы, индексы, пакеты, процедуры, функции, измерения, материализованные представления, планы ресурсов, типы, последовательности, синонимы, триггеры, представления и разделы таблиц (оно же секционирование). Как несложно догадаться, это представления удобно, когда нужно знать общую информацию относительно любого объекта базы данных. В листинге ниже  показан запрос, предназначенный для нахождения времени создания и времени последней модификации объекта (LAST_DDL_TIME). Этот тип запроса поможет идентифицировать время модификации определенного объекта, что часто используется в процессе аудита.


 

SQL> SELECT object_name,
2 object_type,
3 created,
4 last_ddl_time,
5 FROM DBA_OBJECTS
6 WHERE owner ='APPOWNER'
7* AND object_name LIKE 'YTD%';
OBJECT_NAME         OBJECT_TYPE   CREATED      LAST_DDL_TIME
-----------------   -----------   ----------   -------------
YTD_ADJ2005050603   TABLE         01/23/2008   01/23/2008
SQL>

DBA_TABLES

Представление DBA_TABLES содержит информацию обо всех реляционных таблицах базы данных. Представление DBA_TABLES — основной справочник для нахождения информации о хранении, количестве строк в таблице, состоянии протоколирования, информации буферного пула и многих других деталях. Ниже приведен простой пример запроса представления DBA_TABLES

SQL> SELECT tablespace_name,table_name
FROM DBA_TABLES;
TABLESPACE_NAME   TABLE_NAME
---------------   ----------------
EXAMPLE           DEPARTMENTS
EXAMPLE           EMPLOYEES_INTERI
EXAMPLE           EMPLOYEES_NEW
EXAMPLE           JOBS
EXAMPLE           JOB_HISTORY
EXAMPLE           TEST
6 rows selected.
SQL>

На заметку! Представление DBA_ALL_TABLES содержит информацию обо всех объектных и реляционных таблицах в базе данных, в то время как представление DBA_TABLES ограничено только реляционными таблицами.


Представление DBA_TABLES служит для нахождения таких вещей, как включено ли сжатие и отслеживание зависимостей на уровне строки, и была ли таблица уничтожена и помещена в корзину (Recycle Bin).

DBA_EXTERNAL_TABLES

Представление DBA_EXTERNAL_TABLES показывает подробности о любой внешней таблице в базе данных, включая их тип доступа, параметры доступа и информацию о каталоге.

DBA_TAB_PARTITIONS

Представление DBA_TAB_PARTITIONS подобно представлению DBA_TABLES, но содержит детальную информацию о разделах таблиц. Благодаря DBA_TAB_PARTITIONS, можно узнать имя раздела, его максимальные значения, информацию о хранении раздела,статистику по разделу, а также прочую информацию, которая доступна в представлении DBA_TABLES. В листинге ниже показан простой запрос, использующий представление DBA_TAB_PARTITIONS.


 

SQL> SELECT table_name, partition_name,
2 high_value,
3* FROM DBA_TAB_PARTITIONS;
TABLE_NAME       PARTITION_NAME    HIGH_VALUE
------------     --------------    -------------------------------
SALES            SALES_Q2_2004     TO_DATE(' 2007-07-01 00:00:00')
SALES            SALES_Q3_2004     TO_DATE(' 2007-10-01 00:00:00')
SALES            SALES_Q4_2004     TO_DATE(' 2008-01-01 00:00:00')
SALES            SALES_Q1_2005     TO_DATE(' 2008-04-01 00:00:00')
SALES            SALES_Q2_2005     TO_DATE(' 2008-07-01 00:00:00')
SALES            SALES_Q3_2005     TO_DATE(' 2008-10-01 00:00:00')
SALES            SALES_Q4_2005     TO_DATE(' 2009-01-01 00:00:00')
EMPLOYEES        EMPLOYEES1        100
EMPLOYEES        EMPLOYEES2        300
SQL>

DBA_PART_TABLES

Представление DBA_PART_TABLES содержит информацию о типе схемы раздела и прочих параметрах хранения разделов и подразделов. Узнать тип каждого раздела каждой секционированной таблицы можно с помощью следующего запроса: 

SQL> SELECT table_name, partitioning_type,
2 def_tablespace_name
3 FROM DBA_PART_TABLES;
TABLE_NAME          PARTITION_TYPE   DEF_TABLESPACE_NAME
------------------  ---------------  -------------------
EMPLOYEES           RANGE            EXAMPLE
EMPLOYEES_INTERIM   RANGE            EXAMPLE
COSTS               RANGE            EXAMPLE
SALES               RANGE            EXAMPLE
SQL>

DBA_TAB_MODIFICATIONS

Представление DBA_TAB_MODIFICATIONS показывает все изменения DML в таблице,произошедшие с момента последнего сбора статистики по этой таблице. Вот запрос к этому представлению: 

SQL> SELECT table_name, inserts, updates, deletes
FROM DBA_TAB_MODIFICATIONS;
TABLE_NAME                  INSERTS  UPDATES  DELETES
--------------------------  -------  -------  -------
WRH$ACTIVE_SESSION_HISTORY  1233     0        0
WRH$SERVICE_STAT            5376     0        0
WRH$SERVICE_WAIT_CLASS      1050     0        0
. . .
SQL>

База данных не обновляет представление DBA_TAB_MODIFICATIONS в реальном времени. Следовательно, вы можете и не увидеть изменений в различных таблицах, немедленно отраженных в этом представлении.

DBA_TAB_COLUMNS

Предположим, вы нужно узнать среднюю длину каждой строки таблицы или значение по умолчанию каждого столбца (если таковое есть). Представление DBA_TAB_COLUMNS — отличный способ быстро получить всю детальную информацию о столбцах таблиц схемы, как показано в листинге ниже.


 

SQL> SELECT column_name,
2 avg_col_len,
3 data_type,
4 data_length,
5 nullable,
6 FROM dba_tab_columns
7* WHERE owner='OE';
COLUMN_NAME               AVG_COL_LEN     DATA_TYPE   DATA_LENGTH     NULL
----------------------    -----------     ---------   -------------   ----
CUSTOMER_ID                         4     NUMBER                 22   N
CUST_FIRST_NAME                     7     VARCHAR2               20   N
CUST_LAST_NAME                      8     VARCHAR2               20   N
TRANSLATED_DESCRIPTION            245     NVARCHAR2            4000   N
PRODUCT_DESCRIPTION               123     VARCHAR2             2000   Y
WARRANTY_PERIOD                     5     INTERVAL YEA            5   Y
SQL>

DBA_VIEWS

Как известно, представления — это результаты запросов к некоторым таблицам базы данных. Представление словаря данных DBA_VIEWS позволяет увидеть SQL-запросы, лежащие в основе представлений. В листинге ниже показано, как получить текст представления OS_CUSTOMERS, принадлежащего пользователю oe.


Совет. Чтобы обеспечить полное отображение текста при использовании представления DBA_VIEWS, установите большое значение переменной long (например, SET LONG 2000). В противном случае вы увидите лишь несколько первых строк определения представления.


 

SQL> SET LONG 2000
SQL> SELECT text
2 FROM DBA_VIEWS
3 WHERE view_name ='OC_CUSTOMERS'
4* AND owner = 'OE';
TEXT
--------------------------------------------------
SELECT c.customer_id, c.cust_first_name,
c.cust_last_name, c.cust_address,
c.phone_numbers,c.nls_languag
e,c.nls_territory,c.credit_limit, c.cust_email,
CAST(MULTISET(SELECT o.order_id, o.order_mode,
MAKE_REF(
oc_customers,o.customer_id),
o.order_status,o.order_t
otal,o.sales_rep_id,
CAST(MULTISET(SELECT l.order_id,l.line_item_id,
l.unit_price,l.quantity,
MAKE_REF(oc_product_information,
l.product_id)
FROM order_items l
WHERE o.order_id = l.order_id)
AS order_item_list_typ)
FROM orders o
WHERE c.customer_id = o.customer_id)
AS order_list_typ)
FROM customers c
SQL>

DBA_MVIEWS

Представление словаря DBA_MVIEWS сообщает все о материализованных представлениях в базе данных, в том числе информацию, включено ли для них средство переписывания запросов. В листинге ниже демонстрируется использования этого представления.


 

SQL> SELECT
2 mview_name,
3 query,
4 updatable,
5 rewrite_enabled, /* включено ли средство переписывания запросов */
6 refresh_mode, /* demand, commit или never */
7 refresh_method /* complete, force, fast или never */
8* FROM dba_mviews;
MVIEW_NAME QUERY UPD REW REFR REFRESH_ME ---------------- ---------------------------- ---- ---- --------------- MONTH_SALES_MV SELECT t.calendar_month_desc N Y DEMAND FORCE PCAT_SALES_MV SELECT t.week_ending_day N Y DEMAND COMPLETE SQL>

DBA_INDEXES

Представление словаря DBA_INDEXES служит для того, чтобы узнать все необходимое об индексах в базе данных, включая имя индекса, его тип, таблицу и табличное пространство, к которому он относится. Определенные столбцы, наподобие BLEVEL (сообщает уровень B-дерева индекса) и DISTINCT_KEYS (количество разных значений ключа индекс), наполняются, только если собрана статистика по индексу с использованием пакета DBMS_STATS.

DBA_IND_COLUMNS

Представления DBA_IND_COLUMNS по структуре подобно представлению DBA_CONS_COLUMNS и содержит информацию обо всех проиндексированных столбцах каждой таблицы. Эта информация важна при настройке производительности, когда вы замечаете,что запрос использует индекс, но вы не знаете точно, на каких столбцах этот индекс определен. Запрос, приведенный в листинге ниже, показывает, что таблица имеет индексы, определенные на неверных столбцах.


 

SQL> SELECT index_name,
2 table_name,
3 column_name,
4 column_position
5 FROM DBA_IND_COLUMNS
6* WHERE table_owner='OE';
INDEX_NAME                TABLE_NAME     COLUMN_NAME       COLUMN_POSITION
-----------------------   -----------    ----------------  ---------------
CUST_ACCOUNT_MANAGER_IX   CUSTOMERS      ACCOUNT_MGR_ID    1
CUST_LNAME_IX             CUSTOMERS      CUST_LAST_NAME    1
CUST_EMAIL_IX             CUSTOMERS      CUST_EMAIL        1
INVENTORY_PK              INVENTORIES    PRODUCT_ID        1
INVENTORY_PK              INVENTORIES    WAREHOUSE_ID      2
INV_PRODUCT_IX            INVENTORIES    PRODUCT_ID        1
ORDER_PK                  ORDERS         ORDER_ID          1
ORD_SALES_REP_IX          ORDERS         SALES_REP_ID      1
ORD_CUSTOMER_IX           ORDERS         CUSTOMER_ID       1
SQL>

Совет. Взглянув на столбец INDEX_NAME, можно легко идентифицировать составные ключи. Если одно и то же вхождение INDEX_NAME появляется больше одного раза, значит, это составной ключ; и столбцы, являющиеся его частью, показаны в столбце COLUMN_NAME. Например,INVENTORY_PK — первичный ключ таблицы INVENTORIES, определенный на двух столбцах:PRODUCT_ID и WAREHOUSE_ID. Порядок столбцов в определении составного ключа можно узнать с помощью столбца COLUMN_POSITION.


INDEX_STATS

Представление INDEX_STATS полезно для того, чтобы узнать, насколько эффективно индекс использует свое пространство. Крупные индексы имеют тенденцию со временем становиться несбалансированными, если происходит много удалений данных таблицы (а, следовательно, и индекса). Ваша цель — не упускать из виду эти крупные индексы,чтобы сохранять их сбалансированными.

Обратите внимание, что представление INDEX_STATS наполняется, только когда таблица подвергается анализу с помощью команды ANALYZE, как показано ниже: 

SQL> ANALYZE index hr.emp_name_ix VALIDATE STRUCTURE;
Index analyzed.

Запрос из листинга ниже, использующий представление INDEX_STATS, помогает определить необходимость в перестройке индекса. Чтобы определить, следует ли перестраивать индекс, в запросе необходимо сосредоточиться на перечисленных ниже столбцах представления INDEX_STATS.

  • HEIGHT. Этот столбец ссылается на высоту B-дерева индекса и обычно имеет значение уровня 1, 2 или 3. Если массивные вставки данных выталкивают индекс на высоту уровня 4, самое время перестроить индекс, уменьшив высоту B-дерева.
  • DEL_LF_ROWS. Это количество листовых узлов, удаленных из-за удаления строк.Oracle не перестраивает индекс автоматически и, следовательно, слишком много удалений листовых строк могут привести к несбалансированному B-дереву.
  • BLK_GETS_PER_ACCESS. Столбец BLK_GETS_PER_ACCESS позволяет увидеть, сколько логических операций ввода-вывода требуется для извлечения данных индекса.Если здесь находится двузначное число, значит, наступило время для перестройки индекса.

SQL> SELECT height, /* Высота B-дерева */
2 blocks, /* Блоки в сегменте индекса */
3 name, /* Имя индекса */
4 lf_rows, /* Количество листовых строк в индексе */
5 lf_blks, /* Количество листовых блоков в индексе */
6 del_lf_rows, /* Количество удаленных листовых строк в индексе */
7 rows_per_key /* Среднее количество строк на каждый отдельный ключ */
8 blk_gets_per_access /* Согласованные чтения блоков (gets) */
8 FROM INDEX_STATS
9* WHERE name='EMP_NAME_IX';
HEIGHT  BLOCK        LF_ROWS  LF_BLKS   DEL_LF_ROWS  ROWS_PER_KEY  BLK_GETS
------  -----------  -------  --------  -----------  ------------  ---------
16      EMP_NAME_IX  107      1         0            1             1
SQL> 

Вас заинтересует / Intresting for you:

Обновление до Oracle Database ...
Обновление до Oracle Database ... 7827 просмотров Илья Дергунов Tue, 21 Nov 2017, 13:18:05
Поддерживаемые Oracle типы дан...
Поддерживаемые Oracle типы дан... 9517 просмотров Валерий Павлюков Wed, 24 Oct 2018, 08:00:37
Видеокурс по администрированию...
Видеокурс по администрированию... 10719 просмотров Илья Дергунов Mon, 14 May 2018, 05:08:47
Создание базы данных Oracle
Создание базы данных Oracle 34258 просмотров Александров Попков Wed, 14 Nov 2018, 12:44:39
Войдите чтобы комментировать