Каталог статей
Меню сайта


Форма входа


Категории раздела
Oracle DB [72]
Materials concerning Oracle database
Howto [24]
Все про Oracle [65]
Разработка на SQL и PL/SQL для Oracle, анализ работы базы
Построение Web-интерфейса: все что касается JSF, ADF и AJAX [9]
Разное [19]
Solaris [46]
Что касается администрирования Solaris
Linux [29]
Заметки по настройке Linux
AIX [1]
AIX, настройка Oracle на AIX
Java [15]
Cryptography [10]
Windows [1]
Java [35]
PostgreSQL [2]


Поиск


Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz


  • Статистика

    Онлайн всего: 1
    Гостей: 1
    Пользователей: 0


    Приветствую Вас, Гость · RSS 19.05.2024, 05:39
    Главная » Статьи » Howto

    DBMS_REDEFINITION: Последовательность действий при переопределении таблицы
    1. Проверяем, нет ли противопоказаний для переопределения таблицы

    BEGIN
    DBMS_REDEFINITION.CAN_REDEF_TABLE(
    uname => 'MYUSER',
    tname => 'FILES',
    options_flag => DBMS_REDEFINITION.CONS_USE_ROWID);
    END; 
    2. Создаем промежуточную таблицу по мотивам имеющейся таблицы, которую нужно переопределить, с новыми параметрами

    create table MYUSER.int_files
    tablespace tbs_new
    as select * from myuser.files
    where
    rownum = 0
    Индексы и всякие констрейнты создавать не обязательно. Их потом можно все скопом перетащить.

    alter table myuser.INT_FILES
    add constraint INT_FILES_UK1 unique (FILE_NAME, FILE_VERSION)
    using index
    tablespace tbs_new
    3. Выполняем действия, в результате которых параметры исходной таблицы поменяются (в данном случае, она переползет в другой тэйблспейс).
    Во время этой операции таблица практически все время будет доступна для DML, кроме короткой блокировки.

    BEGIN
    DBMS_REDEFINITION.START_REDEF_TABLE(
    uname => 'MYUSER',
    orig_table => 'FILES',
    int_table => 'INT_FILES',
    col_mapping => NULL,
    options_flag => DBMS_REDEFINITION.CONS_USE_ROWID);
    END;

    BEGIN
    DBMS_REDEFINITION.SYNC_INTERIM_TABLE(
    uname => 'MYUSER',
    orig_table => 'FILES',
    int_table => 'INT_FILES');
    END;

    BEGIN
    DBMS_REDEFINITION.FINISH_REDEF_TABLE(
    uname => 'MYUSER',
    orig_table => 'FILES',
    int_table => 'INT_FILES');
    END;
     
    4. Промежуточную таблицу можно удалить.
     
    Категория: Howto | Добавил: basil (04.08.2011)
    Просмотров: 1867 | Рейтинг: 0.0/0
    Всего комментариев: 0
    Имя *:
    Email *:
    Код *:
    Бесплатный конструктор сайтов - uCoz