oracle导出导入数据库

  • 一.给空表分配空间:

这一步必定要作,不然空表不能导出.sql

首先链接你要导出的库,在该库上执行如下sql:数据库

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

执行结果是一连串的sql语句,相似alter table tablename allocate extent;选择全部结果,复制,在库里统一执行一下.oracle

我在网上看好多人要在后面加一句 where num_rows = 0,意思我懂,就是只对数据条数为0的表生成要执行的sql语句,可是这样彷佛仍然会有漏的表,我使用spa

select table_name,num_rows from  user_tables 在库里执行一下发现num_rows的值有的为null,不是0,反正看须要选择加不加吧日志

固然后面不加where条件的话,就把全部的表都设置了一遍,事实上有数据的表时不须要设置的,若是不想这样,就加个where num_rows = 0  or num_rows is null,这样应该就没有遗漏的表了.code

  • 二.导出dmp文件

在cmd中执行一下命令导出dmp文件:blog

exp 用户名/密码@监听名 file=E:\数据库名.dmp owner=(用户名) log=E:\日志名.log indexes=n statistics=none      

 这里加了owner表示将该用户下全部表导出cmd

注意@后的监听名,通常你的oracle安装目录下有个tnsnames.ora文件,玩过pl/sql应该知道,常常要改它的,在这个文件加入监听配置io

 通过一段时间后控制台会提示导出成功,取决于数据库大小.table

  • 三.建立表空间
  • 1.先查看以往数据库对应的文件路径在哪里:

SELECT t1.name, t2.name FROM v$tablespace t1, v$datafile t2 WHERE t1.ts#=t2.ts# order by t1.name;

注意在本地执行该命令的用户需拥有dba权限,不然会提示该表不存在,能够登陆sqlplus,使用 conn / as sysdba登陆,而后GRANT "DBA" TO 用户; 或者直接在sysdba中执行该sql,查看结果.

  • 2.建立表空间
create tablespace mytisjs  
 
datafile 'E:\APP\ADMINISTRATOR\ORADATA\ORCL\mytisjs.dbf' (mytisjs.dbf前面的路径为你以前查询出来的路径,其实这里路径能够写任何位置,只是和以前的数据库统一存放在同一位置比较好)
 
size 2000m  
 
autoextend on  
 
next 500m maxsize 10096m  
 
extent management local; 
  •  3.建立临时表空间
create temporary tablespace mytisjs_temp  
 
tempfile 'E:\APP\ADMINISTRATOR\ORADATA\ORCL\mytisjs_temp.dbf' 
 
size 500m  
 
autoextend on  
 
next 500m maxsize 2048m  
 
extent management local;
  • 4.建立用户
CREATE USER test IDENTIFIED BY test
DEFAULT TABLESPACE "MYTISJS"   (指定表空间为刚刚建立的表空间,注意表空间名称要大写)
TEMPORARY TABLESPACE "MYTISJS_TEMP";
  • 5.授予权限
GRANT "DBA" TO test; 
GRANT "CONNECT" TO test; 
GRANT "RESOURCE" TO test; 
  • 四.导入dmp文件

用imp命令导入

imp test/test@mytisjs file=E:\tisjs.dmp log=E:\tisjs.log full=y ignore=y

其中test/test是用户名/密码 mytisjs和以前同样,在tnsnames.ora文件加入对应的配置,若是我要导入本地,就HOST就为localhost,file后的路径就是你以前导出的dmp文件路径,log也同样.

等一段时间就会提示导入成功,数据库就可使用了.

若是dmp文件在本地,导入到本地数据库,直接imp test/test file=E:\tisjs.dmp log=E:\tisjs.log full=y ignore=y就能够了,不用配置监听也能够

 

 

  • 五.表空间相关说明:

 

  • 1.查看数据库的表空间,包括临时表空间
    select * from (  
    Select a.tablespace_name,  
    to_char(a.bytes/1024/1024,'99,999.999') total_bytes,  
    to_char(b.bytes/1024/1024,'99,999.999') free_bytes,  
    to_char(a.bytes/1024/1024 - b.bytes/1024/1024,'99,999.999') use_bytes,  
    to_char((1 - b.bytes/a.bytes)*100,'99.99') || '%' use  
    from (select tablespace_name,  
    sum(bytes) bytes  
    from dba_data_files  
    group by tablespace_name) a,  
    (select tablespace_name,  
    sum(bytes) bytes  
    from dba_free_space  
    group by tablespace_name) b  
    where a.tablespace_name = b.tablespace_name  
    union all  
    select c.tablespace_name,  
    to_char(c.bytes/1024/1024,'99,999.999') total_bytes,  
    to_char( (c.bytes-d.bytes_used)/1024/1024,'99,999.999') free_bytes,  
    to_char(d.bytes_used/1024/1024,'99,999.999') use_bytes,  
    to_char(d.bytes_used*100/c.bytes,'99.99') || '%' use  
    from  
    (select tablespace_name,sum(bytes) bytes  
    from dba_temp_files group by tablespace_name) c,  
    (select tablespace_name,sum(bytes_cached) bytes_used  
    from v$temp_extent_pool group by tablespace_name) d  
    where c.tablespace_name = d.tablespace_name  
    ) 

 

  • 2. 查看当前用户的使用的表空间及默认表空间,若是结果太多能够本身添加where条件过滤到当前用户
select username,default_tablespace,temporary_tablespace
from dba_users

 

  • 3.临时表空间满了查询可能会报错,执行以下命令收缩临时表空间
ALTER TABLESPACE MYTISJS_TEMP SHRINK SPACE

其中MYTISJS_TEMP为要收缩的临时表空间名

 

  • 4.删除用户及表空间
DROP USER TISJS5 CASCADE;
drop tablespace MYTISJS5 including contents and datafiles;
drop tablespace MYTISJS5_TEMP including contents and datafiles;
相关文章
相关标签/搜索