Import and export SCHEMA in Oracle Database.

Переносим целиком SCHEMA между базами.

  • Выгружаем данные

CREATE OR REPLACE DIRECTORY testdump AS '/dump_dir_on_db';
impdp \"/ as sysdba\" DIRECTORY=testdump schemas=MY_SCHEMA DUMPFILE=MY_TABLESPACE.dmp logfile=MY_TABLESPACE.log version=10.2

DIRECTORY — указать явно, куда сохранять данные.
version — при различных версиях Oracle Database.
as sysdba — можно через my_schema/[email protected]_SID

  • При загрузки данных, мы можем получить ошибку

expdp my_schema/[email protected]_SID DIRECTORY=testdump schemas=MY_SCHEMA DUMPFILE=MY_TABLESPACE.dmp logfile=MY_TABLESPACE.log version=10.2
Failing sql is:
CREATE TABLE "MY_SCHEMA"."MY_TABLE" ("ID" NUMBER(10,0) NOT NULL ENABLE, "MY_DATE" DATE DEFAULT '11631031' NOT NULL ENABLE)
ORA-39083: Object type TABLE:"MY_SCHEMA"."MY_TABLE" failed to create with error:
ORA-01861: literal does not match format string

«MY_DATE» DATE DEFAULT ‘11631031’ — формат даты не соответствует новому серверу.

  • Смотрим какой формат даты у нас сейчас стоит

SELECT value FROM v$nls_parameters WHERE parameter ='NLS_DATE_FORMAT';
DD-MON-RR

  • Изменение формата сессии работает только с imp/exp.  Так как они выгружают данные через клиента, а impdp/expdp только отдаёт команду на выгрузку серверу.

export NLS_DATE_FORMAT=YYYYMMDD
alter session set NLS_DATE_FORMAT = 'YYYYMMDD';

  • Поменять формат даты на лету, тоже не возможено

ALTER SYSTEM SET NLS_DATE_FORMAT='YYYYMMDD' SCOPE=MEMORY;
ERROR at line 1:
ORA-02096: specified initialization parameter is not modifiable with this
option

  • Меняем формат даты

ALTER SYSTEM SET NLS_DATE_FORMAT='YYYYMMDD' SCOPE=SPFILE;

  • Делаем перезагрузку

shutdown immediate;
startup;

  • Если нужно, то чистим данные перед импортом

DROP USER MY_SCHEMA CASCADE;
CREATE user MY_SCHEMA identified by MY_SCHEMA_PASSWORD default tablespace MY_TABLESPACE;
GRANT dba to MY_SCHEMA;

Оставьте комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *