Переносим целиком 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;