Oracle DMP备份文件使用数据泵expdp/impdp导出导入dmp文件
程序员文章站
2022-04-20 23:08:43
...
Oracle DMP备份文件使用数据泵expdp/impdp导出导入dmp文件
1:expdp导出操作
0、数据库登陆
plsql 使用sys账号,as sysdba身份登录orcl实例;
1、查询有哪些操作目录
select * from dba_directories;
2、创建操作目录
2.1、在指定目录下创建dump_dir文件夹(数据泵导出存放的路径)
2.2、用系统管理员登录数据库,在SQL执行器中执行如下命令
create directory dump_dir as '/home/oracle/data/expdpfile';
并查看是否创建成功(执行1)
2.3、检查该目录是否为oracle用户及其用户组,如图所示
若不是,为其修改所属用户及用户组
chown -R oracle:oinstall /home/oracle/data/expdpfile;
3、将该目录的使用权限赋给用户,执行如下命令(SQL执行器执行)
3.1、赋值给wind用户
grant read,write on directory dump_dir to wind;
4、导出数据(切换到数据泵存放的路径下,执行cmd命令行如下)
4.1、导出wind数据
expdp wind/123456@orcl directory=dump_dir file=COSPACE.dmp schemas=wind
4.2、指定某表导出数据
expdp wind/wind@oracle directory= dump_dir file=cbondpricesnet.dmp tables= wind.cbondpricesnet logfile=cbondpricesnet.log
2:impdp导入操作
结合导出步
0、数据库登陆
plsql 使用sys账号,as sysdba身份登录orcl实例;
1、查询有哪些操作目录
select * from dba_directories;
2、在被导入的数据库创建操作目录
2.1、在指定目录下创建dump_dir文件夹(将数据泵文件都放到此目录(e:\dump)下)
2.2、用系统管理员登录数据库,在SQL执行器中执行如下命令
create directory dump_dir as '/home/oracle/imp_dir';
3、用户赋权(sql执行器中执行如下命令)
3.1、赋权给指定用户(例如:wind)
grant connect,resource,dba to wind;
4、执行导入数据(切换到数据泵存放的路径下,执行cmd命令行如下)
4.1、普通执行命令
impdp wind/123456 directory=dump_dir dumpfile=test.dmp
4.2、复杂执行
链接: https://blog.csdn.net/zhengwei125/article/details/53670656
remap_tablespace=WIND:WIND 原来表空间:新的表空间
remap_schema=WIND:WIND 原来的schema:现在的schema
transform=segment_attributes:n 去掉表空间和存储子句,加上这个参数后,remap_tablespace参数就会失效,就会倒进用户默认的表空间
impdp wind/wind directory=dump_dir dumpfile=cbondprices.dmp remap_tablespace=WIND:WIND remap_schema=WIND:WIND table_exists_action=replace transform=segment_attributes:n logfile=cbondprices.log
3:impdp导入踩坑
3.1:ORA-01653 错误解决方案
ORA-01653 无法在表空间扩展的解决办法 -- 增加表空间大小或给表空间增加数据文件
当前系统的数据量越来越大的,昨天还运行正常的数据库,突然无法使用了。经过定位发现是"ORA-01653 " 即表空间满了,在这里简单记录下处理办法,长期来看oracle是顶不住了,需要尽快切到hadoop的HBase里存储数据
----查询表空间使用情况---
SELECT UPPER(F.TABLESPACE_NAME) "表空间名",
D.TOT_GROOTTE_MB "表空间大小(M)",
D.TOT_GROOTTE_MB - F.TOTAL_BYTES "已使用空间(M)",
TO_CHAR(ROUND((D.TOT_GROOTTE_MB - F.TOTAL_BYTES) / D.TOT_GROOTTE_MB * 100,2),'990.99') "使用比",
F.TOTAL_BYTES "空闲空间(M)",
F.MAX_BYTES "最大块(M)"
FROM (SELECT TABLESPACE_NAME,
ROUND(SUM(BYTES) / (1024 * 1024), 2) TOTAL_BYTES,
ROUND(MAX(BYTES) / (1024 * 1024), 2) MAX_BYTES
FROM SYS.DBA_FREE_SPACE
GROUP BY TABLESPACE_NAME) F,
(SELECT DD.TABLESPACE_NAME,
ROUND(SUM(DD.BYTES) / (1024 * 1024), 2) TOT_GROOTTE_MB
FROM SYS.DBA_DATA_FILES DD
GROUP BY DD.TABLESPACE_NAME) D
WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME
ORDER BY 4 DESC;
--查看表空间是否具有自动扩展的能力
SELECT T.TABLESPACE_NAME,D.FILE_NAME,
D.AUTOEXTENSIBLE,D.BYTES,D.MAXBYTES,D.STATUS
FROM DBA_TABLESPACES T,DBA_DATA_FILES D
WHERE T.TABLESPACE_NAME =D.TABLESPACE_NAME
ORDER BY TABLESPACE_NAME,FILE_NAME;
--修改表空间文件扩展方式:
ALTER DATABASE
DATAFILE '/u01/Oracle/oradata/orcl/ccen01.dbf' AUTOEXTEND
ON NEXT 50M MAXSIZE UNLIMITED
增加表空间大小的四种方法
Meathod1:给表空间增加数据文件
ALTER TABLESPACE app_data ADD DATAFILE
'D:\ORACLE\PRODUCT\10.2.0\ORADATA\EDWTEST\APP03.DBF' SIZE 50M;
Meathod2:新增数据文件,并且允许数据文件自动增长
ALTER TABLESPACE app_data ADD DATAFILE
'D:\ORACLE\PRODUCT\10.2.0\ORADATA\EDWTEST\APP04.DBF' SIZE 50M
AUTOEXTEND ON NEXT 5M MAXSIZE 100M;
Meathod3:允许已存在的数据文件自动增长
ALTER DATABASE DATAFILE 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\EDWTEST\APP03.DBF'
AUTOEXTEND ON NEXT 5M MAXSIZE 100M;
Meathod4:手工改变已存在数据文件的大小
ALTER DATABASE DATAFILE 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\EDWTEST\APP02.DBF'
RESIZE 100M;
参考:
http://www.linuxidc.com/Linux/2011-08/39834.htm
http://www.2cto.com/database/201109/103101.html
3.2:ORA-39171: Job is experiencing a resumable wait
select * from dba_datapump_jobs;
SELECT owner_name, job_name, rtrim(operation) "OPERATION",
rtrim(job_mode) "JOB_MODE", state, attached_sessions
FROM dba_datapump_jobs
WHERE job_name NOT LIKE 'BIN$%'
ORDER BY 1,2;
运行结果:
正在运行的job无法删掉,我的解决办法是重启数据库,重新导入,可能不是最好的方式,希望各位朋友又能解决的请留言
参考链接:https://blog.csdn.net/giveupyou/article/details/84690117
3.3:oracle impdp时卡死Processing object type SCHEMA_EXPORT/TABLE/INDEX/INDEX
今天在用impdp导入时,Processing object type SCHEMA_EXPORT/TABLE/INDEX/INDEX卡在建索引的过程一直不动,也不报错,重试了好几遍还是这样。一般看日志没有报错请耐心等待,纸质成功或报错。
后来恍然大悟,是不是DB出什么问题了,查看alert日志,发现这个错误:
statement in resumable session 'SYSTEM.SYS_IMPORT_SCHEMA_03.1' was timed out
statement in resumable session 'SYSTEM.SYS_IMPORT_SCHEMA_03.1' was suspended due to
ORA-01659: unable to allocate MINEXTENTS beyond 2 in tablespace TBS_FALABELLA
原来是空间不足,加大空间后,重试,OK!
快速找到oracle的alert日志方法:
1、进入到sqlplus接口
$sqlplus '/as sysdba'
注意:使用角色sysdba
2、查询alter日志目录
show parameter dump
4:Linux命令scp–远程拷贝文件
scp介绍
scp就是secure copy,一个在linux下用来进行远程拷贝文件的命令。
有时我们需要获得远程服务器上的某个文件,该服务器既没有配置ftp服务器,也没有做共享,无法通过常规途径获得文件时,只需要通过简单的scp命令便可达到目的。
如何使用
// 假设远程服务器IP地址为 192.168.1.100
1.从服务器复制文件到本地:
scp root@192.168.1.100:/data/test.txt /home/myfile/
补充:多文件拷贝
scp root@192.168.1.100:/data/\{test1.txt,test2.cpp,test3.bin,test.*\} /home/myfile/
root@192.168.1.100 root是目标服务器(有你需要拷贝文件的服务器)的用户名,192.168.1.100是IP地址,后面紧跟的 “:” 不要忘记,/data/test.txt(多文件还有test1.txt,test2.cpp,test3.bin,test.a,test.c等) 是目标服务器中你要拷贝文件的地址,接一个空格,后面的 /home/myfile/ 是本地接收文件的地址。
2.从服务器复制文件夹到本地:
scp -r root@192.168.1.100:/data/ /home/myfile/
只需在前面加 -r 即可,就可以拷贝整个文件夹。
3.从本地复制文件到服务器:
scp /home/myfile/test.txt root@192.168.1.100:/data/
补充:多文件拷贝
scp /home/myfile/test1.txt test2.cpp test3.bin test.* root@192.168.1.100:/data/
4.从本地复制文件夹到服务器:
scp -r /home/myfile/ root@192.168.1.100:/data/