Oracle 导出导入

CMD 下执行下面的导出,导入:

  1. 导出:exp sys/sys@127.0.0.1:1521/orcl file=e:\mydb1_20180712.dmp owner=mydb1

  2. 导入:imp sys/sys@127.0.0.1:1521/orcl file=e:\mydb1_20180712_03.dmp fromuser=mydb1 touser=mydb1 ignore=yes

导入注意事项:

  1. 导入时目标数据库必须要有对应的表空间,如: mydb1(表空间)、mydb1_temp(临时空间)、common_data(公共表空间),名称根据实际情况确定,没有先创建:
    -- 查询表空间:
    select * from dba_data_files;
    -- 创建表空间
    create temporary tablespace mydb1_temp
    tempfile 'E:/app/Oracle/product/data/sys/mydb1_temp01.dbf'
    size 32m
    autoextend on
    next 32m maxsize 2048m
    extent management local;

-- 创建表空间
create tablespace mydb1
logging
datafile 'E:/app/Oracle/product/data/sys/mydb1_data.dbf'
size 32m
autoextend on
next 32m maxsize 2048m
extent management local;

-- 创建公共表空间
create tablespace common_data
logging
datafile 'E:/app/Oracle/product/data/sys/common_data.dbf'
size 32m
autoextend on
next 32m maxsize 2048m
extent management local;

2.oracle 创建用户,导入时目标数据库必须要有对应的用户:mydb1,没有先创建:

create user mydb1 identified by mydb1
default tablespace mydb1
temporary tablespace mydb1_temp
profile DEFAULT
quota unlimited on mydb1;
-- Grant/Revoke object privileges
-- Grant/Revoke role privileges
grant connect to mydb1;
grant dba to mydb1;
grant resource to mydb1;
-- Grant/Revoke system privileges
grant unlimited tablespace to mydb1;

3.oracle 删除用户:
全量导入时,为防止数据有冲突,可以先断开所有连接,删除即将导入的用户(如:mydb1),然后重建用户:
(1)删除前查看用户的连接状况:
select saddr, 'alter system kill session'||''''||sid||','||serial#||''''||';' kill_session,paddr,username,status
from v$session where username is not null and status='INACTIVE' and username='mydb1';

(2)执行 kill_session,如:
alter system kill session '105,1398';

(3)删除用户

drop user mydb1 cascade;

(4)如果在 drop 后还提示 ORA-01940: 无法删除当前已链接的用户,说明还有连接的 session(比如 plsql,或各种程序),必须都关闭,可以通过查看 session 的状态来确定该 session 是否被 kill 了,如下语句查看:

select saddr,sid,serial#,paddr,username,status from v$session where username is not null;
status 为要删除用户的 session 状态,如果还为 inactive,说明没有被 kill 掉,或各种连接程序没有关闭。