$ exp help=y
$ imp help=y
一、导出工具exp
1 它是操作系统下一个可执行的文件 存放目录/ORACLE_HOME/bin
exp导出工具将数据库中数据备份压缩成一个二进制系统文件.可以在不同OS间迁移
它有三种模式:
a. 用户模式: 导出用户所有对象以及对象中的数据;
b. 表模式: 导出用户所有表或者指定的表;
c. 整个数据库: 导出数据库中所有对象。
二、导入工具imp
它是操作系统下一个可执行的文件 存放目录/ORACLE_HOME/bin
imp导入工具将EXP形成的二进制系统文件导入到数据库中.
它有三种模式:
a. 用户模式: 导出用户所有对象以及对象中的数据;
b. 表模式: 导出用户所有表或者指定的表;
c. 整个数据库: 导出数据库中所有对象。
只有拥有IMP_FULL_DATABASE和DBA权限的用户才能做整个数据库导入
如果有多个用户的话,可以用逗号隔开
$imp testa/testa fromuser =testa touser =testa file=/home/oracle/testa.dmp
注意:
要保证导入的用户的表空间的名称和导出的表空间名称是一样的
导入前最好保证要导入用户里面没有重复的对象和数据,要不导入会不成功。
3、导出和导入某个用户下的某张表
[oracle@developserver ~]$ exp test/test file=/home/oracle/Desktop/t_area.dmp log=t_area.log tables=t_area
[oracle@developserver ~]$ imp file=/home/oracle/Desktop/t_area.dmp tables=t_area commit=y ignore=y
注意导入之前最好保证该用户没有相关的表和数据
exp \"sys/aa555abcdA@uidpos as sysdba\" file=/home/oracle/u.dmp full=y compress=y
方法3
[oracle@uid5a8 ~]$ exp "'/@实例名 as sysdba'"
Enter array fetch buffer size: 4096 >
Export file: expdat.dmp >
(1)E(ntire database), (2)U(sers), or (3)T(ables): (2)U > 1
Export grants (yes/no): yes >
Export table data (yes/no): yes >
Compress extents (yes/no): yes >
8、解决使用oracle11g无法导出(exp/imp)空表的问题
解决方法,原理就是往所有的空表中分配空间:
在 sqlplus 中执行下面的程序
--查询当前用户下的所有空表,并生成空表的插入语句脚本
create or replace
procedure generate_tab_segement is
v_table NVARCHAR2(200);
v_sql VARCHAR2(200);
v_q NUMBER;
v_char_value NVARCHAR2(10);
v_varchar2_value NVARCHAR2(10);
v_number_value NVARCHAR2(10);
v_date_value NVARCHAR2(10);
v_add_value NVARCHAR2(10);
v_separate_value NVARCHAR2(10);
v_insert_sql NVARCHAR2(4000);
col_num NVARCHAR2(200);
tb_name NVARCHAR2(200);
TYPE TCUR IS REF CURSOR;
c2 TCUR;
begin
FOR r1 IN (SELECT table_name tn FROM tabs) LOOP
BEGIN
v_table :=r1.tn;
v_sql := 'SELECT count(*) as q FROM ' || v_table || ' where rownum = 1';
v_char_value := '''1''';
v_varchar2_value := '''1''';
v_number_value := '1';
v_date_value := 'sysdate';
v_separate_value := ',';
v_insert_sql := 'insert into ';
v_add_value :='null';
OPEN c2 FOR v_sql ;
LOOP
FETCH c2 INTO v_q;
EXIT WHEN c2%NOTFOUND;
--DBMS_OUTPUT.PUT_LINE(v_table);
--构造插入行
FOR user_null_table IN (select to_char(count(*)) as col_num,
t.TABLE_NAME as tb_name
from user_tab_columns t
where t.TABLE_NAME= v_table
group by t.TABLE_NAME) LOOP
BEGIN
col_num := user_null_table.col_num;
tb_name := user_null_table.tb_name;
v_insert_sql := 'insert into ';
v_insert_sql := v_insert_sql || tb_name || ' values(' ;
FOR user_tab_cols IN (select * from user_tab_columns t where t.TABLE_NAME = tb_name ORDER BY t.COLUMN_ID) LOOP
BEGIN
v_add_value :='null';
IF user_tab_cols.COLUMN_ID = col_num THEN
v_separate_value := '';
else
v_separate_value := ',';
END IF;
if user_tab_cols.DATA_TYPE = 'CHAR' THEN
v_add_value := v_char_value;
END if;
IF user_tab_cols.DATA_TYPE = 'VARCHAR2' THEN
v_add_value := v_varchar2_value;
END if;
IF user_tab_cols.DATA_TYPE = 'NVARCHAR2' THEN
v_add_value := v_varchar2_value;
END if;
IF user_tab_cols.DATA_TYPE = 'NUMBER' THEN
v_add_value := v_number_value;
END if;
IF user_tab_cols.DATA_TYPE = 'LONG' THEN
v_add_value := v_number_value;
END if;
IF user_tab_cols.DATA_TYPE = 'DATE' THEN
v_add_value := v_date_value;
END IF;
IF substr(user_tab_cols.DATA_TYPE,0,9) = 'TIMESTAMP' THEN
v_add_value := v_date_value;
END IF;
v_insert_sql := v_insert_sql || v_add_value ||
v_separate_value;
end;
END LOOP;
v_insert_sql := v_insert_sql || ');';
DBMS_OUTPUT.PUT_LINE(v_insert_sql);
end;
END LOOP;
end if;
END LOOP;
CLOSE c2;
end;
END LOOP;
end generate_tab_segement;
/
然后用图形界面工具去调用该存储过程,让存储过程语句执行一次,并起作用,不知道什么原因有些表的数据没有插入进去,为了保证不会出错,大家可以将执行完显示的SQL语句在执行一次就绝对不会错误。
select 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0
把语句复制出来拿到工具中,连接相应的实例然后单独运行
方法3:默认给任何空表都分配空间
设置deferred_segment_creation 参数
SQL> alter system set deferred_segment_creation=false;
SQL> show parameter deferred_segment_creation
该参数值默认是TRUE,当改为FALSE时,无论是空表还是非空表,都分配segment。
需注意的是:该值设置后对以前导入的空表不产生作用,仍不能导出,只能对后面新增的表产生作用。如需导出之前的空表,只能用第一种方法。
在使用EXP工具进行导出备份或迁移数据的时候有时会报很多的
"EXP-00091: Exporting questionable statistics"错误,
具体的现象和处理方法请观看……
1.问题现象
$ exp test/test file=test.dmf log=test.log
……忽略……
EXP-00091: Exporting questionable statistics.
……忽略……
2.处理方法
指定Linux系统的NLS_LANG环境变量为数据库的数据集
1)查询数据库的字符集(方法很多只用一种)
SQL> select userenv('language') from dual;
USERENV('LANGUAGE')
----------------------------------------------------
AMERICAN_AMERICA.AL32UTF8
2)设置Linux操作系统的NLS_LANG环境变量
$export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
Window系统的环境变量的修改方法是:
C:\>set NLS_LANG= AMERICAN_AMERICA.AL32UTF8
3.OK,处理完成,在进行EXP导出操作就不会报这个错误了