oracle 数据泵 imp,IMP/EXP,数据泵,SQL*Loader ,rman,oracle数据库备份

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/123456@orcl file=/oracle/bak_oracle/emp_test.dmp tables="emp_test"

按条件进行选择性导出

exp scott/123456@10.1.1.10: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/123456@10.1.1.10: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

oracle@master.example.com

--杀掉进程 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/system@10.1.1.10:1521/orcl as sysdba' file=/oracle/bak_oracle/scott.dmp fromuser=scott touser=scott

注:touser=可以给不同的用户

3.导入导出表空间

---未完待续

需要备份的数据量大时建议选择数据泵

数据库的逻辑备份和恢复:expdp和impdp

数据泵只能在数据库的服务器端使用

在服务器上面创建目录,用于导入导出时存放数据

create directory DATA_BAK as '/oracle';

为目录授权用户读和写的权限

grant read,write on directory DATA_BAK to TEST;

查看目录和拥有者、路径

select * from dba_directories

529004a4fdf6f8f4eb488a837087871c.png

c5def9bcc0f698ff87240928db94f5ae.png

expdp 用户名/密码@IP/网络服务名 schemas=用户名 directory=创建的目录 dumpfile=数据表名.dmp logfile=数据表名.log

expdp test/test@10.1.1.10:1521/orcl schemas='TEST' directory='DATA_BAK' dumpfile=/oracle/xxx.dmp logfile=/oracle/xxx.log

schemas:用户名,directory:创建的存放数据的目录,dumpfile:将要导出的数据库备份dmp文件,logfile:存放导出日志文件,compression:导出时对文件进行压缩

c06b8d600ff276a5803cc039a935bd4e.png

用脚本文件导出数据库文件:

[oracle@master oracle]$ cat aa.par

userid=" test/test"

#userid=" / as sysdba" 用dba导出

directory=DATA_BAK

dumpfile=emp_test2.dmp

logfile=emp_test2.log

#parallel=5

compression=all

#nologfile=no

schemas=test

job_name=emp_test2_expdp

使用命令调用:

nohup expdp parfile=aa.par &

用命令导出数据库文件:

expdp test/test@10.1.1.10/orcl directory=DATA_BAK dumpfile=emp_test2.dmp logfile=emp_test2.log schemas=test

289c617fbe659440b2cb34aadc6fb89c.png

数据泵导入数据库语句:

impdp test/test@10.1.1.10:1521/orcl REMAP_SCHEMA = test:test table_exists_action = replace directory=DATA_BAK dumpfile=emp_test2.dmp logfile=emp_test2.log

数据库的批量导入:SQL*Loader

连接用户

查看表结构

6f7c3dff33a8bfe373d97972a94b3afa.png

控制文件:

[oracle@master oracle]$ cat EMP_LOADERTEST2.ctl

LOAD DATA

INFILE '/oracle/EMP_LOADERTEST2.ctl '

TRUNCATE INTO TABLE EMP_LOADERTEST2

FIELDS TERMINATED BY "," OPTIONALLY ENCLOSED BY '"'

(EMPNO,ENAME,JOB)

数据文件:

[oracle@master oracle]$ cat EMP_LOADERTEST2.dat

11,a1,1,11,22,33,44,55

11,a2,2,11,22,33,44,55

11,a3,2,11,22,33,44,55

11,a4,3,11,22,33,44,55

导入时,数据文件中的数据,需要和控制文件中相对应

需要导入的表中的字段类型需要一致

sqlldr test/test control=/oracle/EMP_LOADERTEST2.ctl data=EMP_LOADERTEST2.dat

a40ada06b9ed141ac0be2bfc56f9218d.png

产生了sqlldr的日志文件

58ffb4f06a0e20a232998b51943e32df.png

查看日志文件中数据库导入的情况

0c1e6a4dce3d3b3a281218436fd43a50.png

45c118ea6481235b73b61e3fd2b4c90a.png

检查表中是否有数据

2660ab9c3aa5cb64772afe96463fe8f8.png

扩展表空间

系统表空间会自动扩大,如果系统表空间莫名其妙的大

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);

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值