linux oracle 11g安装

查看具体的命令模式

$ 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/exp) 某个用户表下面的所有数据


1、导出某个用户的所有对象
$ exp testa/testa@orcl owner= testa file=/home/oracle/testa.dmp
如果有多个用户的话,可以用逗号隔开
exp testa/testa@orcl owner=(testa,testb) file=/home/oracle/testa.dmp
2、导入某个用户的数据
$imp testa/testa fromuser =testa touser =testa file=/home/oracle/testa.dmp
注意:
注:如果在导入时有的表已经存在,然后它就报错,对该表就不进行导入。在后面加上ignore=y 就可以了。
要保证导入的用户的表空间的名称和导出的表空间名称是一样的
导入前最好保证要导入用户里面没有重复的对象和数据,要不导入会不成功。

3、导出和导入某个用户下的某张表
[oracle@developserver ~]$  exp test/test file=/home/oracle/Desktop/t_area.dmp log=t_area.log tables=t_area
4、导入某个用户下的某张表
[oracle@developserver ~]$ imp  file=/home/oracle/Desktop/t_area.dmp tables=t_area commit=y ignore=y

注意导入之前最好保证该用户没有相关的表和数据
5、怎样用SYS用户执行EXP操作

方法1
exp \'sys/ab123489 as sysdba\' file=/home/oracle/s.dmp full=y compress=y
方法2
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)空表的问题
 11G中有个新特性,当表无数据时,不分配segment,以节省空间,这样就会没有导出数据 
解决方法,原理就是往所有的空表中分配空间:
方法1:
sqlplus 中执行下面的程序
sqlplus / as sysdba
--查询当前用户下的所有空表,并生成空表的插入语句脚本
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;
                IF v_q = 0 THEN
                    --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语句在执行一次就绝对不会错误。
然后将执行完的结果复制一次,在用图形界面执行一次,就可以了
方法2:
在图形工具中,如sqldeveloper,pl/sqldeveloper用以下这句查找空表
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。
需注意的是:该值设置后对以前导入的空表不产生作用,仍不能导出,只能对后面新增的表产生作用。如需导出之前的空表,只能用第一种方法。
9、EXP错误提示,EXP-00091: Exporting questionable statistics 问题处理方法 

在使用EXP工具进行导出备份或迁移数据的时候有时会报很多的

"EXP-00091: Exporting questionable statistics"错误,

具体的现象和处理方法请观看……


1.问题现象
exp test/test file=test.dmf log=test.log

……忽略……

EXP-00091: Exporting questionable statistics.

. . exporting table                        SNP_TXT       6 rows exported
……忽略……

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导出操作就不会报这个错误了




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

福海鑫森

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值