目录

Oracle 定时任务(dbms_jobs)

exp/imp 导入导出数据

oracle 11g exp 空表导出处理

expdp 与 impdp 数据泵导入导出

高版本导出到低版本存在的问题

exclude 与 include 参数详解

expdp、impdp 与 exp、imp 的区别


Oracle 定时任务(dbms_jobs)

1、可以直接在 Oracle 数据库中创建定时任务用于执行存储函数或者存储过程,类似 windows 系统的定时任务。

2、建好后的定时任务可以在 pl/sql 工具中的左侧 DBMS_Jobs 菜单下看到,就如同查看表、视图、存储过程、序列等一样方便,显示的是任务ID(jobId)。

3、定时任务的查询、创建、禁用、停用、修改、删除 操作演示如下:

select t.*,ROWID from EMP t;-- 1、创建存储过程:用于被定时任务调用(往 emp 插入数据)
create or replace procedure auto_insert_emp_job as
BeginINSERT INTO C##SCOTT.EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)VALUES ((select max(EMPNO)+1 from EMP), '李四', 'SALESMAN', 7698, TO_DATE('1983-04-20 00:00:00', 'YYYY-MM-DD HH24:MI:SS'), 1650.00, 350.00, 30);commit;
End;-- 2、创建定时器任务:调用存储函数或者存储过程
-- 建好后可以在 pl/sql 工具中的左侧 DBMS_Jobs 菜单下看到定时任务(job),显示的是任务ID(jobId)
-- 因为任务ID(唯一标识符)是自动生成的,所以重复创建会产生重复的任务)
declarejob_id number; -- job 主键id,不用设置值让其自动生成
beginsys.dbms_job.submit(job_id, -- job 主键id,不用传,会自动生成'auto_insert_emp_job;', -- 需要执行的存储函数或者存储过程名称(结尾的分号不能少)sysdate, -- 任务启动后第一次执行的时间'trunc(sysdate,''mi'') + 1/ (24*60)'); --执行间隔时间,每1分钟执行一次commit ;
end;-- 3、查询数据库中的所有定时任务:根据定时任务执行的存储过程/函数进行查询
-- JOB:每个任务的唯一标识符
-- LOG_USER:提交作业时登录的用户
-- LAST_DATE、LAST_SEC:上次成功执行此作业的日期
-- THIS_DATE、THIS_SEC:当前正在运行的作业的开始时间,不在运行时为 null.
-- NEXT_DATE、NEXT_SEC:下一次执行此作业的日期
-- TOTAL_TIME:系统在此作业上花费的总挂钟时间,以秒为单位
-- BROKEN:如果为Y,则表示此作业已停止运行
-- failures:执行失败的次数
select a.* from dba_jobs a where what in ('auto_insert_emp_job;');
-- 没有 dba 权限时,只能查询当前用户自己的任务
select a.* from USER_JOBS a where WHAT in ('auto_insert_emp_job;');-- 4、停止任务:1 是任务的唯一标识符,true 表示停止, sysdate 表示立即停止
begindbms_job.broken(1, true, sysdate);commit ;
end;-- 5、重新开始被停止了的任务:1 是任务的唯一标识符
begindbms_job.run(1);commit ;
end;-- 6、修改任务下次执行的时间,如果任务之前被禁用,执行之后会被重新启用.
begindbms_job.next_date(1,to_date('2021-09-04 16:00:00','yyyy-mm-dd hh24:mi:ss'));commit ;
end;-- 7、修改任务执行的间隔时间,会当任务执行完下一次之后才会生效,1 是任务的唯一标识符
begindbms_job.interval(1,'trunc(sysdate,''mi'') + 1/ (24*60)');commit ;
end;-- 8、删除定时任务, 1 是任务的唯一标识符
begindbms_job.remove(1);commit ;
end;

每分钟执行 :   trunc(sysdate,'mi') + 1/(24*60)
每天的凌晨1点执行 :    trunc(sysdate) + 1 +1/(24)
每周一凌晨1点执行 :   trunc(next_day(sysdate,'星期一'))+1/24
每月1日凌晨1点执行:  trunc(last_day(sysdate))+1+1/24
每季度的第一天凌晨1点执行 : trunc(add_months(sysdate,3),'Q') + 1/24
每年7月1日和1月1日凌晨1点 : add_months(trunc(sysdate,'yyyy'),6)+1/24
每年1月1日凌晨1点执行 :  add_months(trunc(sysdate,'yyyy'), 12)+1/24
-- 系统参数:job_queue_process(作业队列进程) 表示 oracle 并发的 job 数量,当值为0时表示停止全部job.
-- 需要管理员权限的账号才能修改
select * from  v$parameter where name = 'job_queue_processes' ;
-- 修改 job_queue_processes 参数
alter system set job_queue_processes = 1000;

trunc 函数不熟悉的可以参考:trunc 截断数字和日期

exp/imp 导入导出数据

https://wangmaoxiong.blog.csdn.net/article/details/90690400#t10

oracle 11g exp 空表导出处理

https://wangmaoxiong.blog.csdn.net/article/details/90690400#t11

expdp 与 impdp 数据泵导入导出

创建数据泵目录

1、数据泵目录用于存放 *.dmp 文件,expdp 导出成功之后,*.dmp 文件默认就会放到它下面,同理导入的时候,也需要先将 *.dmp 文件放入到它下面。

2、数据泵目录不需要重复创建,存在之后,直接将 *.dmp 文件放到对应的目录下,然后操作即可。

3、以下命令在 sqlplus 或者 PL/SQL Developer 等客户端工具执行即可。其中 directory 是关键字,与表空间有点类似,都有名称和路径。

-- 查询 expdp/impdp 数据泵目录信息(含名称、路径)
select * from dba_directories;
-- 创建数据泵目录(DATA_PUMP_DIR_ME 表示定义的目录名称,后面的表示目录路径,必须事先创建好,全部自定义即可,如/u01/app
-- /oracle)
create or replace directory DATA_PUMP_DIR_ME as 'E:\wmx\dpdump';
-- 将数据泵目录的读写权限授权给指定的用户(cs_element),可以是多个用户,用逗号隔开,如 a,b,c
grant read,write on directory DATA_PUMP_DIR_ME to cs_element;

4、目录路径必须是已经存在的目录,如果不存在,虽然显示创建成功,但是导入导出时会报错。

expdp 导出库

1、如果是 linux 系统,则必须先切换到 oracle 用户后再执行命令,如下所示是 CentOS 7.2 上的 Oracle 19c 导出。

[root@localhost ~]# su - oracle
上一次登录:四 10月 21 17:07:26 CST 2021pts/1 上
[oracle@localhost ~]$ expdp cs_element/1@10.104.65.181:1521/orcl directory=DATA_PUMP_DIR dumpfile=cs_element.dmp logfile=cs_element.log schemas=cs_element EXCLUDE=TABLE:\" in \(\'BAS_CALC_INFO_INSERT_SP\',\'BAS_CALC_COLS\'\)\" version=11.2.0.1.0

cs_element/1:导出的用户名和密码
directory:指定的数据泵名称
dumpfile:指定导出的数据库文件名称(文件会放到数据泵名称对应的路径下)
logfile:日志文件名称(文件会放到数据泵名称对应的路径下)
schemas:指定导入导出的用户名称,可以是多个,用逗号隔开
exclude:排除某些表不导出(需要进行转义,不需要排除时,可以省略)
version:指定导出文件的版本(比如导出库是19c,导入库是11g,不需要指定时,可以省略)
compression=all:表示对数据进行压缩

select * from product_component_version ; -- 查看数据库版本

impdp 导入库

1、如下所示是本机 win10 系统 Oracle 11g 导入,语法与 expdp 是对应的。

-- 新建表空间,存在时忽略,datafile 路径自定义即可
create tablespace grpdatafile 'E:\wmx\oracle_tablesapce\grp.dbf'size 500Mautoextend onnext 50M;-- 创建用户并授权
create user cs_element identified by 1 default tablespace grp;
grant dba to cs_element;-- 导入数据库
-- 先将准备好的 *.dmp 文件放到'数据泵目录'下,比如上面的 'E:\wmx\dpdump'
-- 然后 cmd 命令行中执行如下命令
-- 如果提示 'ORA-28040: 没有匹配的验证协议' ,则不用理会,继续输入 用户名和口令 回车即可正常导入
-- table_exists_action=replace 表示表存在时则替换,否则默认插不进去
E:\wmx\dpdump> impdp cs_element/1@localhost:1521/orcl directory=DATA_PUMP_DIR_ME dumpfile=cs_element.dmp logfile=cs_element.log schemas=cs_element table_exists_action=replace

高版本导出到低版本存在的问题

1、高版本导出时,虽然可以通过 version 指定低版本的版本号,导出时会自动转换,但是 Oracle 12c 以前的表名、列名是不允许超过 30 个字符的,所以如果高版本上面的某个表名、列名,视图名以及对应的列,或者索引名称等等,只要超过 30 个字符串,则导出会失败。

2、如下所示为从 19C 导出时指定 11g 版本号的失败情况。

ORA-39373: cannot export TABLE:"CS_ELEMENT"."GFM_TB_CHANGE_ELEMENT_DATA_CACHE" to version 11.2.0.1.0 due to long identifiers
ORA-39373: cannot export VIEW:"CS_ELEMENT"."REPORT_V_BUDGET_MESSAGE_431081000" to version 11.2.0.1.0 due to long identifiers
ORA-39373: cannot export INDEX:"CS_ELEMENT"."IDX_BAS_CALC_INFO_INSERT_SP_MULTI_1" to version 11.2.0.1.0 due to long identifiers
ORA-39373: cannot export CONSTRAINT:"CS_ELEMENT"."UK_AGENCY_CODE_MOF_DIV_CODE_IS_DELETED" to version 11.2.0.1.0 due to long identifiers

exclude 与 include 参数详解

1、exclude(排除)、include(包含) 参数能够对特定的对象或对象类型进行过滤,比如导出/不导出特定的表、视图以及存储过程、索引、约束、授权统计信息等等。

EXCLUDE=[object_type]:[name_clause],[object_type]:[name_clause] 排出特定对象
INCLUDE=[object_type]:[name_clause],[object_type]:[name_clause] 包含特定对象

1、object_type:用于指定对象的类型,如 table,sequence,view,procedure,function,package 等等。

2、name_clause:过滤子句,由SQL操作符以及对象名(可使用通配符)来过滤指定对象类型中的特定对象。

3、当未指定 name_clause 时,则对该object_type类型的对象全部进行过滤。

4、多个 [object_type]:[name_clause] 中间以逗号分割。

2、 常用的过滤 SQL 表达式演示(注意Oracle的对象名称都是大写的)。

-- 所有序列不导出,emp、dept 表不导出,其它全部导出
expdp ...... SCHEMAS=scott EXCLUDE=SEQUENCE,TABLE:"IN ('EMP','DEPT')"
-- 导出所有函数、存储过程,以及 emp 表,其它全部不导出
impdp ...... SCHEMAS=scott INCLUDE=FUNCTION,PROCEDURE,TABLE:"='EMP'"
EXCLUDE=SEQUENCE,VIEW   过滤所有的 序列,视图
EXCLUDE=TABLE:"IN ('EMP','DEPT')"    过滤 EMP,DEPT 表
EXCLUDE=SEQUENCE,VIEW,TABLE:"IN ('EMP','DEPT')" 过滤所有序列、视图、以及 EMP,DEPT 表
EXCLUDE=INDEX:"= 'INDEX_NAME'" 过滤索引对象 INDEX_NAME
INCLUDE=PROCEDURE:"LIKE 'PROC_B%'" 包含以 PROC_B 开头的所有存储过程
INCLUDE=TABLE:"!= 'EMP' "  包含不等于 emp 表的其它全部内容
其它常用操作符 NOT IN, NOT LIKE, <, != 等等都可以使用

3、命令行下如果执行报错,则需要对 单引号、双引号、括号进行转义,如:

Windows 下:INCLUDE=TABLE:\"IN ('EMP', 'DEPT')\"
Linux 下:EXCLUDE=TABLE:\" in \(\'BAS_CALC_INFO_INSERT_SP\',\'BAS_CALC_COLS\'\)\"

expdp、impdp 与 exp、imp 的区别

exp、imp expdp、impdp
Oracle 10g 之前和之后都有 Oracle 10g 及以后版本才有
属于客户端工具程序,既可以在可以客户端使用,也可以在服务端使用 属于服务端工具程序,只能在 Oracle 服务端使用,客户端只是用来连接服务器启动导入导出操作,导出文件只存储在服务端。
IMP 只适用于 EXP 导出的文件 IMPDP 只适用于 EXPDP 导出的文件
EXPDP、IMPDP 在备份和恢复时间上要比 EXP、IMP 有优势,而且文件也要小的多
使用 EXPDP、IMPDP 管理更加灵活,支持并行、可中断、可修改元数据文件名字与表空间名、支持元数据导入导出、估算导出数据所需空间、指定导入数据库版本等。

更多细节与注意事项可以参考:Oracle 数据库 expdp 用法及注意事项 .pdf

Oracle 定时任务(dbms_jobs)、expdp 与 impdp 数据泵导入导出相关推荐

  1. su oracle c expdp,expdp/impdp 数据泵导入导出

    userid=test/test            --导出的用户,本地用户!! directory=dmpfile          --导出的逻辑目录,一定要在oracle中创建完成的,并且给 ...

  2. oracle expdp导出教程,Oracle Expdp Impdp 数据泵导入导出

    新建逻辑目录 Oracle不会自动创建实际的物理目录"D:\temp"(务必手动创建此目录),仅仅是进行定义逻辑路径dmp_dir: sql> conn username/p ...

  3. impdp 并行_EXPDP和IMPDP数据泵进行导出导入的方法

    EXPDP和IMPDP数据泵进行导出导入的方法 使用expdp和impdp时应该注重的事项: 1.exp和imp是客户端工具程序,它们既可以在客户端使用,也可以在服务端使用. 2.expdp和impd ...

  4. Oracle使用数据泵导入/导出数据(expdp/impdp)【图文教程】

    Oracle使用数据泵导入/导出数据(expdp/impdp) 此类博客太多的坑,都不完整,要不执行着就报错执行不下去了,要不说的不清不楚,整理的一步步截图,100%成功. expdp数据导出 远程登 ...

  5. oracle数据泵导入append,Impdp数据泵导入

    Impdp数据泵导入 执行导入前,先导出scott的schema作为测试数据: [oracle@localhost ~]$ expdp scott/oracle directory=expdp_dir ...

  6. 如何将mysql导出数据泵_Oracle数据库之ORACLE 数据泵导入导出数据

    本文主要向大家介绍了Oracle数据库之ORACLE 数据泵导入导出数据,通过具体的内容向大家展现,希望对大家学习Oracle数据库有所帮助. 一.摘要 在平常备库和数据库迁移的时候,当遇到大的数据库 ...

  7. impdp导入指定表 oracle_使用impdp数据泵导入并重命名表名

    使用impdp数据泵导入并重命名表名 2018-08-28 使用数据泵导入并重命名表名 1.select * from dba_directories; 2.expdp system/oracle d ...

  8. mysql 导入pdb_12c pdb的数据泵导入导出简单示例

    12c推出了可插拔数据库,在一个容器cdb中以多租户的形式同时存在多个数据库pdb.在为pdb做数据泵导入导出时和传统的数据库有少许不同. 1,需要为pdb添加tansnames 2,导入导出时需要在 ...

  9. mysql数据泵导入导出_ORACLE使用数据泵导入导出部分表

    1.导出名字为A的表(这里会导出SEQUENCES及FUNCTION等内容) expdp TEST/TEST@orcl schemas=TEST dumpfile=TEST.dmp DIRECTORY ...

  10. oracle数据泵导入导出6,oracle 10g数据泵和导入导出性能对比(六)

    前一段时间在一次迁移中同时用到了数据泵和EXP,发现二者效率的差别还是相当大的.这里通过一个例子简单比较一下. 这篇文章同时使用直接路径和并行来加速数据泵导入. 上一篇结束了数据泵导入在非归档模式下获 ...

最新文章

  1. php程序变量,PHP 变量
  2. 数据科学家 数据工程师_数据科学家实际上赚了多少钱?
  3. 【Java 多线程】互斥锁,自旋锁和读写锁
  4. Innodb内核线程并发机制
  5. 一个简单的十年回顾及展望
  6. 网页监控提醒工具WebMonitor
  7. 如何判断视频数据是H264编码
  8. Dynamics CRM 365 - 零基础入门学习后端插件的注册方法
  9. 2016-2017-2 《程序设计与数据结构》课程总结
  10. LeetCode 714. 买卖股票的最佳时机含手续费 | Python
  11. win10文件夹当作服务器,win10文件夹加密不了怎么办_网站服务器运行维护,win10
  12. 苹果企业开发者账号申请时间
  13. 已解决:Execution failed for task Unable to delete directory:D:\VPRO\Vo\build\.....
  14. 如何在Chrome中自定义新标签页
  15. 苹果软件测试的电池损耗准确,电池不耐用?教你如何检测iPhone电池损耗!
  16. java画好看坦克_坦克大战第一节——画出自己的坦克(新手篇)
  17. 【Python】唯品会购买商品
  18. 博途PLC 1200/1500PLC 工艺对象PID PID_Compact详细解读
  19. C# FileSystemWatcher监控新生成的文件
  20. Catia 二次开发 资料

热门文章

  1. 高效的JavaScript
  2. C#关键字=四六级核心词汇
  3. Stencil Buffer(模板缓冲区)
  4. 拓端tecdat|红圈律所微信公众号图文数据报告
  5. Linux下unzip乱码问题解决
  6. java 调用mysql视图_如何在java spring POJO类上注入和使用mysql视图代替表 . 是否可以使用视图...
  7. C++验证哥德巴赫猜想
  8. ValueError: This sheet is too large! Your sheet size
  9. Ubuntu 查看 Cuda 及 版本
  10. tf.data.Dataset.zip()讲解 和 python自带的zip()的异同