---
title: "Перенос экспорта Oracle на другую версию"
description: "Конвертируйте экспорт SQL Developer или SQLcl из Oracle 11g или новее в скрипт, который загружается на Oracle 19c и новее, с теми же таблицами, ключами и данными."
canonical: https://intosql.com/ru/oracle-v-oracle
last_updated: 2026-10-15
---

# Перенос экспорта Oracle на другую версию

Перетащите файл .sql, который пишет Database Export в SQL Developer или SQLcl, с таблицами и командами Insert, и скачайте скрипт, который загружается на Oracle 19c и новее. NUMBER, DATE, TIMESTAMP, LOB, identity и последовательности остаются как есть, XMLTYPE и JSON хранят свой текст в CLOB, и каждое изменение указано в отчете.

[Руководство по миграции Oracle в Oracle](https://intosql.com/docs/migrations/oracle-to-oracle)

[Типы данных из Oracle в Oracle](https://intosql.com/docs/types/oracle-to-oracle)

## Что меняется между файлом и скриптом

Каждая строка - это правило, которое применяет конвертер, и строка отчета, которую он пишет, когда правило что-то меняет в ваших данных.

| В файле | В скрипте | Строка отчета |
| --- | --- | --- |
| BOOLEAN (23ai) | BOOLEAN в 23ai, иначе NUMBER(1) с CHECK на 0 и 1 |  |
| VARCHAR2(n BYTE|CHAR), NVARCHAR2(n), CHAR(n), NCHAR(n), CLOB, NCLOB, LONG | те же типы с длинами в BYTE или CHAR |  |
| VARCHAR2 and NVARCHAR2 past what the target's own types hold | VARCHAR2(4000 CHAR), если каждое значение укладывается в 4000 байт, иначе CLOB | `text_as_lob` |
| NUMBER, NUMBER(p,s), FLOAT(b) | те же типы NUMBER |  |
| INTERVAL YEAR TO MONTH, INTERVAL DAY TO SECOND | те же типы INTERVAL |  |
| DATE, TIMESTAMP(p) | DATE и TIMESTAMP(p), как объявлено |  |
| TIMESTAMP WITH TIME ZONE, TIMESTAMP WITH LOCAL TIME ZONE | те же типы |  |
| JSON (21c), and CLOB holding JSON | JSON в 21c и новее, иначе CLOB |  |
| BLOB, RAW(n), LONG RAW | те же типы; LONG RAW как BLOB |  |
| ROWID, UROWID, XMLTYPE, SDO_GEOMETRY | CLOB с их текстом | `type_replaced` |
| collations that ignore case (BINARY_CI) | точное сравнение | `case_insensitive_collation` |
| identity columns, and a sequence a BEFORE INSERT trigger assigns | GENERATED BY DEFAULT ON NULL AS IDENTITY, продолжается после наибольшего id |  |
| identity columns the target can't count | обычное целое | `counter_dropped` |
| CREATE SEQUENCE | CREATE SEQUENCE с теми же параметрами |  |
| virtual columns (GENERATED ALWAYS AS ... VIRTUAL) | виртуальные столбцы | `stored_as_virtual` |
| virtual columns with functions IntoSQL doesn't write, and the || operator | обычный столбец | `generated_not_translated` |
| defaults with functions IntoSQL doesn't write (SYS_GUID(), ||) | без значения по умолчанию | `default_not_translated` |
| CHECK constraints | переводится |  |
| CHECK constraints with functions IntoSQL doesn't write | не создается | `check_skipped` |
| CHECK constraints that are DISABLE or ENABLE NOVALIDATE | не создается | `check_not_enforced` |
| function-based, bitmap and domain indexes | не создается | `index_skipped` |
| foreign keys | после данных ENABLE NOVALIDATE, затем валидация с предупреждением о строках без родителя |  |
| ON DELETE CASCADE that cascades in a cycle or along a second path | удаляется | `foreign_key_action_unsupported` |
| foreign keys to tables the export doesn't create, and DISABLE or NOVALIDATE ones | не создается | `foreign_key_skipped` |
| names longer than Oracle 12.1 allows | сокращается | `name_shortened` |
| partitioned tables | одна таблица со строками всех секций | `partitions_dropped` |
| several schemas in one export | одна схема, имя таблицы начинается с имени ее схемы | `schemas_merged` |
| NOT NULL columns with values that become NULL | NOT NULL снимается | `not_null_relaxed` |
| views, synonyms, types, packages, procedures, functions and other triggers | перечисляются в отчете | `not_converted_objects` |
| exports without CREATE TABLE (data only) | типы определяются по значениям | `no_schema` |
| expressions in INSERT values other than the ones exports write | NULL | `expression_value` |
| types IntoSQL doesn't know, and object types | CLOB | `unknown_type` |
| dates before year 1 and time zones given as region names | NULL | `date_out_of_range` |
| NaN and Infinity in BINARY_FLOAT and BINARY_DOUBLE | NaN и Infinity сохраняются |  |
| NUL characters in text | сохраняется |  |
| text that isn't valid in its encoding | неверные байты заменяются символом замены | `invalid_utf8_replaced` |
| text decoded twice (Ã±) | копируется как есть | `mojibake_suspected` |

## Загрузите скрипт в Oracle

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

```shell
NLS_LANG=.AL32UTF8 sqlplus -S -L user@//localhost/mydb @oracle.oracle.sql
```

Внешние ключи добавляются ENABLE NOVALIDATE, поэтому новые строки проверяются сразу, а затем выполняется валидация. Если старая строка ссылается на несуществующую строку, скрипт сообщает, какое это ограничение, и оставляет его без валидации, а не прерывается на полпути.

Для большого дампа запускайте SQL*Plus на той же машине, где работает база данных. Скрипт фиксирует каждые 100 строк. Пользователю, который его запускает, нужны CREATE TABLE, CREATE SEQUENCE, CREATE TRIGGER и CREATE PROCEDURE, а также квота в его табличном пространстве.

## Как создать дамп Oracle для лучшего результата

Конвертер читает то, что есть в дампе. Эти параметры сохраняют в нем больше ваших данных:

- В SQL Developer выберите Tools, Database Export, с DDL и форматом данных Insert. SQLcl записывает то же самое с SET SQLFORMAT INSERT.
- Выполните ALTER SESSION SET NLS_DATE_FORMAT = 'SYYYY-MM-DD HH24:MI:SS' перед экспортом: формат по умолчанию записывает даты без времени и века.
- Файл .dmp из exp или expdp двоичный: импортируйте его в базу Oracle, например в Oracle Database Free в Docker, и экспортируйте через SQL Developer.

## Что не конвертируется

Представления, триггеры, процедуры, функции и другие объекты, написанные на собственном языке Oracle, перечислены в отчете по имени и никогда не удаляются молча, чтобы вы могли проверить каждый на той версии Oracle, в которую загружаете, прежде чем создать его заново.

## Вопросы о переносе Oracle между версиями

### Мой дамп загружается на сервер?

Нет. Конвертер работает в вашем браузере и читает дамп с диска по частям, поэтому он никогда не покидает ваш компьютер. Приложение для компьютера и командная строка тоже конвертируют на вашем компьютере.

### Насколько большим может быть дамп?

Конвертер никогда не держит весь дамп в памяти: он читает файл дважды, по диапазонам, и пишет скрипт по ходу чтения. Дампы в несколько гигабайт конвертируются в браузере, в приложении для компьютера и в командной строке.

### Можно ли конвертировать файл .dmp из exp или expdp?

Не напрямую: Data Pump и исходный Export пишут двоичный формат, который читает только Oracle. Импортируйте его в любую базу Oracle (Oracle Database Free работает в Docker) и экспортируйте через Database Export в SQL Developer или SQLcl. Конвертер сообщает об этом, когда получает файл .dmp.

### Из каких версий Oracle может быть экспорт?

Экспорты из SQL Developer и SQLcl с определениями таблиц из DBMS_METADATA, из Oracle 11g и новее. Каждый тестовый экспорт создан в Oracle 21c и 23ai, в американском, немецком и ISO-сеансах, и сверен с источником ячейка за ячейкой.

### Что происходит с NUMBER, DATE и другими типами Oracle?

Они остаются как есть: NUMBER со своей точностью, DATE, TIMESTAMP, интервалы, CHAR и VARCHAR2 со своими длинами, RAW и LOB. XMLTYPE и JSON сохраняют свой текст в CLOB, поэтому скрипт загружается на 19c.

### Сохраняются ли столбцы identity и последовательности?

Да. Столбцы identity и последовательности остаются как есть и продолжаются с того значения, до которого, по данным экспорта, они дошли.

### А пакеты, процедуры и триггеры PL/SQL?

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

### На каких версиях Oracle загружается скрипт?

Oracle 19c и новее. Каждый тестовый экспорт загружается на 21c и 23ai и останавливается на первой ошибке, если что-то пойдет не так.

## Из Oracle

- [Oracle в PostgreSQL](https://intosql.com/ru/oracle-v-postgresql)
- [Oracle в MySQL](https://intosql.com/ru/oracle-v-mysql)
- [Oracle в MariaDB](https://intosql.com/ru/oracle-v-mariadb)
- [Oracle в SQLite](https://intosql.com/ru/oracle-v-sqlite)
- [Oracle в SQL Server](https://intosql.com/ru/oracle-v-sql-server)

## В Oracle

- [MySQL в Oracle](https://intosql.com/ru/mysql-v-oracle)
- [MariaDB в Oracle](https://intosql.com/ru/mariadb-v-oracle)
- [PostgreSQL в Oracle](https://intosql.com/ru/postgresql-v-oracle)
- [SQL Server в Oracle](https://intosql.com/ru/sql-server-v-oracle)
- [SQLite в Oracle](https://intosql.com/ru/sqlite-v-oracle)

## Руководство и все пары

- [Руководство по миграции Oracle в Oracle](https://intosql.com/docs/migrations/oracle-to-oracle)
- [Типы данных из Oracle в Oracle](https://intosql.com/docs/types/oracle-to-oracle)
- [Все пары баз данных](https://intosql.com/ru/migratsiya-bazy-dannykh)
