oracle *** 当前时间 oracle默认当前日期

牵着乌龟去散步 学知识 10

大家好,关于oracle *** 当前时间很多朋友都还不太明白,今天小编就来为大家分享关于oracle默认当前日期的知识,希望对各位有所帮助!

本文目录

  1. oracle数据库中字段默认取 *** 当前的时间
  2. oracle的数据导入到mysql中,遇到一个时间转换问题
  3. oracle怎么将当前时间减一年
  4. PL/SQL的时间 *** 问题

一、oracle数据库中字段默认取 *** 当前的时间

1、向表中 *** 数据时,orderform_no列只需要取 id_orderform.nextval就行.

2、对于orderform_time列,因为指定了默认值,所以 *** 数据时不用列出,将自动 *** 默认值即 *** 时间,当然也可以列出,这时候 *** 的就是你提供的值.

3、insert into orderform(orderform_no,orderform_consumer_no,orderform_status)

4、values(id_orderform.nextval,1,'aa');

5、insert into orderform(orderform_no,orderform_consumer_no,orderform_time,orderform_status)

6、values(id_orderform.nextval,2,to_date('2010-06-06','yyyy-mm-dd'),'bb');

7、上述序列只是创建了一个最简单的序列,各选项都采用的默认值.对于序列的详细创建语法,希望楼主能自己查阅相关资料,这样掌握更深刻.

二、oracle的数据导入到mysql中,遇到一个时间转换问题

OGG全称为Oracle GoldenGate,是由Oracle官方提供的用于解决异构数据环境中数据 *** 的一个商业工具。相比于其它迁移工具OGG的优势在于可以直接解析源端Oracle的redo log,因此能够实现在不需要对原表结构做太多调整的前提下完成数据增量部分的迁移。本篇文章将重点介绍如何使用OGG实现Oracle到MySQL数据的平滑迁移,以及讲述个人在迁移过程中所碰到问题的解决方案。

参照上图简单给大家介绍下OGG逻辑架构,让大家对OGG数据同步过程有个简单了解,后面章节会详细演示相关进程的配置方式,在OGG使用过程中主要涉及以下进程及文件:

Ma *** r进程:需要源端跟目标端同时运行,主要作用是 *** 管理其它进程,报告错误,分配及清理数据存储空间,发布阈值报告等

Extract进程:运行在数据库源端,主要用于捕获数据的变化,负责全量、增量数据的抽取

Trails文件:临时存放在磁盘上的数据文件

Data Pump进程:运行在数据库源端,属于Extract进程的一个辅助进程,如果不配置Data Pump,Extract进程会将抽取的数据直接发送到目标端的Trail文件,如果配置了Data Pump,Extract进程会将数据抽取到本地Trail文件,然后通过Data Pump进程发送到目标端,配置Data Pump进程的主要好处是即使源端到目标端发生 *** 中断,Extract进程依然不会终止

Collector进程:接收源端传输过来的数据变化,并写入本地Trail文件中

Replicat进程:读取Trail文件中记录的数据变化,创建对应的DML语句并在目标端回放

OGG版本 OGG 12.2.0.2.2 For Oracle OGG 12.2.0.2.2 For MySQL

数据库版本 Oracle 11.2.0.4 MySQL 5.7.21

OGG_HOME/home/oracle/ogg/opt/ogg

表结构迁移属于难度不高但内容比较繁琐的一步,我们在迁移表结构时使用了一个叫sqlines的开源工具,对于sqlines工具在MySQL端创建失败及不符合预期的表结构再进行特殊处理,以此来提高表结构转换的效率。

注意:OGG在Oracle迁移MySQL的场景下不支持DDL语句同步,因此表结构迁移完成后到数据库切换前尽量不要再修改表结构。

数据同步的 *** 作均采用OGG工具进行,考虑数据全量和增量的衔接,OGG需要先将增量同步的抽取进程启动,抓取数据库的redo log,待全量抽取结束后开启增量数据回放,应用全量和增量这段期间产生的日志数据,OGG可基于参数配置进行重复数据处理,所以使用OGG时优先将增量进行配置并启用。此外,为了避免本章节篇幅过长,OGG参数将不再解释,有需要的朋友可以查看官方提供的Reference文档查询任何你不理解的参数。

针对Oracle数据库,OGG需要数据库开启归档模式及增加辅助补充日志、强制记录日志等来保障OGG可抓取到完整的日志信息

查看当前环境是否满足要求,输出结果如下图所示:

OGG需要有一个用户有权限对数据库的相关对象做 *** 作,以下为涉及的权限,该示例将创建一个用户名和密码均为ogg的Oracle数据库用户并授予以下权限

(4)源端OGG表级补全日志(trandata)配置

表级补全日志需要在最小补全日志打开的情况下才起作用,之前只在数据库级开启了最小补全日志(alter database add supplemental log data;),redolog记录的信息还不够全面,必须再使用add trandata开启表级的补全日志以获得必要的信息。

(5)源端OGG抽取进程(extract)配置

Extract进程运行在数据库源端,负责从源端数据表或日志中捕获数据。Extract进程利用其内在的checkpoint机制,周期 *** 地检查并记录其读写的位置,通常是写入到本地的trail文件。这种机制是为了保证如果Extract进程终止或者 *** 作 *** 宕机,我们重启Extract进程后,GoldenGate能够恢复到以前的状态,从上一个断点处继续往下运行,而不会有任何数据损失。

(6)源端OGG传输进程(pump)配置

pump进程运行在数据库源端,其作用非常简单。如果源端的Extract抽取进程使用了本地trail文件,那么pump进程就会把trail文件以数据块的形式通过TCP/IP协议发送到目标端,Pump进程本质上是Extract进程的一种特殊形式,如果不使用trail文件,那么Extract进程在抽取完数据后,直接投递到目标端。

补充:pump进程启动时需要与目标端的mgr进程进行连接,所以需要优先将目标端的mgr提前配置好,否则会报错连接被拒绝,无法传输抽取的日志文件到目标端对应目录下

(7)源端OGG异构 *** pping文件(defgen)生成

该文件记录了源库需要 *** 的表的表结构定义信息,在源库生成该文件后需要拷贝到目标库的dirdef目录,当目标库的replica进程将传输过来的数据apply到目标库时需要读写该文件,同构的数据库不需要进行该 *** 作。

mysql> create user'ogg'@'%' identified by'ogg';

mysql> grant all on*.* to'ogg'@'%';

####提前创建好ogg存放checkpoint表的数据库

mysql> create database ogg;

(2)目标端OGG管理进程(MGR)配置

目标端的MGR进程和源端配置一样,可直接将源端配置方式在目标端重复执行一次即可,该部分不在赘述

(3)目标端OGG检查点日志表(checkpoint)配置

checkpoint表用来保障一个事务执行完成后,在MySQL数据库从有一张表记录当前的日志回放点,与MySQL *** 记录binlog的GTID或position点类似。

####切换至ogg软件目录并执行ggsci进入命令行终端

checkpointtable ogg.ggs_checkpoint

ggsci> dblogin so *** cedb ogg@17X.1X.84.121:3306 userid ogg

ggsci> add checkpointtable ogg.ggs_checkpoint

(4)目标端OGG回放线程(replicat)配置

oracle插入当前时间 oracle默认当前日期-第1张图片-

Replicat进程运行在目标端,是数据投递的最后一站,负责读取目标端Trail文件中的内容,并将解析其解析为DML语句,然后应用到目标数据库中。

####切换至ogg软件目录并执行ggsci进入命令行终端

####添加一个回放线程并与源端pump进程传输过来的trail文件关联,并使用checkpoint表确保数据不丢失

ggsci> add replicat r_cms,exttrail/opt/ogg/dirdat/ms,checkpointtable ogg.ggs_checkpoint

targetdb cms@17X.1X.84.121:3306,userid ogg,password ogg

so *** cedefs/opt/ogg/dirdef/cms.def

discardfile/opt/ogg/dirrpt/r_cms.dsc,append,megabytes 1024

注意:replicat进程只需配置完成,无需启动,待全量抽取完成后再启动。

待全量数据抽取完毕后启动目标端回放进程即可完成数据准实时同步。

全量数据同步为一次 *** *** 作,当OGG软件部署完成及增量抽取进程配置并启动后,可配置1个特殊的extract进程从表中抽取数据,将抽取的数据保存到目标端生成文件,目标端同时启动一个单次运行的replicat回放进程将数据解析并回放至目标数据库中。

(1)源端OGG全量抽取进程(extract)配置

####切换至ogg软件目录并执行ggsci进入命令行终端

####增加/编辑全量抽取进程配置文件

####其中RMTFILE指定抽取的数据直接传送到远端对应目录下

####注意:RMTFILE参数指定的文件只支持2位字符,如果超过replicat则无法识别

SETENV(NLS_LANG="AMERICAN_AMERICA.AL32UTF8")

SETENV(ORACLE_HOME=/data/oracle/11.2/db_1)

RMTHOST 17X.1X.84.121,MGRPORT 7809

RMTFILE/opt/ogg/dirdat/ms, *** xfiles 100,megabytes 1024,p *** ge

shell> nohup./extract paramfile./dirprm/ei_cms.prm reportfile./dirrpt/ei_cms.rpt&

##查看日志是否正常进行全量抽取

shell> tail-f./dirrpt/ei_cms.rpt

(2)目标端OGG全量回放进程(replicat)配置

####切换至ogg软件目录并执行ggsci进入命令行终端

TARGETDB cms@17X.1X.84.121:3306,USERID ogg,PASSWORD ogg

D *** CARDFILE./dirrpt/ri_cms.dsc,p *** ge

shell> nohup./replicat paramfile./dirprm/ri_cms.prm reportfile./dirrpt/ri_cms.rpt&

####查看日志是否正常进行全量回放

shell> tail-f./dirrpt/ri_cms.rpt

数据校验是数据迁移过程中必不可少的环节,本章节提供给几个数据校验的思路共大家参数,校验方式可以由以下几个角度去实现:

1.通过OGG日志查看全量、增量过程中discards记录是否为0来判断是否丢失数据;

2.通过对源端、目标端的表执行count判断数据量是否一致;

3.编写类似于pt-table-checksum校验原理的程序,实现行级别一致 *** 校验,这种方式优缺点特别明显,优点是能够完全准确对数据内容进行校验,缺点是需要遍历每一行数据,校验成本较高;

4.相对折中的数据校验方式是通过业务角度,提前编写好数十个返回结果较快的SQL,从业务角度抽样校验。

本章节将讲述迁移过程中碰到的一些问题及相应的解决方式。

在Oracle到MySQL的表结构迁移过程中主要碰到以下两个 *** :

1. Oracle端的表结构因为最初设计不严谨,存在大量的列使用varchar(4000)数据类型,导致迁移到MySQL后超出行 *** ,表结构无法创建。由于MySQL本身数据结构的 *** ,一个16K的数据页最少要存储两行数据,因此单行数据不能超过65,535 bytes,因此针对这种情况有两种解决方式:

根据实际存储数据的长度,对超长的varchar列进行收缩;

对于无法收缩的列转换数据类型为text,但这在使用过程中可能导致一些 *** 能问题;

2.与之一点类似,在Innodb存储引擎中,索引前缀长度 *** 是767 bytes,若使用DYNAMIC、COMPRESSED行格式且开启innodblargeprefix的场景下,这个 *** 是3072 bytes,即使用utf8mb4字符集时,最多只能对varchar(768)的列创建索引;

3.使用ogg全量初始化同步时,若存在外键约束,批量导入时由于各表的 *** 顺序不唯一,可能子表先 *** 数据而主表还未 *** ,导致报错子表依赖的记录不存在,因此建议数据迁移阶段禁用主外键约束,待迁移结束后再打开。

mysql>set global forei *** _key_checks=off;

HANDLECOLL *** IONS参数是实现OGG全量数据与增量数据衔接的关键,其实现原理是在全量抽取前先开启增量抽取进程,抓去全量应用期间产生的redo log,当全量应用完成后,开启增量回放进程,应用全量期间的增量数据。使用该参数后增量回放DML语句时主要有以下场景及处理逻辑:

目标端不存在delete语句的记录,忽略该问题并不记录到discardfile

-更新的是主键值,update转换成insert

-更新的键值是非主键,忽略该问题并不记录到discardfile

目标端重复insert已存在的主键值,这将被replicat进程转换为UPDATE现有主键值的行

在OGG版本选择上我们也根据用户的场景多次更换了OGG版本,最初因为客户的Oracle数据库版本为11.2.0.4,因此我们在选择OGG版本时优先选择使用了11版本,但是使用过程中发现,每次数据抽取生成的trail文件达到2G左右时,OGG报错连接中断,查看RMTFILE参数详细说明了解到trail文件默认 *** 为2G,后来我们替换OGG版本为12.3,使用MAXFILES参数控制生成多个指定大小的trail文件,回放时Replicat进程也能自动轮转读取Trail文件,最终解决该问题。但是如果不幸Oracle环境使用了Linux 5版本的 *** ,那么你的OGG需要再降一个小版本,更高只能使用OGG 12.2。

在迁移过程中还碰到一个比较难搞的问题就是当前Oracle端存在大量表没有主键。在MySQL中的表没有主键这几乎是不被允许的,因为很容易导致 *** 能问题和主从延迟。同时在OGG迁移过程中表没有主键也会产生一些隐患,比如对于没有主键的表,OGG默认是将这个一行数据中所有的列拼凑起来作为唯一键,但实际还是可能存在重复数据导致数据同步异常,Oracle官方对此也提供了一个解决方案,通过对无主键表添加GUID列来作为行唯一标示,具体 *** 作方式可以搜索MOS文档ID 1271578.1进行查看。

2019-03-08 06:15:22 ERROR OGG-01201 Error reported by MGR: Access denied.

错误信息含义源端报错表示为该抽取进程需要和目标端的mgr进程通讯,但是被拒绝,具体 *** 作为:源端的extract进程需要与目标端mgr进行沟通,远程将目标的replicat进行启动,由于安全 *** 现在而被拒绝连接。

在Oracle OGG 11版本后,增加了新特 *** 安全 *** 要求,如果需要远程启动目标端的replicat进程,需要在mgr节点增加访问控制参数允许远程调用

在源端和目标端的mgr节点上分别增加访问控制规则并重启

##表示该mgr节点允许(ALLOW)10.186网段(IPADDR)的所有类型程序(PROG*)进行连接访问ACCESSRULE, PROG*, IPADDR 10.186.*.*, ALLOW

2019-03-15 14:49:04 ERROR OGG-011 *** Trying to use RMTTASK on data types which *** y be written as LOB c *** ks(Table:'UNIONPAYCMS.CMS_OT_CONTENT_RTF').

根据官方文档说明,当前直接通过Oracle数据库抽取数据写到MySQL这种initial-load方式,不支持LOBs数据类型,而表 UNIONPAYCMS.CMSOTCONTENT_RTF则包含了CLOB字段,无法进行传输,并且该方式不支持超过4k的字段数据类型

将抽取进程中的RMTTASK改为RMTFILE参数官方建议将数据先抽取成文件,再基于文件数据解析进行初始化导入

三、oracle怎么将当前时间减一年

1、首先,打开sql,连接到oracle数据库,使用sql语句创建测试表,如下图所示,然后进入下一步。

2、其次,使用sql语句将3行测试数据 *** 上一步创建的测试表中。使用当前 *** 时间 *** 日期字段,如下图所示,然后进入下一步。

3、接着,完成上述步骤后,单击左上角箭头所指“提交”按钮以将更改提交到数据库以保存,如下图所示,然后进入下一步。

4、然后,完成上述步骤后,查询刚刚 *** 的数据,如下图所示,然后进入下一步。

Updatedate”字段的值。这时,直接拼接的日期格式的字符串已更新,并且Oracle无法执行,如下图所示,然后进入下一步。

Updatedate”字段的值,将字符串的版本日期转换为日期类型的权重类型,然后稍后对其进行修改以进行更新,如下图所示,然后进入下一步。

7、最后,修改之一行中Updatedate字段的值,使用当前日期减去一年就可以了,如下图所示。这样,问题就解决了。

四、PL/SQL的时间 *** 问题

如果你的hiredate栏位是日期类型的话,那你的语句可以这样写

insert into emp(empno,ename,job,mgr,hiredate,sal,comm,deptno) values(v_empno,v_ename,v_job,v_mgr,to_date(v_hiredate,'yyyy-mm-dd'),v_sal,v_comm,v_deptno);

注意你在执行这段程式提示"输入出生日期"时,你也要按照 yyyy-mm-dd的格式输入,比如今天是2007年10月24日,那你就应该输入 2007-10-24.

否则就会报错的,反正你要保证输入的格式和insert语句中 to_date指定的格式一致就可以了,祝你好运!!!!

关于oracle *** 当前时间的内容到此结束,希望对大家有所帮助。

标签: 当前 oracle *** 默认 日期

抱歉,评论功能暂时关闭!