Oracle数据库备份与还原命令

Oracle数据库备份与还原命令

数据导出:

1 将数据库orcl完全导出,用户名system 密码manager 导出到D:\daochu.dmp中

exp system/manager@orcl file=d:\daochu.dmp full=y

2 将数据库中system用户与sys用户的表导出

exp system/manager@orcl file=d:\daochu.dmp owner=(tpmis8_t)

3 将数据库中的表table1 、table2导出

exp system/manager@orcl file=d:\daochu.dmp tables=(table1,table2)

4 将数据库中的表table1中的字段filed1以"00"打头的数据导出

exp system/manager@orcl file=d:\daochu.dmp tables=(table1)query=\" where filed1 like '00%'\"

上面是常用的导出,对于压缩我不太在意,用winzip把dmp文件可以很好的压缩。

不过在上面命令后面 加上 compress=y 就可以了

数据的导入

1 将D:\daochu.dmp 中的数据导入 orcl数据库中(imp 用户名/密码@网络服务名 file=xxx.dmp full=y;)。

imp system/manager@orcl file=d:\daochu.dmp

上面可能有点问题,因为有的表已经存在,然后它就报错,对该表就不进行导入。

在后面加上 ignore=y 就可以了。

2 将d:\daochu.dmp中的表table1 导入

imp system/manager@orcl file=d:\daochu.dmp tables=(table1)

基本上上面的导入导出够用了。不少情况我是将表彻底删除,然后导入。

注意:

你要有足够的权限,权限不够它会提示你。

数据库时可以连上的。可以用tnsping orcl 来获得数据库orcl能否连上

附录一:
给用户增加导入数据权限的操作
第一,启动sql*puls
第二,以system/manager登陆
第三,create user 用户名 IDENTIFIED BY 密码 (如果已经创建过用户,这步可以省略)
第四,GRANT CREATE USER,DROP USER,ALTER USER ,CREATE ANY VIEW ,
DROP ANY VIEW,EXP_FULL_DATABASE,IMP_FULL_DATABASE,
DBA,CONNECT,RESOURCE,CREATE SESSION TO 用户名字
第五, 运行-cmd-进入dmp文件所在的目录,
imp userid=system/manager full=y file=*.dmp
或者 imp userid=system/manager full=y file=filename.dmp



使用sqlplus文字工具创建数据库用户
create user tpmis8_t identified by 1234;(personinterface)
给生成的用户赋权限
grant dba to tpmis8_t;(personinterface)
exit;退出工具

开始向数据库导入dmp文件
1、‘imp’ 回车
2、输入用户名‘examplatformtest’
3、输入口令‘1234’
4、回车
5、输入导入dmp文件地址
6、选择 'U'
7、连续的点击 3个回车
8、再次输入用户名‘examplatformtest’,回车
9、点击回车
10、等待导入数据完成



ORACLE删除当前用户下所有的表的方法
1、如果有删除用户的权限,则可以:

drop user tpmis8_t cascade;

加了cascade就可以把用户连带的数据全部删掉。

删除后再创建该用户。
--创建管理员用户
create user 用户名 identif

ied by 密码 default tablespace space_data(表空间名称) temporary tablespace space_temp(临时表空间名称);
--授权
grant connect,dba to 用户名;
--修改限额
ALTER USER "用户名" QUOTA UNLIMITED ON SPACE_DATA(表空间名称);

--查看所有用户对象
select uo.object_name,uo.object_type from user_objects uo where uo.object_type<>'LOB' order by uo.object_type desc



2、如果没有删除用户的权限,则可以执行:

select 'drop table '||table_name||';'
from cat
where table_type='TABLE'

将会输出一批删除表的sql语句,这些SQL语句执行一下就可以了。(需要有drop table的权限)



加密解密函数 赋权

sys as sysdba 登陆 (只能是这个用户)
grant execute on dbms_crypto to tpmis8_t;


show parameter open_cursors;
alter system set open_cursors = 2500;


跨用户授权

select 'grant select on personinterface.' || tname || ' to tpmis8_t;' from tab;

--说明:在a用户下执行该语句,执行后会生成对所有表的赋权限语句,拷贝出来执行就可以了。

--2、a用户下授权查询所有表给b用户
select 'grant insert on '||table_name||' to tpmis8_t;' from user_tables;

--3、a用户下授权查询所有序列给b用户
select 'grant delete on ' || sequence_name || ' to tpmis8_t;' from dba_sequences where sequence_owner='A';

--4、a用户下授权查询单个表给b用户
grant select on personinterface.tablename to tpmis8_t;

--备注:授权更新、删除的 语法和授权查询类似,只是关键字不通而已。
--如:
--1、授权a用户下授权更新单个表给b用户
grant update on personinterface.tablename to tpmis8_t;

--2、授权a用户下取消给b用户删除单个表的授权
--revoke delete on a.tablename from b;

--3、授权a用户下授权删除单个表给b用户
grant delete on personinterface.tablename to tpmis8_t;


oracle导出空表

2、设置deferred_segment_creation 参数为FALSE后,无论是空表还是非空表,都分配segment。

在sqlplus中,执行如下命令:

SQL>alter system set deferred_segment_creation=false;

查看:
SQL>show parameter deferred_segment_creation;

该值设置后只对后面新增的表产生作用,对之前建立的空表不起作用。


根据上述查询,可以构建针对空表分配空间的命令语句,如下:

-----------
SQL>Select 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0
-----------

可以批量执行上述生成的SQL语句为空表分配Extent的方式,来解决导出之前建立的空表的问题


相关文档
最新文档