как узнать объем таблицы oracle

Как узнать объем таблицы oracle

���
unformatted_blocks
Total number of blocks that are unformatted

unformatted bytes
Total number of bytes that are unformatted

fs1_blocks
Number of blocks that has at least 0 to 25% free space

fs1_bytes
Number of bytes that has at least 0 to 25% free space

fs2_blocks
Number of blocks that has at least 25 to 50% free space

fs2_bytes
Number of bytes that has at least 25 to 50% free space

fs3_blocks
Number of blocks that has at least 50 to 75% free space

fs3_bytes
Number of bytes that has at least 50 to 75% free space

fs4_blocks
Number of blocks that has at least 75 to 100% free space

fs4_bytes
Number of bytes that has at least 75 to 100% free space

ful1_blocks
Total number of blocks that are full in the segment

full_bytes
Total number of bytes that are full in the segment20 ��� 09, 18:00����[7205723] �������� | ���������� �������� ����������

как узнать объем таблицы oracle. message. как узнать объем таблицы oracle фото. как узнать объем таблицы oracle-message. картинка как узнать объем таблицы oracle. картинка message.Re: ������ ������ �������? [new]
orawish
Member

������: ��������-2 (City)
���������: 15504

Brass,

20 ��� 09, 20:03����[7206234] �������� | ���������� �������� ����������
как узнать объем таблицы oracle. message. как узнать объем таблицы oracle фото. как узнать объем таблицы oracle-message. картинка как узнать объем таблицы oracle. картинка message.Re: ������ ������ �������? [new]
Serguei
Member

������: Papua New Guinea
���������: 713

Fedortsov A.

��� ������������ ����� ������������ �������?
20 ��� 09, 20:12����[7206261] �������� | ���������� �������� ����������
как узнать объем таблицы oracle. message. как узнать объем таблицы oracle фото. как узнать объем таблицы oracle-message. картинка как узнать объем таблицы oracle. картинка message.Re: ������ ������ �������? [new]
Brass
Member

������: ������
���������: 541

orawish
Brass,


������������ �� ������ ��������
��� � �� ������������������ �������� ����� ����� ���������� ��������
������ ������ ������ ���� ����
20 ��� 09, 22:23����[7206514] �������� | ���������� �������� ����������
как узнать объем таблицы oracle. message. как узнать объем таблицы oracle фото. как узнать объем таблицы oracle-message. картинка как узнать объем таблицы oracle. картинка message.Re: ������ ������ �������? [new]
Brass
Member

������: ������
���������: 541

Brass
orawish
Brass,

20 ��� 09, 22:34����[7206545] �������� | ���������� �������� ����������
как узнать объем таблицы oracle. message. как узнать объем таблицы oracle фото. как узнать объем таблицы oracle-message. картинка как узнать объем таблицы oracle. картинка message.Re: ������ ������ �������? [new]
���� �.
Member

������: ������
���������: 783

��� v$segstat �������� ������ � ���������� � ������� ������������.
20 ��� 09, 22:53����[7206586] �������� | ���������� �������� ����������
как узнать объем таблицы oracle. happy. как узнать объем таблицы oracle фото. как узнать объем таблицы oracle-happy. картинка как узнать объем таблицы oracle. картинка happy.Re: ������ ������ �������? [new]
orawish
Member

������: ��������-2 (City)
���������: 15504

Brass,

��� � �� ����������, ��� ��� �������� ��� ���� ���������.
������, ���� ��� ���������� (��� ����� �����), ��, ����,
�� ��� �� ���� � ����� �����

21 ��� 09, 16:26����[7210971] �������� | ���������� �������� ����������
����� ����������� �������� ����� 1 ����.
как узнать объем таблицы oracle. message. как узнать объем таблицы oracle фото. как узнать объем таблицы oracle-message. картинка как узнать объем таблицы oracle. картинка message.Re: ������ ������ �������? [new]
Evgeny_1987
Member

������:
���������: 26

Fedortsov A., � �� ��������� ����� ���������� ������� � ��������� ��������� ������, �������� � blob-����� �������:

http://konurbaev-e.blogspot.ru/2013/06/oracle-database-how-to-calculate-actual.html

18 ��� 13, 23:15����[14451106] �������� | ���������� �������� ����������
как узнать объем таблицы oracle. biggrin. как узнать объем таблицы oracle фото. как узнать объем таблицы oracle-biggrin. картинка как узнать объем таблицы oracle. картинка biggrin.Re: ������ ������ �������? [new]
ORA__SQL
Member

������: Moscow
���������: 1774

Evgeny_1987
Fedortsov A., � �� ��������� ����� ���������� ������� � ��������� ��������� ������, �������� � blob-����� �������:
http://konurbaev-e.blogspot.ru/2013/06/oracle-database-how-to-calculate-actual.html

������ ����

19 ��� 13, 00:04����[14451239] �������� | ���������� �������� ����������
как узнать объем таблицы oracle. message. как узнать объем таблицы oracle фото. как узнать объем таблицы oracle-message. картинка как узнать объем таблицы oracle. картинка message.Re: ������ ������ �������? [new]
Sayan Malakshinov
Member

����,
1. ���������� ������ �������
2. �� ����� ������ upper, ����� ��������� �� ���� ����� ������ ��������
3. �������� ALL_ c DBA_, �� ��� � �� ������ ��� ����� owner’a
4. �� ��������� lob index’� � ��������� �������
5. dba_segments ���������� «�������» �����, ���� �� ���� ����, �� ���� �� ���� ���

19 ��� 13, 02:23����[14451435] �������� | ���������� �������� ����������
как узнать объем таблицы oracle. message. как узнать объем таблицы oracle фото. как узнать объем таблицы oracle-message. картинка как узнать объем таблицы oracle. картинка message.Re: ������ ������ �������? [new]
Sayan Malakshinov
Member

������: ���
���������: 5925

-2-
����� ��������� �������� ������ �������, ���� �������� ��������� ��� ��� �� ���������.

���, ��� ��� ������

19 ��� 13, 09:20����[14451790] �������� | ���������� �������� ����������
как узнать объем таблицы oracle. message. как узнать объем таблицы oracle фото. как узнать объем таблицы oracle-message. картинка как узнать объем таблицы oracle. картинка message.Re: ������ ������ �������? [new]
Evgeny_1987
Member

�����
2. �� ����� ������ upper, ����� ��������� �� ���� ����� ������ ��������
3. �������� ALL_ c DBA_, �� ��� � �� ������ ��� ����� owner’a

select
sum(s.bytes) into val
from
dba_lobs t
inner join
dba_segments s on t.segment_name = s.segment_name
where
t.table_name = upper(pNazvanie)
and
t.owner = upper(pOwner);

����� ����, �������� ��� ������� �������� �������� �� �����.
������ ������� ����������� 2 �������, ����� ��� ����������.

19 ��� 13, 20:05����[14456154] �������� | ���������� �������� ����������
как узнать объем таблицы oracle. message. как узнать объем таблицы oracle фото. как узнать объем таблицы oracle-message. картинка как узнать объем таблицы oracle. картинка message.Re: ������ ������ �������? [new]
Sayan Malakshinov
Member

COLUMN TABLE_NAME FORMAT A32
COLUMN OBJECT_NAME FORMAT A32
COLUMN OWNER FORMAT A10

Источник

mirsovetov.net

Андрощук Александр, ИТ решения, советы, заметки…

Oracle сколько места занимает схема

Проблема:

Инструментарий: Oracle 10, Oracle 11

Для определения сколько места занимает объект базы данных — можно воспользоваться представлением DBA_SEGMENTS или USER_SEGMENTS. Разница только в том что в USER_SEGMENTS возвращает описание лишь для текущего пользователя, а не для всей базы данных, и в нем отсутствует колонок: OWNER, HEADER_FILE, HEADER_BLOCK, or RELATIVE_FNO. В принципе можно воспользоваться и представлением DBA_SEGMENTS, только нужно указать OWNER’а, если конечно нужно узнать информацию о конкретной схеме.
Главный запрос от которого мы будим отталкиваться будет выглядеть следующим образом:

В результате получим список схем и размер схем:

OWNERSIZE_BYTES
SYS2064187392
SCOTT327680

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

OWNERSIZE_BYTES
SYS1.921875 GB
SCOTT320 KB

Запрос конечно не идеален, но все же позволяет узнать сколько занимает места схема в Oracle.

Источник

Как вычислить размер таблиц в Oracle

Будучи использованным (и потенциально испорченным) MSSQL, мне интересно, как я могу получить размер таблиц в Oracle 10g. У меня есть googled, поэтому я теперь знаю, что у меня может быть не так просто, как sp_spaceused. Тем не менее, потенциальные ответы, которые я получил, в большинстве случаев устарели или не работают. Возможно, потому, что я не администратор базы данных по схеме, с которой я работаю.

У кого-нибудь есть решения или рекомендации?

ОТВЕТЫ

Ответ 1

Вам может быть интересен этот запрос. Он сообщает вам, сколько места распределено для каждой таблицы с учетом индексов и любых LOB в таблице. Часто вам интересно узнать «Сколько пробелов занимает таблица заказов на поставку, включая любые индексы», а не только сама таблица. Вы всегда можете вникать в детали. Обратите внимание, что для этого требуется доступ к представлениям DBA_ *.

Ответ 2

Примечание. Это оценки, сделанные более точно с помощью сбора статистики:

Ответ 3

Ответ 4

Сначала собирайте статистику оптимизатора в таблице (если вы еще этого не сделали):

ПРЕДУПРЕЖДЕНИЕ: Как говорит Джастин в своем ответе, сбор статистики оптимизатора влияет на оптимизацию запросов и не должен выполняться без должной осторожности и внимания!

Затем найдите количество блоков, занятых таблицей, из созданной статистики:

Общее количество блоков, выделенных для таблицы, это блоки + empty_blocks + num_freelist_blocks.

Чтобы сделать это для всех таблиц в схеме сразу:

Примечание. Изменения, внесенные выше, после прочтения этого потока AskTom

Ответ 5

IIRC нужны таблицы DBA_TABLES, DBA_EXTENTS или DBA_SEGMENTS и DBA_DATA_FILES. Существуют также версии USER_ и ALL_ для этих таблиц, которые вы можете видеть, если у вас нет административных разрешений на машине.

Ответ 6

Для подсегментированных таблиц и индексов мы можем использовать следующий запрос

Ответ 7

Я изменил WW-запрос, чтобы предоставить более подробную информацию:

Ответ 8

Вот вариант ответа WWs, он включает в себя разделы и подразделы, как предлагали другие выше, плюс столбец для отображения TYPE: Table/Index/LOB и т.д.

Ответ 9

Ответ 10

Зависит от того, что вы подразумеваете под «размером таблицы». Таблица не относится к определенному файлу в файловой системе. Таблица будет находиться в табличном пространстве (возможно, несколько табличных пространств, если они разделены, и, возможно, несколько табличных пространств, если вы также хотите учесть индексы в таблице). В табличном пространстве часто есть несколько таблиц и может распространяться по нескольким файлам.

Если вы оцениваете, сколько места вам понадобится для роста в будущем, то avg_row_len, умноженное на количество строк в таблице (или количество строк, которые вы ожидаете в таблице), будет хорошим руководством. Но Oracle оставит свободное пространство на каждом блоке, отчасти для того, чтобы строки могли «расти», если они обновлены, отчасти потому, что может оказаться невозможным установить еще одну целую строку на этом блоке (например, блок 8K будет соответствовать только двум строкам из 3K, хотя это было бы крайним примером, поскольку 3K намного больше, чем большинство размеров строк). Поэтому BLOCKS (в USER_TABLES) может быть лучшим руководством.

Но если бы у вас было 200 000 строк в таблице, удалил бы половину из них, тогда таблица все равно «владела» тем же числом блоков. Он не выделяет их для использования других таблиц. Кроме того, блоки не добавляются в таблицу отдельно, а в группах, называемых «степенью». Таким образом, в таблице обычно будет EMPTY_BLOCKS (также в USER_TABLES).

Ответ 11

Коррекция для секционированных таблиц:

Ответ 12

Простой выбор, который возвращает необработанные размеры таблиц на основе размера блока, также включает размер с индексом

выберите table_name, (nvl (( выберите сумму (блоки) из dba_indexes a, dba_segments b где a.index_name = b.segment_name и a.table_name = dba_tables.table_name ), 0) + блоков) * 8192/1024 TotalSize, blocks * 8 tableSize от dba_tables порядок на 3

Ответ 13

Ответ 14

Я нашел это немного более точным:

Ответ 15

Я изменил запрос, чтобы получить размер схемы для табличного пространства.

Ответ 16

есть еще один параметр, который позволяет получить размер «выбрать» с помощью объединений, а также размер таблицы в качестве опции

Ответ 17

Я имею тот же вариант, что и последние, которые вычисляют сегменты табличных данных, индексов таблиц и полей blob:

Источник

Таблицы Oracle

Таблицы — основные единицы хранилища в базе данных Oracle. Таблица (table) — это логическая сущность, которая делает чтение и манипуляции данных интуитивно понятными для пользователя. Таблица состоит из столбцов и строк, причем строка соответствует одиночной записи, которая состоит из набора полей. Когда вы создаете таблицу, то присваиваете ей имя и определяете набор столбцов, относящихся к ней. Каждый столбец имеет имя и определенный тип данных (вроде VARCHAR2 или DATE). Для определенных столбцов можно специфицировать ширину или точность и масштаб (scale), а некоторым из них могут быть установлены значения по умолчанию.

Оглавление

Типы таблиц Oracle

В базах данных Oracle можно создавать таблицы (table) двух типов: реляционные и объектные.

Реляционные таблицы — это базовые табличные структуры, которые состоят из строк и столбцов, хранящих данные.

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

Что такое таблица DUAL?

Таблица DUAL относится к схеме sys и создается автоматически при создании словаря данных.Таблица DUAL имеет единственный столбец по имени dummy и одну строку. Эта таблица позволяет применять команду Oracle SELECT для вычисления константных выражений. Как уже было показано, все, что есть в Oracle, должно находиться в какой-то таблице. Даже если что-то не находится в таблице, например, вычисляемое арифметическое выражение, запрос, который извлекает это значение, нуждается в какой-то таблице, и таблица DUAL служит таблицей “остальные” (catchall) для таких выражений. Например, для вычисления произведения 9 на 24567, можно воспользоваться следующей командой SQL: SELECT 9*24567 FROM dual.

Виды таблиц по способу хранения

Есть четыре основных способа организации таблиц (table) в базе данных Oracle.

В этой статье мы обсудим традиционные (организованные в куче) таблицы Oracle. Прочие типы таблиц будут рассматриваться нами в отдельной статье блога “Специальные таблицы Oracle”.

Оценка размера таблицы

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

Существуют алгоритмы для вычисления потенциального размера таблиц и индексов — они берут размер строки в байтах и умножают на ожидаемое количество строк в этой таблице. Оценка размера таблиц — скорее искусство, чем точная наука, и вам не стоит очень уж напрягаться, чтобы получить “точное” значение размера. Просто примените здравый смысл, чтобы не слишком отдалиться от реальности.

Можно упростить оценку размера таблицы, воспользовавшись OEM Database Control или же процедурой CREATE_TABLE_COST из пакета DBMS_SPACE. Оба подхода к установке размера новой таблицы описаны в последующих разделах.

Использование OEM Database Control для оценки размера таблиц

Давайте рассмотрим шаги, которые следует предпринять для определения размера новой таблицы с использованием интерфейса Database Control.

На странице Estimate Table Size (Оценить размер таблицы) введите ожидаемое количество столбцов вашей таблицы (рис. 1).

Когда вы проделаете все эти шаги, OEM немедленно сообщит, сколько места следует отвести новой таблице. Он также сообщит о том, сколько места следует выделить табличному пространству, в котором вы собираетесь создавать новую таблицу.

как узнать объем таблицы oracle. OEM Database Control. как узнать объем таблицы oracle фото. как узнать объем таблицы oracle-OEM Database Control. картинка как узнать объем таблицы oracle. картинка OEM Database Control.

На заметку! Следующая дискуссия об операциях с таблицей касается “нормальных” или “традиционных” таблиц Oracle, чьи строки не хранятся в таблице в каком-то определенном порядке. Большинство операций с таблицами, о которых пойдет речь, касаются всех типов таблиц Oracle, но с некоторыми модификациями синтаксиса или ограничениями.

Формат и размер строк Oracle

База данных Oracle хранит каждую строку таблицы в виде одного или более кусков. Если длина строки больше такого куска, то база данных может хранить строку несколькими кусками. Конечно,если строка таблицы маленькая, блок данных может содержать несколько строк таблицы. Для связывания кусков строк вместе используются идентификаторы ROWID. Каждый кусок строки содержит заголовок строки и данные для всей строки или части ее столбцов.

Использование пакета DBMS_SPACE для оценки потребностей в пространстве

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

Обратите внимание, что пакет DBMS_SPACE также содержит процедуру SPACE_USAGE,которая поможет вернуть незанятое пространство (в действительности — неиспользованные экстенты), выделенные таблицам, индексам и прочим объектам. Вот как выглядит синтаксис вызова этой процедуры для возврата пространства, выделенного таблице:

Создание таблицы Oracle

Для создания таблицы в вашей собственной схеме необходимо иметь системную привилегию CREATE TABLE, а для создания таблицы в схеме другого пользователя понадобится системная привилегия CREATE ANY TABLE. При создании таблицы всегда специфицируйте табличное пространство. Если этого не сделать, таблица будет создана в пользовательском табличном пространстве по умолчанию. Кроме того, необходимо иметь достаточную квоту свободного места в табличном пространстве, где собираетесь создавать свои таблицы, или же обладать системной привилегией UNLIMITED TABLESPACE. В листинге ниже показан синтаксис создания простой таблицы.

Совет. Если ваша база данных содержит крупные таблицы только для чтения, рассмотрите возможность использования средства сжатия таблиц Oracle, чтобы сэкономить место в хранилище.

В операторе CREATE TABLE из листинга выше присутствует несколько ограничений целостности, включая первичный ключ и внешний ключ, определенные на разных столбцах таблицы. Ограничения будут описаны далее в моем блоге, в статье “Управление ограничениями целостности базы данных”.

На заметку! С использованием конструкции ENCRYPT осуществляется прозрачное шифрование данных столбца. Шифровать можно столбцы типа CHAR, VARCHAR2, NUMBER, DATE и RAW. Пользователь, который шифрует столбец, увидит данные в расшифрованном формате. Шифрование включает установку ключа шифрования и некоторые другие детали (за дополнительной информацией о шифровании обращайтесь к руководству по Oracle, озаглавленном “Oracle Advanced Security Administrator’s Guide”, которое доступно по адресу http://tahiti.oracle.com). Вот как можно было бы зашифровать столбец ssn в предыдущем операторе создания таблицы:

Как только новая таблица создана, ее можно наполнять данными несколькими способами: применять команду INSERT для вставки данных или же загрузить данные с использованием SQL*Loader. Возможно также создать новую таблицу и поместить в нее данные из существующей таблицы из той же либо другой базы данных. Это делается с применением хорошо известной техники CREATE TABLE AS SELECT (CTAS), которую объясняется ниже, в разделе “Создание новой таблицы с помощью CTAS”. Кроме того, можно применять SQL-оператор MERGE для вставки данных их другой таблицы на основе определенных условий. Использование команды MERGE объясняется в приложении.

На заметку! Если вы создаете объекты базы данных в локально управляемом табличном пространстве, то указывать параметры хранения для каких-либо объектов не нужно.

Что такое значение null?

Значение null означает просто пустой столбец в строке. Значение null для столбца определенной строки не означает нулевого значения этого столбца. Вместо этого null указывает на то, что столбец в данной строке не имеет значения. Если данных для столбца нет либо они неизвестны, чтобы указать на это, применяется null. Вставлять в любой столбец таблицы значение null нельзя. Столбец допускает значения null только в том случае, если для него не специфицировано ограничение NOT NULL. Вдобавок, когда вы назначаете столбец первичным ключом этой таблицы, этот столбец также не допускает значений null. Попробуйте вставить все null-значения до конца таблицы, чтобы зарезервировать дисковое пространство. Это связано с тем, как Oracle хранит null-значения. Любые сравнения между null и другими значениям не могут быть истинными или ложными, поскольку null означает неизвестное значение.

Значения полей (столбцов) по умолчанию

Можно назначить полям таблицы Oracle значения по умолчанию. При вставке новой строки можно опускать значение для любого столбца, для которого определено значение по умолчанию. Для такого столбца база данных применит указанное значение по умолчанию.Если значение по умолчанию для столбца явно не задано, им будет null. Например, если для таблицы employees в качестве значения по умолчанию для столбца DEPT_NO вы установите 20, то Oracle поместит значение 20 в столбец DEPT_NO, даже если при вставке новых данных этот столбец не будет указан.

Виртуальные поля (столбцы)

В выпуске Oracle Database 11g в таблице можно использовать виртуальные поля (столбцы). Виртуальный столбец — это столбец, который определяется вычислением выражения, основанного на одном или более действительных столбцов таблицы, либо функции SQL или PL/SQL. В отличие от обычных столбцов, данные виртуального столбца не хранятся постоянно на диске. База данных вычисляет значения виртуального столбца, когда вы запрашиваете его, оценивая выражения или вызывая соответствующую функцию.

Виртуальные столбцы можно использовать как в DDL-, так и в DML-операторах.Допускается определять индексы на этих столбцах и собирать статистику по ним.

Создание виртуального поля таблицы

При спецификации виртуального поля можно использовать конструкцию GENERATED ALWAYS как часть оператора CREATE TABLE, например:

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

В обоих приведенных примерах hrly_rate — виртуальный столбец, генерируемый в результате вычисления выражения sal/2800 для каждой строки. Можно также добавить виртуальный столбец к существующей таблице, выполнив оператор ALTER TABLE,как показано в следующем примере:

Поскольку здесь тип данных для виртуального столбца не специфицирован, Oracle автоматически назначит тип данных на основе типов данных участвующих в выражении столбцов (salary и commision_pct).

Ограничения виртуальных столбцов

На виртуальные столбцы таблицы накладывается ряд ограничений, которые перечислены ниже.

Добавление столбца в таблицу

Добавление столбца в таблицу — очень простая операция. Для этого просто используется команда ALTER TABLE, как показано ниже:

Удаление столбца из таблицы

Удалить существующий столбец из таблицы можно с помощью следующей команды:

Если таблица, из которой удаляется столбец, содержит большой объем данных, можно попросить Oracle просто пометить столбец как неиспользуемый, не пытаясь удалить из него данные. Вы не увидите потом этот столбец в запросах или представлениях, и все зависящие от него объекты, такие как ограничения и индексы, определенные на этом столбце, будут удалены. Для практических целей таким способом “уничтожить” большой столбец можно очень быстро.

Ниже приведен пример, в котором столбцы hiredate и mgr в таблице emp помечаются как неиспользуемые:

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

Если вы полагаете, что большое количество строк в таблице может потенциально переполнить пространство отмены (undo), можете уничтожить столбец с указанием конструкции CHECKPOINT. Это сократит генерацию данных undo при уничтожении столбца, применяя контрольную точку после определенного количества строк. Ниже показан пример, который заставляет базу данных применять контрольную точку всякий раз,когда она удаляет 10 000 строк из таблицы emp:

Переименование столбца таблицы

С помощью команды rename column легко переименовать столбец таблицы. Например, следующая команда переименует столбец retired в таблице emp на non_active.Обратите внимание, что при желании можно также переименовать ограничения столбца.

Совет. Временные файлы, а также файлы данных и журналов повторного выполнения, переименовываются с использованием команды ALTER DATABASE.

Переименование таблицы

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

Удаление всех данных из таблицы

Для удаления всех строк из таблицы можно применить команду TRUNCATE, которая,несмотря на название, на самом деле ничего не усекает и не сокращает — она просто очень быстро удаляет все строки. TRUNCATE — команда DDL, поэтому она не может быть отменена командой ROLLBACK.

Вот пример команды TRUNCATE в действии:

Создание новой таблицы с помощью CTAS

Чтобы создать новую таблицу, которая будет идентичной существующей, или же создать новую таблицу, которая включит только некоторые строки и столбцы из другой таблицы, можно воспользоваться командой CREATE TABLE AS SELECT * FROM.С помощью этой команды легко загрузить часть существующей таблицы в новую таблицу, используя условия where, или же загрузить все данные из старой таблицы в новую,применяя конструкцию SELECT * FROM, как показано в следующем фрагменте кода:

Если таблица содержит миллионы строк, а ваше время слишком ограничено, чтобы использовать метод CTAS, существует пара способов ускорить создание новой таблицы,содержащей большие объемы данных. Если создаваемая таблица должна быть пустой,то время на ее создание беспокоить не должно — она будет создана немедленно. Но если вы загружаете новую таблицу данными из другой таблицы, то можете выиграть от применения опций PARALLEL и NOLOGGING, которые ускоряют загрузку крупных таблиц.

Опция PARALLEL позволяет осуществлять загрузку данных параллельно несколькими процессами, а опция NOLOGGING инструктирует Oracle о том, что протоколировать изменения, происходящие при загрузке в файлы журналов повторного выполнения и сегменты отката (за исключением очень небольшого объема, необходимого для внутренних потребностей), не требуется. Вот пример:

Другой метод, который можно применять для экономии времени во время создания таблицы, состоит в перемещении таблицы из одного табличного пространства в другое. Можете воспользоваться преимуществом операции перемещения, чтобы изменить любые параметры хранения. Ниже приведен пример команды ALTER TABLE. MOVE,которая позволяет быстро перемещать таблицы между табличными пространствами.В данном примере таблица employee перемещается из ее текущего табличного пространства в новое:

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

Воспользуйтесь оператором ALTER TABLE для перевода таблицы в режим “только для чтения”:

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

Перечисленные ниже операции на таблице “только для чтения” выполнять можно:

Вернуть таблицу в нормальное состояние “чтение-запись” можно, указав конструкцию READ WRITE в операторе ALTER TABLE:

Сжатие таблиц

Сжатие данных в таблице, помимо ускорения производительности запросов, позволяет сэкономить дисковое пространство и сократить затраты памяти. Однако сжатие данных в таблице влечет за собой некоторые накладные расходы при загрузке данных или выполнении операций DML. Применять сжатие таблиц можно как в приложениях хранилищ данных, которые предполагают, в первую очередь, операции чтения, так и в системах OLTP, которые включают интенсивные операции DML. На сжатых таблицах можно выполнять операции вставки, удаления и обновления. Чтобы сократить расходы, попробуйте сжать данные, которые в основном используются только для операций чтения и обновляются редко. Хронологические данные и архивные данные являются подходящими кандидатами на помещение в сжатые таблицы.

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

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

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

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

В дополнение к созданию таблицы с включенным сжатием, можно также сжимать существующие данные в таблице с использованием оператора ALTER TABLE. MOVE.При сжатии данных подобным образом база нуждается в установке исключительной блокировки на таблице, что предотвращает все обновления и вставки до тех пор, пока не завершится операция сжатия. В качестве альтернативы можно воспользоваться пакетом DBMS_REDEFINITION для выполнения оперативного переопределения таблицы,чтобы избежать блокировки всей таблицы.

Включение сжатия

Включается сжатие путем указания конструкции COMPRESS в операторе CREATE TABLE или ALTER TABLE. COMPRESS. Если вы изменяете таблицу, то только новые данные будут после этого подвергаться сжатию. Таким образом, таблица может в одно и то же время содержать в себе как сжатые, так и несжатые данные. Отключается сжатие таблицы с использованием оператора ALTER TABLE. UNCOMPRESS. Отключение сжатия не распаковывает уже сжатые ранее данные в таблице; оно лишь гарантирует, что новые данные не будут сжиматься.

На заметку! Применять сжатие таблиц можно как в средах OLTP, так и в средах хранилищ данных.Лучшие результаты можно получить, сжимая все подлежащие только чтению и хронологические данные, которые редко изменяются.

Существует пара вариантов конструкции COMPRESS. Конструкция COMPRESS FOR ALL OPERATIONS используется для включения сжатия для всех операций. Чтобы включить ее только для операций прямых вставок (пакетных вставок), специфицируйте конструкцию COMPRESS FOR DIRECT_LOAD OPERATIONS. Сама конструкция COMPRESS эквивалент на COMPRESS FOR DIRECT_LOAD OPERATIONS.

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

Примеры сжатия таблиц

Следующий пример демонстрирует включение сжатия таблицы для всех операций,что, скорее всего, понадобится при настройке OLTP:

Для только прямых вставок в таблицу можно использовать любой из приведенных ниже операторов:

Как видно из этих примеров, конструкция COMPRESS FOR ALL OPERATIONS — это то,что необходимо применять для сжатия таблиц OLTP. С помощью следующего запроса можно узнать, какие таблицы базы данных являются сжатыми:

Столбец COMPESS_FOR показывает тип сжатия таблицы (для всех операций или только для загрузки в прямом режиме).

Удаление таблиц

Для удаления таблицы служит команда DROP TABLE имя_таблицы. Чтобы иметь возможность удалить таблицу, пользователь должен быть ее владельцем (она должна быть в его схеме) или же обладать привилегией DROP ANY TABLE.

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

Возможность восстановления удаленной таблицы называется средством Flashback Drop (Ретроспектива удаления).

Если вы уверены, что таблица никогда более не понадобится, можете окончательно избавиться от нее, указав опцию PURGE в команде DROP TABLE:

В результате использования приведенной выше команды PURGE таблица emp будет немедленно уничтожена без возможности восстановления!

На заметку! Команда DROP TABLE имя_таблицы PURGE эквивалентна старой команде DROP TABLE имя_таблицы в версиях, предшествовавших Oracle Database 10g.

Когда вы удаляете таблицу, все индексы, относящиеся к ней, также удаляются. Если таблица, которую необходимо удалить, содержит первичные или уникальные ключи,на которые ссылаются во внешних ключах другие таблицы, потребуется включить конструкцию CASCADE в оператор DROP TABLE, чтобы одновременно уничтожить эти ограничения:

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *