IMP/EXP,数据泵,SQL*Loader ,rman
数据库的逻辑备份和恢复:exp和imp
1.导库:导出和导入整个数据库
2.导表空间:导出和导入表空间
3.导表用户:导出和导入用户中所有对象
4.导表:导出和导入表或表分区
(1)commit=y 插入并提交,频繁提交会影响数据库效率。提交数据库过大时可以添加。
(2)ignore=y/n 该参数表示忽略创建错误,并继续执行。
(3)full=y 是否完全导入。
1.导出导入表
备份测试表:
create tables emp_test as select * from emp_test;
exp导出数据库表:
exp scott/[email protected] file=/oracle/bak_oracle/emp_test.dmp tables="emp_test"
按条件进行选择性导出
exp scott/[email protected]:1521/orcl file=/oracle/bak_oracle/emp_test.dmp tables="emp_test" query="where sal between ‘1000‘ and ‘2000‘" log=/oracle/bak_oracle/emp_test.log
用有权限用户导出不同用户的不同表
exp ‘sys/syste as sysdba‘ file=/oracle/bak_oracle/emp_test.dmp tables="scott.emp_test,test.tab_test"
注:oracle用户登录并且配置了TNSNAME可以直接scott/123456
不是本机备份scott/[email protected]:1521/orcl
删除测试表
drop table emp_test ;
参数purge
imp导入数据库表:
查询该用户存放数据的缺省表空间:select username,default_tablespace from dba_users where username = ‘SCOTT‘;
在特殊情况下有些用户的数据需要放到特殊的表空间中,使用如下的命令进行修改。
修改该用户存放数据的缺省表空间:alter user scott default tablespace XXX;
imp scott/123456 file=/oracle/bak_oracle/emp_test.dmp
用有权限用户导出不同用户的不同表导入到一个用户表中
imp ‘sys/system as sysdba‘ file=/oracle/bak_oracle/emp_test.dmp fromuser=scott;
查询表是否删除和导入成功
select count(*) from emp_test;
2.导出导入用户
导出一个用户下面的数据
exp scott/123456 file=/oracle/bak_oracle/scott.dmp owner=scott;
删除一个用户
SQL> drop user scott cascade;
drop user scott cascade
*
ERROR at line 1:
ORA-01940: cannot drop a user that is currently connected
(1)查看是否有SQL语句在占用这张表
select sess.INST_ID, sess.machine,
sess.program, sess.sql_id,
sess.sid, sess.serial#,
sess.PROCESS
lo.oracle_username, lo.os_user_name,
lo.locked_mode,
ao.object_name, ao.object_type,
ao.status,
from gv$locked_object lo, dba_objects ao, gv$session sess
where ao.object_id = lo.object_id
and lo.session_id = sess.sid
and sess.username = ‘SCOTT‘
--杀掉进程 sid,serial#
alter system kill session‘10,11562‘;
(2)查看是否有会话没有结束
SQL> select username,sid,serial#,paddr,status from v$session where username=‘SCOTT‘;
USERNAME SID SERIAL# PADDR STATUS
SCOTT 1 281 000000008E51C510 KILLED
SCOTT 20 362 000000008E491150 INACTIVE
SCOTT 21 175 000000008E48D050 INACTIVE
SCOTT 28 169 000000008E51C510 KILLED
SQL> select PROGRAM from v$process where addr=‘000000008E490110‘;
PROGRAM
[email protected]
--杀掉进程 sid,serial#
alter system kill session ‘1,281‘;
alter system kill session ‘20,362‘;
alter system kill session ‘21,175‘;
alter system kill session ‘28,169‘;
SQL> drop user scott cascade;
User dropped.
导入一个用户下面的数据
先授权(连接数据库和DBA的权限)再导入(用户SCOTT下面的所有表)
grant connect,resource to scott identified by 123456;
grant dba to scott;
imp scott/123456 file=/oracle/bak_oracle/scott.dmp full=y;
用有权限的用户导入表给用户
imp ‘sys/[email protected]:1521/orcl as sysdba‘ file=/oracle/bak_oracle/scott.dmp fromuser=scott touser=scott
注:touser=可以给不同的用户
3.导入导出表空间
---未完待续
扩展表空间
系统表空间会自动扩大,如果系统表空间莫名其妙的大
1.查询审计功能是否开着,审计表内数据大影响的
查看审计功能是否打开
show parameter audit;
2.关闭审计功能命令
SQL> alter system set audit_sys_operations=FALSE scope=spfile;
System altered.
SQL> alter system set audit_trail=NONE scope=spfile;
System altered.
重启数据库生效
注:audit_sys_operations的参数设置:
none 禁用数据库审计
os 启用数据库审计,并将数据库审计记录定向到操作系统审计记录
db 启用数据库审计,并将数据库所有审计记录定向到数据库的SYS.AUD$表
xml 启用数据库审计,并将所有记录写到XML格式的操作系统文件中。
xml,extended 启用数据库审计,输出审计记录的所有列,包括SqlText和SqlBind的值。
3.查询统计信息是否过多
统计信息时间默认为31天,时间可以修改为10天或一周,过期的统计信息系统自动删除
SQL> select dbms_stats.get_stats_history_retention from dual;
SQL> conn / as sysdba
Connected.
SQL> exec dbms_stats.alter_stats_history_retention(10);