oracle导出与导入遇到的一些问题

1、基本命令:

创建表空间:

 CREATE TABLESPACE tablespacename DATAFILE

    'd:\tablespacename.dbf' SIZE 100m;

 

创建用户:

 create user username

          identified by password

         default tablespace tablespacename

          quota 10M on tablespacename ;

 

授予用户权限:

grant DBA to username;

 

删除用户:

drop user username cascade

 

删除表空间:

drop TABLESPACE tablespacename

 

 

2、删除用户的时候,遇到问题,用户正在使用中,有正在进行中的会话:

--删除用户之前 先锁定用户

alter user username account lock;

 

--找到当前用户全部的会话id(username--必须全部大写!)

SELECT * FROM V$SESSION WHERE USERNAME='username' 

 

--杀掉全部的会话

alter system kill session  '211,35901'

 

--删除用户

drop user username cascade

 

 

3、导出表结构,与导入表结构:

导出oracle数据库备份:

                C:\Documents and Settings\lsq>exp zynbdc/ecology@ningbodianchi file=d:\dianchi.dmp full=y(导出的时候不要这个!!)

 

导入oracle备份文件:

                imp 用户名/密码@数据库 ignore=y file=备份文件 log=D:\DBtest\db_bak\imp.log

                或者 imp username/password file=d:\xxxx full=y

 

 

4、发现问题,导入的表的数量与导出的数据库中的数量不一致:select count(1) from user_tables;

 

原因是:11G中有个新特性,当表无数据时,不分配segment,以节省空间 。因此 也就是 exp的时候,没有导出那些行数为0的表。

 

查看当前用户下面,行数为0的表名:

select table_name from user_tables where NUM_ROWS=0; 

 

解决办法是,设置行数为0的表强制可以导出,设置一个属性,使用下面的语句查询出来全部的表结构,然后在被导出数据库中执行查询结果语句:

select 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0 

 

然后再使用3中的语句,进行导出与导入操作。。。

 

解决方法原文:http://vondon.iteye.com/blog/1316223

 

5、导入的数据库,发现缺少序列,解决办法很简单,到导出数据库中查询全部的序列:

select 'CREATE SEQUENCE '||t.sequence_name||' minvalue '||t.min_value||' maxvalue'||' '||t.max_value||' increment by '||t.increment_by ||' start with '||(t.last_number)||' nocache order nocycle;' from user_sequences t

 

在导入数据库中执行查询结果。。。

  

6、 ORA-01659: unable to allocate MINEXTENTS beyond 1 in tablespace TBS_PSM_B2C

原因是因为数据表空间不够了!

 

--下面的语句查询表空间的地址情况
select tablespace_name,file_id,bytes/1024/1024,file_name 
   from dba_data_files order by file_id; 

 --下面设置原来的用户,新添加一块表空间文件:

alter tablespace TBS_PSM_B2C add datafile '/oracle/TBS_PSM_B2C1.dbf' size 500M;

 

 --查看现在的表空间的使用情况:

SELECT SUM(bytes) / (1024 * 1024) AS free_space, tablespace_name 

FROM dba_free_space 

GROUP BY tablespace_name; 

SELECT a.tablespace_name, 

a.bytes total, 

b.bytes used, 

c.bytes free, 

(b.bytes * 100) / a.bytes "% USED ", 

(c.bytes * 100) / a.bytes "% FREE " 

FROM sys.sm$ts_avail a, sys.sm$ts_used b, sys.sm$ts_free c 

WHERE a.tablespace_name = b.tablespace_name 

AND a.tablespace_name = c.tablespace_name; 

 

 

 

 

你可能感兴趣的:(oracle导出与导入遇到的一些问题)