2015-05-20 2 views
6

Мне недавно нужно было импортировать .dmp в нового пользователя, которого я создал. Я также создал новую табличную для пользователя с помощью следующей команды:Oracle Tablespaces maxsize "unlimited" не совсем неограниченно

create tablespace my_tablespace 
datafile 'C:\My\Oracle\Install\DataFile01.dbf' size 10M 
autoextend on 
next 512K 
maxsize unlimited; 

В то время как импорт был запущен, я получил ошибку:

ORA-01652 Unable to extend my_tablespace segment by in tablespace 

Когда я просмотрел файлы данных в таблице dba_data_files, Я заметил, что maxsize составляет около 34 гб. Поскольку я знал общий размер базы данных, мне удалось импортировать .dmp без каких-либо проблем после добавления нескольких файлов данных в табличное пространство.

Почему мне нужно добавить несколько файлов данных в табличное пространство, когда первый, который я добавил, был настроен на автоматическое увеличение до неограниченного размера? Почему максимальный размер 34gb, а не неограниченный? Есть ли твердая шапка 34gb?

+3

Что такое размер блока данных БД? A (smallfile tablespace) [файл данных может содержать только 2^22 блока) (http://docs.oracle.com/cd/E11882_01/server.112/e40402/limits002.htm#REFRN0042), поэтому, я думаю, вы попадаете этот лимит с блоками 8kb? –

+0

Я считаю, что я нажимаю этот предел. Я (по-видимому, ошибочно) предположил, что указание «неограниченное» будет расширяться до тех пор, пока ОС не закончится из пространства HD. Для уточнения, что вы говорите, что есть твердая шапка? – spots

+1

Да; но он зависит от размера блока - количество блоков ограничено, это не является прямым ограничением по размеру. Указанный размер является мягким пределом. Как упоминает Джон, вы можете указать несколько файлов данных, чьи мягкие ограничения больше, чем доступное дисковое пространство. И помните, что Oracle любит отделять логическое от физического - тот же логический DDL имеет другой физический предел для двух систем с разными блоками. –

ответ

7

Как вы обнаружили, и, как указал Алекс Пул, существуют ограничения на размер отдельных файлов данных. Малые файлы ограничены 128 ГБ, а большие файлы ограничены 128 ТБ, в зависимости от размера вашего блока. (Но вы не хотите изменять размер блока только для увеличения этих ограничений.) Ограничение размера в команде create tablespace существует только там, где вы хотите еще больше ограничить размер.

Это может быть немного запутанным. Вы, вероятно, не заботитесь об управлении файлами и хотите, чтобы он «просто работал». Управление хранения базы всегда собирается быть раздражающим, но вот некоторые вещи, которые вы можете сделать:

  1. Держите ваши табличные к минимуму. Там некоторые редкие случаи, когда полезно разбивать данные на множество небольших табличных пространств. Но эти редкие преимущества обычно превосходят боль, которую вы испытаете при управлении всеми этими объектами.
  2. Получите, как всегда, добавление нескольких файлов данных. Если вы используете ASM (который я бы не рекомендовал, если это локальный экземпляр), то при добавлении файлов данных почти нет причин «безумно». Даже если вы не используете ASM, вы все равно будете немного сумасшедшим. Пока вы устанавливаете минимальный размер оригинала, вы не близки к пределу MAX_FILES, и вы не имеете дело с одним из специальных табличных пространств, таких как UNDO и TEMP, нет штрафа за добавление большего количества файлов. Не беспокойтесь о том, чтобы выделить больше потенциального пространства, чем содержится в вашем жестком диске. Это приводит к тому, что некоторые администраторы баз данных сумасшедшие, но вы должны взвесить вероятность выхода из OS-пространства по сравнению с возможностью выхода из пространства в сто файлов. (В любом случае ваша заявка выйдет из строя.)
  3. Задайте параметр RESUMABLE_TIMEOUT. Затем инструкции SQL будут приостановлены, могут генерировать предупреждение, будут перечислены в DBA_RESUMABLE и будут терпеливо ждать большего места. Это очень полезно в хранилищах данных.

Почему она называется "UNLIMITED"?

Я бы предположил, что ключевое слово UNLIMITED является исторической ошибкой. Oracle имеет такое же ограничение размера файла с at least version 7 и, возможно, раньше. Oracle 7 был выпущен в 1992 году, когда 1GB hard drive cost $1995. Возможно, каждая операционная система в то время имела ограничение размера файла ниже этого. Возможно, тогда было разумно думать о 128 ГБ как о «неограниченном».

+0

В моем случае мне не нужно беспокоиться о том, чтобы бежать из пространства после его импорта, поскольку эта база данных доступна только для чтения. Что я до сих пор смущен, почему maxsize принимает «неограниченный», когда он не является неограниченным. Например, если я создаю первоначально небольшую базу данных в «неограниченном» табличном пространстве (используя созданный табличный вид cmd в моем примере), смогу ли я в конечном итоге получить ORA-01652, когда база данных вырастет до 34 ГБ? Из ваших предложений я должен создать дополнительный файл данных для дополнительного пространства. HD-пространство на самом деле не проблема для меня, то, что я хотел бы предотвратить, является неожиданным ORA-01652s. – spots

+1

@spots - Я думаю, что Джон говорит, что вместо того, чтобы создавать дополнительный файл данных, когда вы нажимаете или приближаете вас к пределу 32 ГБ, вы создаете 10 (или 100 или какие-либо) файлы данных при первом создании табличного пространства; они все вырастут, и вы не увидите проблемы, пока они не будут заполнены, когда вы доберетесь до 320 ГБ (или 3200 ГБ, ...). –

+0

@spots «неограниченное» ключевое слово относится только к выражению autoextend. это означает, что файлы данных могут расти до тех пор, пока они не достигнут своих физических пределов. Большинство производственных систем в любом случае не используют предложение autextend (по некоторым веским причинам). Например, вы можете столкнуться с серьезными проблемами, когда размер файла данных достигает предела ОС или когда файлы данных занимают 100% файловой системы, а Oracle внезапно не может расширить размер управляющего файла. Когда это случается, это может быть нетривиально для восстановления базы данных. – ibre5041