Базы данных Oracle - статьи

         

Копирование данных из одной базы данных в другую


Утилита SQL*Plus предлагает собственные средства копирования данных из одной базы данных в другую и из одной таблицы в другую. Для этого используется команда COPY, которая позволяет:

  • копировать данные с удаленной базы данных в текущую;
  • копировать данные из текущей базы данных на удаленную;
  • копировать данные из одной удаленной базы данных в другую.
  • Примечание

    В общем случае, предполагалось копирование данных между базой данных Oracle и базой данных другого производителя. В среде Oracle для копирования данных можно использовать SQL-операторы (CREATE TABLE AS и INSERT).

    Команда COPY имеет следующий синтаксис:

    <команда COPY> ::=

    COPY <направление копирования> <действие копирования>

    <имя целевой таблицы> [(<имя столбца>{, <имя столбца>})] USING <запрос>

    <направление копирования> ::=

    FROM <база данных>

      | TO <база данных>

      | FROM <база данных> TO <база данных>

    <база данных> ::=

    <имя пользователя>[/<пароль>]@<строка связи>

    <действие копирования> ::=



    APPEND | CREATE | INSERT | REPLACE

    Она копирует данные, возвращаемые запросом, в таблицу в локальной или удаленной базе данных. Поддерживаются только базовые типы данных (CHAR, DATE, LONG, NUMBER, VARCHAR2) и в будущих версиях (после 9.0.1) поддержка этой команды не гарантируется.

    Если в конструкции <база данных> пароль не указан, SQL*Plus запросит его перед выполнением команды.

    Действия копирования описаны в .

    Таблица 12. Действия копирования команды COPY.

    Действие Описание
    APPENDВставляет возвращенные запросом строки в целевую таблицу, если она существует. Если же таблица не существует, она создается.
    CREATEВставляет возвращенные запросом строки в целевую таблицу, предварительно создавая ее. Если же таблица уже существует, возвращается сообщение об ошибке.
    INSERTВставляет возвращенные запросом строки в целевую таблицу. Если таблица не существует, возвращается сообщение об ошибке. В список выбора запроса должно входить по одному столбцу для каждого столбца целевой таблицы.
    REPLACEЗаменяет целевую таблицу и ее содержимое строками, возвращенными запросом. Если целевая таблица не существует, она создается. В противном случае, существующая таблица удаляется и вместо нее создается новая, содержащая скопированные данные.
    <
    Копировать данные можно не во все столбцы (тогда они должны быть совместимы по количеству и типам со списком выбора запроса), а только в указанные по именам. Если имя столбца содержит символы нижнего регистра или пробелы, его необходимо брать в двойные кавычки. Если список столбцов не задан, а целевую таблицу необходимо создавать, то их имена и типы будут такими же, как и в исходных таблицах.

    По умолчанию, утилита SQL*Plus выполняет фиксацию транзакции после успешного завершения команды COPY. Если выполнить команду , где n - положительное целое число, фиксация будет выполняться после каждого n-го пакета записей. Размер пакета задается с помощью команды .

    Вся команда COPY должна поместиться на одной строке. Если необходимо перенести команду на следующую строку в конце строки необходимо ввести дефис (-).

    Рассмотрим простой пример копирования таблицы:

    SQL> copy from scott/tiger@training -

    > create emp10 -

    > using select * from emp where deptno = 10;

    Размер массива выборки/привязки равен 15. (arraysize равен 15) Фиксация по завершении. (copycommit равен 0) Максимальная длина равна 80. (long равна 80) Таблица EMP10 создана.

    3 строк выбрано из scott@training. 3 строк вставлено в EMP10. 3 строк зафиксировано в EMP10 по соединению DEFAULT HOST.

    SQL> set linesize 100 SQL> select * from emp10;

    EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ------ --------- ------- -------- ---------- ------ ------ 7782 CLARK MANAGER 7839 09.06.81 2450 10 7839 KING PRESIDENT 17.11.81 5000 10 7934 MILLER CLERK 7782 23.01.82 1300 10


    Содержание раздела