Копирование таблиц с помощью команды COPY

В больших таблицах применение приема CREATE TABLE AS SELECT (CTAS) чревато возникновением неприятностей, поскольку Oracle не выполняет фиксации транзакций между операциями вставки и в это время в сегментах отката может закончиться место.Кроме того, эта техника позволяет использовать только типы данных, отличные от LONG.С помощью команды COPY данные из запроса можно копировать в таблицу, находящуюся в той же самой или в удаленной базе данных. Команда COPY позволяет копировать данные всех типов и избегать многих проблем CTAS, поскольку сама предусматривает выполнение фиксации во время копирования данных из исходной таблицы.Синтаксис SQL-команды COPY выглядит следующим образом:

SQL> COPY
использование: COPY FROM <db> TO <db> <opt> <table> { (<cols>) } USING <sel>
<db> : строка базы данных, например: hr/ваш_пароль@d:chicago-mktg
<opt> : одно из следующих ключевых слов: APPEND, CREATE, INSERT или REPLACE
<table> : имя целевой таблицы
<cols> : разделенный запятыми перечень псевдонимов целевых столбцов
<sel> : любой действительный SQL-оператор SELECT
SQL>

При отсутствии конструкции FROM или TO используется текущее соединение SQL*Plus. Ключевую роль играет параметр opt, на месте которого может находиться одно из перечисленных ниже ключевых слов.

  • APPEND. Указывает, что требуется вставить записи в целевую таблицу и создать эту таблицу, если таковой не существует.
  • CREATE. Указывает, что требуется создать целевую таблицу и вставить строки в нее.
  • INSERT. Указывает, что требуется вставить строки в существующую таблицу.
  • REPLACE. Указывает, что требуется удалить существующую таблицу, воссоздать ее заново и затем загрузить данные в нее.

Конструкция USING <sel> позволяет указывать в запросе те строки и столбцы, которые требуется скопировать из исходной таблицы.


Совет. Если в таблице содержится столбец типа LONG, использовать для ее копирования метод CTAS нельзя, а команду COPY — можно.


В листинге 4.19 показан пример применения команды COPY. Обратите внимание на то, что символ дефиса (-) служит символом продолжения и позволяет разбивать длинные SQL-операторы на несколько строк. Обязательно удостоверьтесь в том, что не забыли поставить символ продолжения, и ни в коем случае не нажимайте клавишу <Enter> после ввода первой строки!


 

SQL> COPY FROM sysadm/sysadm1@finance1-
> CREATE test01 -
> USING SELECT * FROM employee;
Array fetch/bind size is 15. (arraysize is 15)
Will commit when done. (copycommit is 0)
Maximum long size is 80. (long is 80)
Table TEST01 created.
4954 rows selected from sysadm@finance1
4954 rows inserted into TEST01.
4954 rows committed into TEST01 at DEFAULT HOST connection.
SQL>

При необходимости можно повысить скорость выполнения команды COPY за счет увеличения значений таких параметров SQL*Plus, как ARRAYSIZE, COPYCOMMIT и LONG.

Копирование данных из одной таблицы в другую на одном и том же сервере обычно происходит быстрее в случае применения метода CREATE TABLE AS SELECT, а не команды COPY, потому что команда COPY подразумевает копирование данных сначала с сервера в клиентский интерфейс SQL*Plus и только потом снова в базу данных. Очевидно,что это увеличивает накладные расходы и отнимает больше времени, чем копирование данных в рамках одного и того же сервера.

Вас заинтересует / Intresting for you:

Oracle и непроцедурный доступ ...
Oracle и непроцедурный доступ ... 8522 просмотров Antoni Tue, 21 Nov 2017, 13:32:50
Видеокурс по администрированию...
Видеокурс по администрированию... 10719 просмотров Илья Дергунов Mon, 14 May 2018, 05:08:47
СУБД Oracle: обзор характерист...
СУБД Oracle: обзор характерист... 15813 просмотров Antoni Fri, 24 Nov 2017, 07:35:05
Работа с запросами Approximate...
Работа с запросами Approximate... 2289 просмотров Андрей Васенин Mon, 29 Oct 2018, 06:40:46
Войдите чтобы комментировать