oracle全库导入命令解析,oracle数据库全库的导出导入实战手册

Oracle数据库导入导出(expdp/impdb)

1、全库导出(expdp参考shell脚本)

#!/bin/bash

#导入环境变量

source /home/oracle/.bash_profile

export ORACLE_BASE=/u01/app/oracle

export ORACLE_HOME=/u01/app/oracle/product/11.2.0/db_1/

export PATH=$PATH:$HOME/bin:$ORACLE_HOME/bin

export ORACLE_SID=p2pdb

#进入你需要备份的文件目录

cd /home/oracle/dump/

date=date "+%Y%m%d"

DATE1=date -d today +%Y%m

#执行导出命令

expdp 'system/"12345678"' dumpfile=dumpdir:ZJKD${date}.dmp SCHEMAS=zjkd

#打包

tar zcvf ZJKD${date}.tar.gz ZJKD${date}.dmp

mv /home/oracle/dump/ZJKD_${DATE1}01.tar.gz /home/oracle/dump_bak_1/

2、全库导入(impdb)

全新库导入准备:

1、原库表空间大小(相关查询脚本)

查看表空间的名称及大小

SELECT t.tablespace_name, round(SUM(bytes / (1024 * 1024)), 0) ts_size

FROM dba_tablespaces t, dba_data_files d

WHERE t.tablespace_name = d.tablespace_name

GROUP BY t.tablespace_name;

发现即将导入的库的表空间大小就将近300G。

2、创建表空间,并设置与原库表空间差不多的大小

1、create tablespace ZJKD datafile 'D:\app\oradata\orcl\ZJKD01.dbf' size 30000M ;---连续创建10个类似的文件

2、设置为自动扩展和扩展大小的命令如下:

alter database datafile 'D:\app\oradata\orcl\ZJKD01.dbf' resize 1070M;

alter database datafile 'D:\app\zijinsuo\oradata\orcl\xwxd.dbf' autoextend on;

3、手动创建了用户

create user zjkd identified by zjkd default tablespace zjkd;

4、赋权限(system用户登录后赋权限)

sql>grant read,write on directory mydata to zjkd

#给用户表空间权限

sql>grant dba,resource,unlimited tablespace to zjkd

5、执行导库命令

1、找到指定的备份文件

create directory dpdata2 as 'D:\backup\ZJKD_20210101';

2、执行导入命令

impdp \"system/888888 as sysdba \" dumpfile=20210101.dmp directory=dpdata2 schemas=zjkd logfile=impdp.log table_exists_action=replace

6、查看执行日志

1、查看导入日志 impdp.log(文件在你备份文件指定目录)

2、查看系统日志,alert_orcl.log

执行 show parameter dump

遇到的问题处理:

问题一:

1、表空间不足,进行表空间的扩展;

问题二:

2、Thu Apr 30 09:52:29 2020

Thread 1 cannot allocate new log, sequence 12255

Private strand flush not complete

Current log# 2 seq# 12254 mem# 0: /data/oradata/eas/redo02.log

Thread 1 advanced to log sequence 12255 (LGWR switch)

Current log# 3 seq# 12255 mem# 0: /data/oradata/eas/redo03.log

很明显这是日志组被写满了,需要增加日志组:

解决方法:

select group#,sequence#,bytes,members,status from v$log; 查看每组日志的状态

alter database add logfile group 4 ('/opt/oradata/orclbj/redo04.log') size 200M; 增加1组 日志组 视情况而定增加日志组的大小。

alter database add logfile group 5 ('/opt/oradata/orclbj/redo05.log') size 200M;

alter database add logfile group 6 ('/opt/oradata/orclbj/redo06.log') size 200M;

3、重新导入数据时,建议重启下数据库

否则因为导库中断,报ORA-00054: 资源正忙, 但指定以 NOWAIT 方式获取资源, 或者超时失效---

在system登录的情况下执行如下操作:

1、查询被锁的会话ID:

select session_id from v$locked_object;

2.查询上面会话的详细信息:

SELECT sid, serial#, username, osuser FROM v$session where sid = 9;

3.将上面锁定的会话关闭:

ALTER SYSTEM KILL SESSION '9,99';

问题三:

创建索引的时间特别长,下一次导入的时候,如果没有变化,可以忽略索引的导入

追加:exclude=index,constraint

备注的sql:

1、索引查询:

SELECT segment_name, SUM (bytes) / 1024 / 1024 FROM dba_segments WHERE owner = 'XIEZQ' AND segment_name LIKE 'PK%' or segment_name like 'IDX%' group by segment_name;

2、表空间的使用率:

--1G=1024MB

--1M=1024KB

--1K=1024Bytes

--1M=11048576Bytes

--1G=102411048576Bytes=11313741824Bytes

SELECT a.tablespace_name "表空间名",

total "表空间大小",

free "表空间剩余大小",

(total - free) "表空间使用大小",

total / (1024 1024 1024) "表空间大小(G)",

free / (1024 1024 1024) "表空间剩余大小(G)",

(total - free) / (1024 1024 1024) "表空间使用大小(G)",

round((total - free) / total, 4) 100 "使用率 %"

FROM (SELECT tablespace_name, SUM(bytes) free

FROM dba_free_space

GROUP BY tablespace_name) a,

(SELECT tablespace_name, SUM(bytes) total

FROM dba_data_files

GROUP BY tablespace_name) b

WHERE a.tablespace_name = b.tablespace_name

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值