logo

Создание копии структуры таблицы в Oracle без данных

Быстрый ответ

Чтобы создать структурный дубликат original_table в форме новой таблицы new_table, не копируя данные, воспользуйтесь командой CREATE TABLE new_table AS SELECT * FROM original_table WHERE 1=0;. Так вы скопируете схему таблицы точно в том виде, в котором она существует.

Понимание ограничений

Использование запроса CREATE TABLE AS SELECT имеет свои особенности:

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

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

Визуализация

Возьмём для примера книжную полку 📚, на которой расположены книги разных жанров:

Markdown
Скопировать код
Книжная полка (📚): [Роман 📖, Кулинарная книга 🍳, Атлас 🗺️, Словарь 📕]

Вы хотите создать новую книгу (📓), структурно идентичную уже имеющемуся оригиналу, но с пустыми страницами для новых записей:

Markdown
Скопировать код
Оригинальная книга (📖): [Глава 1, Глава 2, Глава 3]
Новая книга (📓): [Глава 1📄, Глава 2📄, Глава 3📄]

📖 ➡️ 📝 ➡️ 📓

Markdown
Скопировать код
# Аналогия с 'CREATE TABLE new_table AS SELECT * FROM original_table WHERE 1=0;'
# Структура сохранена, содержание не перенесено.

Получаем структурно идентичный оригиналу объект без содержания. 🎩✨

Продвинутые шаги

Клонирование таблицы — это не только копирование её структуры. Важно учесть множество деталей:

Создание индексов

Важные для производительности индексы можно вос создать посредством команды CREATE INDEX после создания новой таблицы.

Скрипты для триггеров и последовательностей

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

Работа с ограничениями

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

Управление партициями на профессиональном уровне

При работе с партициями таблиц потребуется сложный SQL-скрипт, который часто предполагает ручное создание каждой партиции в рамках модифицированного запроса CREATE TABLE.

Полезные материалы

  1. CREATE TABLE — официальная документация Oracle, основной источник знаний о создании таблиц.
  2. SQL FAQ – Oracle FAQ — полезные советы и ответы на часто задаваемые вопросы о клонировании таблиц в Oracle.
  3. Ask TOM — раздел сайта Oracle с разнообразными способами клонирования таблиц.
  4. Oracle / PLSQL: CREATE TABLE Statement — руководство по использованию запроса CREATE TABLE AS SELECT (CTAS) в Oracle PL/SQL.
  5. SQL CREATE TABLE Statement — страничка на W3Schools с кратким обзором синтаксиса для SQL CREATE TABLE.