oracle

Import oracle database 9i to 11

Создание пользоватей

запускаем
sqlplus /nolog
и последовательно даем команды :

Oracle 11 SQL

SET LINESIZE 120;
CONNECT SYSTEM/technic@127.0.0.1;
CREATE TABLESPACE inventory datafile ‘/u01/app/oracle/oradata/XE/inventory.dbf’ SIZE 512M autoextend ON next 128M maxsize 1024M
/
CREATE TABLESPACE inventory datafile ‘/u01/app/oracle/oradata/XE/inventory.dbf’ SIZE 512M autoextend ON next 128M maxsize 1024M
/
SET LINESIZE 120 сделает ширину экрана 120 символов

connect system/technic@127.0.0.1;

подключиться к локальному Oracle от пользователя system с паролем technic
вам вместо technic нужно написать тот пароль который указвался при установке

create tablespace inventory datafile ‘/u01/app/oracle/oradata/XE/inventory.dbf’ size 512M
autoextend on next 128M maxsize 1024M
/

создает табличное пространство с именем inventory, файлом данных /u01/app/oracle/oradata/XE/inventory.dbf
первоначальным размером 512мб и авторасширением по 128мб вплоть до 1024мб

create tablespace alarms datafile ‘/u01/app/oracle/oradata/XE/alarms.dbf’ size 512M autoextend on next 512M maxsize 4096M
/

Oracle 11 SQL

CREATE USER inventory
IDENTIFIED BY «inventory_p»
DEFAULT TABLESPACE inventory
TEMPORARY TABLESPACE TEMP
PROFILE DEFAULT
quota unlimited ON inventory
/

GRANT CREATE SESSION TO inventory
/
GRANT SELECT ANY TABLE TO inventory
/
GRANT SELECT ANY DICTIONARY TO inventory
/
GRANT CREATE TABLE TO inventory
/
GRANT CREATE PROCEDURE TO inventory
/
GRANT CREATE TRIGGER TO inventory
/
GRANT CREATE VIEW TO inventory
/
GRANT CREATE SEQUENCE TO inventory
/
строки 1-7:
создаем пользователя inventory
c паролем inventory_p
в табличном пространстве inventory,
временное табл. пространство TEMP
с профилем DEFAULT
и неограниченной квотой в пространстве inventory

строки 9-24:
выдаем права пользователю inventory
у меня так, а вы свои права внимательно выдавайте,
по принципу минимальных привилегий.
например SELECT ANY TABLE возможно и не нужен.
——————————————————-
аналогично для пользователя alarms:

Oracle 11 SQL
CREATE USER alarms
IDENTIFIED BY «alarms»
DEFAULT TABLESPACE alarms
TEMPORARY TABLESPACE TEMP
PROFILE DEFAULT
quota unlimited ON alarms
/
GRANT CREATE SESSION TO alarms
/
GRANT SELECT ANY TABLE TO alarms
/
GRANT SELECT ANY DICTIONARY TO alarms
/
GRANT CREATE TABLE TO alarms
/
GRANT CREATE PROCEDURE TO alarms
/
GRANT CREATE TRIGGER TO alarms
/
GRANT CREATE VIEW TO alarms
/
GRANT CREATE SEQUENCE TO alarms
/
вводим quit и выходим из sqlplus.

ЭКСПОРТ
существует несколько режимов экспорта.

я использую режим, в котором экспортируются все объекты пользователя
от имени которого запущен экспорт.

exp USERID=inventory/inventory_p@XE FEEDBACK=1000 COMPRESS=Y FILE=inventory.dat LOG=inventory-exp.LOG
exp USERID=alarms/alarms@XE FEEDBACK=10000 COMPRESS=Y FILE=alarms.dat LOG=alarms-exp.LOG
USERID= login/password@dbname — идентификатор подключения
FEEDBACK=1000 выводит на экран подобие индикатора прогресса.
COMPRESS=Y включает сжатие данных в файле
FILE=inventory.dat имя файла, куда записывать данные экспорта
LOG=inventory-exp.LOG имя файла, куда записывать лог экспорта

 

ИМПОРТ

imp userid=inventory/inventory_p@XE file=inventory.dat fromuser=inventory touser=inventory LOG=imp_inventory.LOG
imp userid=alarms/alarms@XE file=alarms.dat fromuser=alarms touser=alarms LOG=imp_alarms.LOG
параметры импорта аналогичны параметрам экспорта, но есть один подводный камень :
поскольку импорт в данном случае запускается от имени определенного пользователя,
то этот пользователь должен существовать, и иметь необходимые прививилегии.
например если при импорте у пользователя inventory не будет привилегии create sequence
импорт не сможет импортировать последовательности, т.к. у пользователя нет соответсвующей
привилегии. В лог будет записана ошибка «недостаточно привилегий».

Поэтому если мы собираемся импортировать данные на только что установленную БД,
то нужно создать пользователей и выдать им привилегии не меньше тех, что были
при экспорте — иначе некоторые объекты могут не быть импортированы по причине недостатка привилегий.

У меня была ситуация, когда приходилось восстанавливать данные после экспериментов с БД.
В этом случае я выполнял экспорт данных,
а перед восстановлением удалял пользователей и их табличные пространства:
Oracle 11 SQL
SET LINESIZE 120;
CONNECT SYSTEM/technic@127.0.0.1;
DROP TABLESPACE inventory including contents AND datafiles;
DROP TABLESPACE alarms including contents AND datafiles;
DROP USER inventory CASCADE;
DROP USER alarms CASCADE;
затем создаем по-новому табличные пространства,
пользователей, и назначаем им привилегии как рассказано в начале статьи.

после этого можно выполнять импорт.

Пролистать наверх