-
Oracle 中like常用但是其效率不是高。特别是使用%a%-----》全局扫描,没有利用到任何索引。情况可以的条件尽量下使用a%------》可以利用正序的索引。%a------》可以利用反序的索引(当然得已有反序的索引)。使用instr函数取代like查询,可提高效率,在海量数据中效果尤其明显。1.%a%方式:select * from pub_yh_bm twhere instr(t.chr_bmdm,'2')>0等份于:select * from pub_yh_bm twhere t.chr_bmdm like '%2%'2.%a方式:select * from pub_yh_bm twhere instr(t.chr_bmdm,'110101')=length(t.chr_bmdm)-length('110101')+1等份于:select * from pub_yh_bm twhere t.chr_bmdm like '%110101'3.a%方式:select * from pub_yh_bm twhere instr(t.chr_bmdm,'11010101')=1等份于:select * from pub_yh_bm twhere t.chr_bmdm like '11010101%'ORACLE中的支持正则表达式的函数主要有下面四个:1,REGEXP_LIKE :与LIKE的功能相似2,REGEXP_INSTR :与INSTR的功能相似3,REGEXP_SUBSTR :与SUBSTR的功能相似4,REGEXP_REPLACE :与REPLACE的功能相似它们在用法上与Oracle SQL 函数LIKE、INSTR、SUBSTR 和REPLACE 用法相同,但是它们使用POSIX 正则表达式代替了老的百分号(%)和通配符(_)字符。POSIX 正则表达式由标准的元字符(metacharacters)所构成:'^' 匹配输入字符串的开始位置,在方括号表达式中使用,此时它表示不接受该字符集合。'$' 匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹配 '\n' 或 '\r'。'.' 匹配除换行符之外的任何单字符。'?' 匹配前面的子表达式零次或一次。'+' 匹配前面的子表达式一次或多次。'*' 匹配前面的子表达式零次或多次。'|' 指明两项之间的一个选择。例子'^([a-z]+|[0-9]+)$'表示所有小写字母或数字组合成的字符串。'( )' 标记一个子表达式的开始和结束位置。'[]' 标记一个中括号表达式。'{m,n}' 一个精确地出现次数范围,m=出现m次。\num 匹配 num,其中 num 是一个正整数。对所获取的匹配的引用。字符簇:[[:alpha:]] 任何字母。[[:digit:]] 任何数字。[[:alnum:]] 任何字母和数字。[[:space:]] 任何白字符。[[:upper:]] 任何大写字母。[[:lower:]] 任何小写字母。[[:punct:]] 任何标点符号。[[:xdigit:]] 任何16进制的数字,相当于[0-9a-fA-F]。各种操作符的运算优先级\转义符(), (?:), (?=), [] 圆括号和方括号*, +, ?, {n}, {n,}, {n,m} 限定符^, $, anymetacharacter 位置和顺序范例:--regexp_like--查询value中以1开头60结束的记录并且长度是7位select * from fzq where value like '1____60';select * from fzq where regexp_like(value,'1....60');--查询value中以1开头60结束的记录并且长度是7位并且全部是数字的记录。--使用like就不是很好实现了。select * from fzq where regexp_like(value,'1[0-9]{4}60');-- 也可以这样实现,使用字符集。select * from fzq where regexp_like(value,'1[[:digit:]]{4}60');-- 查询value中不是纯数字的记录select * from fzq where not regexp_like(value,'^[[:digit:]]+$');-- 查询value中不包含任何数字的记录。select * from fzq where regexp_like(value,'^[^[:digit:]]+$');--查询以12或者1b开头的记录.不区分大小写。select * from fzq where regexp_like(value,'^1[2b]','i');--查询以12或者1b开头的记录.区分大小写。select * from fzq where regexp_like(value,'^1[2B]');-- 查询数据中包含空白的记录。select * from fzq where regexp_like(value,'[[:space:]]');--查询所有包含小写字母或者数字的记录。select * from fzq where regexp_like(value,'^([a-z]+|[0-9]+)$');--查询任何包含标点符号的记录。select * from fzq where regexp_like(value,'[[:punct:]]');select * from Dba_Tables b where regexp_like(b.table_name,'^[[A-Z]]$') And b.owner='SSCP2'来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26015009/viewspace-730802/,如需转载,请注明出处,否则将追究法律责任。
-
情况是这样,最近有一个新需求是要对一个现有库里面的敏感信息加密,总计300W左右的数据,比如地址,电话,手机号码,包括但不限于以上的东西。然后需要找到这个词然后进行加密 。 如果是一般的这个对象可能也就直接处理了 。但是我使用的是json来存储的这些所有信息。 再加之我使用的是oracle数据库,oracle对于json的支持,本身就没有postgre来的好。这就让人感到烦躁了 ,然后最开始用了一个特别蠢的办法。先把所有的错词入库,然后使用了 listagg 和oracle的正则regex_like 联合使用。根据区划循环。然后把把查到的错词记录下来 。但是 噩梦开始了 ,刚开始没做异常处理(蜜汁自信)结果就是 跑了好十几个小时的数据,没错你没看错 十几个小时, 我人傻了 。然后因为数据有问题,导致十几小时的心血白费。但是时间已经来不及再跑十几小时了,那么就只能用多线程拉力处理这个问题了 。@Testpublic void test() throws Exception{ CountDownLatch countDownLatch = new CountDownLatch(3); // 创建线程池 ExecutorService executorService = Executors.newFixedThreadPool(3); //根据区划来查找错词 List<SysOrg> entities = sysOrgDao.getListError(); if (entities.size() > 0) { //分批查询错词表,因为如果全部查询错词表,数据太大 List<HlSheet> Sheets = new ArrayList<>(); HlSheet sheet = new HlSheet("列表", columns); executorService.execute(() -> { List<String> names = new ArrayList<>(); names =itemDao.getWord(); for (SysOrganizationEntity entity : entities) { List<SInfo> sInfos = new ArrayList<>(); List<SInfoNew> sInfoNew= new ArrayList<>(); String orgId = entity.getId(); String type = entity.getType(); int i = Integer.parseInt(type); if (names.size() > 0) { for (String name : names) { sInfoNew= itemDao.getErrorList(orgId, name,i); sInfos.addAll(sInfoNew); } } sysOrgDao.updateFlag(orgId); } // 关闭子线程 countDownLatch.countDown(); }); File out = new File(outDir, "abc" + ".xlsx"); if (!out.getParentFile().exists()) { out.getParentFile().mkdirs(); } FileOutputStream outStream; try { outStream = new FileOutputStream(out); if (Sheets .size()>0) { ExcelUtils.writeExcel(outStream, Sheets .toArray(new HlSheet[0])); } outStream.flush(); outStream.close(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }}在这次用多线程之前,其实一直没用过这种方式。所以在之前先用过其他方法 。本来是觉得循环错词来for循环查找的话效率就很慢,就想当然的觉得分批了regex_Like回效率更高,结果真的是把人给搞吐了 ,效率及其的低。所以之后如果是在json里面处理数据的话建议还是就正常的使用like(当然这个是小批量数据的情况下 )Oracle 中like常用但是其效率不是高,目前根据我走测试sql的执行时间来看是别regex_like的速度要快很多。特别是使用%a%-----》全局扫描,没有利用到任何索引。情况可以的条件尽量下使用a%------》可以利用正序的索引。%a------》可以利用反序的索引(当然得已有反序的索引)。使用instr函数取代like查询,可提高效率,在海量数据中效果尤其明显。经过这个之后,一定要记得1.处理数据前一定记得加异常处理,因为你永远不知道,永远想不到有什么数据在等着你,就算没有加异常,也千万不要想我这样全部处理完之后才输出结果2.数据库中使用索引提高效率,3.regex_like 查json里面的值,再加上嵌套循环之后效率真心低。4.多线程线程数不要开的太多。补充一个第五点,5.千万千万记得关闭线程,不然你就等着你的CPU 和内存的占用飙升直至百分百然后电脑宕机吧 。
-
1、Mysql一、mysqldump步骤:1.使用mysqldump导出自建数据库的数据2.将导出的两个文件上传到ECS实例上3.将导出的文件导入到目标RDS中4.导入成功后登录RDS实例数据库中查看数据是否正常。二、数据复制DRS步骤:(以本地mysql迁移至RDS为例)1.在“实时迁移管理”页面,单击“创建迁移任务”,进入创建迁移任务页面。2.在“迁移实例”页面,填选区域、任务名称、描述、迁移实例信息。3.在“源库及目标库”页面,迁移实例创建成功后,填选源库信息和目标库信息,单击“源库和目标库”处的“测试连接”,分别测试并确定与源库和目标库连通后,勾选协议。4.在“迁移设置”页面,设置迁移用户和迁移对象.5.在“预检查”页面,进行迁移任务预校验,校验是否可进行迁移。6.进入“参数对比”页面,进行参数对比。7.在“任务确认”页面,设置迁移任务的启动时间、任务异常通知设置、SMN主题、时延阈值、任务异常自动结束时间,并确认迁移任务信息无误后,单击“启动任务”,提交迁移任务。2. SQL server 工具1 使用SQLserver导入导出功能将本地SQL Server数据库迁移到RDS for SQL Server二、步骤:(以本地sqlserver迁移至RDS为例)1.登录控制台,选择“数据库 > 云数据库 RDS”“实例管理”页面,选择目标实例,单击实例名称,进入实例的“基本信息”页签。2.在“基本信息”页签下单击“绑定”,在弹出框选择对应的弹性IP。3.在本地安装SQL Server客户端管理工具,通过弹性IP进行连接4.通过SQL Server自带的脚本生成工具,生成ECS上的数据库结构脚本5.在SSMS客户端中打开生成的脚本SQL文件,连接到RDS对应实例上。6.完成以上步骤后通过SQL Server自带的导入导出功能完成数据迁移。工具2 DRS备份迁移步骤 https://support.huaweicloud.com/backupmig-drs/drs_02_0009.html1.在“备份迁移管理”页面,单击“创建迁移任务”。在“选定备份”页面输入任务名称和描述,填选备份文件信息,单击“下一步”。在“选定目标”页面,根据所选数据库类型,配置相应的数据库信息,单击“下一步”在“信息确认”页面核对配置详情后,勾选协议,单击“下一步”。在“备份迁移管理”页面任务列表中,观察对应的恢复任务的状态为“恢复中”,恢复成功后,任务状态显示“成功”。工具3 Golden Gate 在源端和目标端的数据盘建立ggs目录将OGG软件包解压到ggs目录中打开源端和目标的SQL Server代理服务并将启动类型改为自动在源端建立数据库source,目标端建立数据库target在源端和目标端SQLServer中执行对应的语句创建测试表为源端和目标端创建用户,并授权源端:并授权用户名和密码在源端source库启用cdc在源端和目标端分别创建ODBC数据源ogg配置,源端和目标端的ogg安装目录中执行ggsci。 配置完成,测试迁移是否正常使用3、Oracle一、工具1.若采用工具流至云下或云上自建oracle:Oracle Golden Gate/Data guard/Always On/数据库自带迁移工具等2.若采用公有云服务至云数据库postgre:UGO+DRS二、Oracle数据库迁移上云的流程迁移上云流程(以GoldenGate为例)Oracle GoldenGate 数据复制过程如下:利用抽取进程(Extract Process)在源端数据库中读取Online Redo Log或者Archive Log,然后进行解析,只提取其中数据的变化信息,比如DML操作——增、删、改操作将抽取的信息转换为GoldenGate自定义的中间格式存放在队列文件(trail file)中再利用传输进程将队列文件(trail file)通过TCP/IP传送到目标系统。目标端有一个进程叫Server Collector,这个进程接受了从源端传输过来的数据变化信息把信息缓存到GoldenGate 队列文件(trail file)当中,等待目标端的复制进程读取数据。• GoldenGate 复制进程(replicat process)从队列文件(trail file)中读取数据变化信息,并创建对应的SQL语句,通过数据库的本地接口执行,提交到目标端数据库,提交成功后更新自己的检查点,记录已经完成复制的位置,数据的复制过程最终完成
-
【功能模块】Oracle的months_between函数迁移,在论坛下面连接找了一个自定义函数,效率非常慢。数据量很小,77万条记录。脚本没有加上这个函数,只需要3秒钟就能跑完,加上这个函数一直跑不出来,然后等待了一次,发下花了47分钟。后面反复验证,就是这个函数的问题。因为通过单一变量原则,只要一加上这个函数,就跑不动。一去掉就是3秒钟出结果。请问下有没有其他的方式,效率没问题有的。https://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=122098&page=1#pid1500638CREATE OR REPLACE FUNCTION MONTHS_BETWEEN(date, date) RETURNS double precision AS $$ SELECT CASE --WHEN EXTRACT(day from $1) = EXTRACT(day FROM $2) THEN /* the two dates have the same day component */ -- EXTRACT(year FROM $1) * 12 + EXTRACT(month FROM $1) - EXTRACT(year FROM $2) * 12 - EXTRACT(month FROM $2) WHEN (EXTRACT(day FROM $1) = EXTRACT(day FROM (date_trunc('MONTH', $1) + INTERVAL '1 MONTH - 1 day'))) and (EXTRACT(day FROM $2) = EXTRACT(day FROM (date_trunc('MONTH', $2) + INTERVAL '1 MONTH - 1 day'))) THEN /* both the last day of the month */ EXTRACT(year FROM $1) * 12 + EXTRACT(month FROM $1) - EXTRACT(year FROM $2) * 12 - EXTRACT(month FROM $2) when (EXTRACT(day FROM $1) = EXTRACT(day FROM (date_trunc('MONTH', $1) + INTERVAL '1 MONTH - 1 day'))) and (EXTRACT(day FROM $2) <> EXTRACT(day FROM (date_trunc('MONTH', $2) + INTERVAL '1 MONTH - 1 day'))) then (EXTRACT(year FROM $1)-EXTRACT(year FROM $2))*12+ EXTRACT(month FROM $1)-EXTRACT(month FROM $2)+1-EXTRACT(day FROM $2)/31 when (EXTRACT(day FROM $1) <> EXTRACT(day FROM (date_trunc('MONTH', $1) + INTERVAL '1 MONTH - 1 day'))) and (EXTRACT(day FROM $2) = EXTRACT(day FROM (date_trunc('MONTH', $2) + INTERVAL '1 MONTH - 1 day'))) then (EXTRACT(year FROM $1)-EXTRACT(year FROM $2))*12+ EXTRACT(month FROM $1)-EXTRACT(month FROM $2)-1+ EXTRACT(day FROM $1)/31 ELSE (EXTRACT(year FROM $1)-EXTRACT(year FROM $2))*12+ EXTRACT(month FROM $1)-EXTRACT(month FROM $2)+ (EXTRACT(day FROM $1)-EXTRACT(day FROM $2))/31END
-
目前,中国已经进入“人人都是开发者,家家都是数据公司”的新数据库时代。今日,CSDN 创始人&董事长、极客帮创投创始合伙人蒋涛发表了《新数据库时代》主题演讲分享。他指出,在开源吞噬世界的背景下,数据库也在大力拥抱开源。不同于传统关系型数据库,新型数据库已成为行业风口,急需大量相关人才汇入,青年才俊应当抓住机遇,迎接挑战。以下是蒋涛演讲实录:大家好,我是CSDN创始人蒋涛。我是程序员出身,30年前数据库就是程序员的必备技能,而近几年,数据库又有了很大的发展。作为投资人,我也曾投资过巨杉数据库。CSDN目前是中国知名的技术社区,据最新数据显示,CSDN的用户量已经超过3,600万,公司规模也在不断发展壮大。如今,开发者变得越来越重要,我们围绕着开发者建立了一系列业务支持体系,帮助开发者获得能力与成长。其中,不仅有协助开发的工具开发云(https://dev.csdn.net),还有帮助大家找到更好职业的人才云等。目前,开发者市场越来越好,相信“人人都是开发者,家家都是技术公司”的时代不久后就要到来。在此背景下,中国想要构建自己的核心技术生态,数据库是其中关键。今天我将围绕三个部分分享《新数据库时代》:第一是揭示「我们正在进入的数据大时代」现状;第二是了解「开源正在吞噬数据库」的改变;第三是把握「新型的数据库人才特别抢手」的趋势。1、数据大时代我们正处于大数据时代,几乎每家公司都在对自己的业务进行数字化变革。据统计,全球数据量每年持续增加,去年全球产生的数据总量是79ZB,2025年预计将达到180ZB。由于云技术的发展,越来越多的数据都存储在云端。数据显示,在2016年只有10%的数据储存在云端的数据仓库里,但到了2022年,这个数字已经快速增长到了75%,这说明随着数字经济的发展,每家公司都将成为数据公司,数据库市场也迎来了爆炸性增长。数据库市场历史其实非常悠久,从1964年,世界上第一个数据库系统IDS(Integrated Data Storage,集成数据存储)诞生开始,到今天数据库发展已经快60年。1980年代,数据库开始在中国生根发芽。直到现在,整个全球市场依然保持了20%以上的增长规模。尽管数据库是个古老的技术,但其中又蕴含了很多新的机会。从数据库技术公司融资情况来看,数字非常惊人。过去10年,数据库公司融资总额87亿,其中一半是在过去两年内完成的。2021年,超级独角兽大数据公司Databricks两轮融资总额为26亿美元。如此看来,数据库技术也进入到了一个新时代。2、开源吞噬数据库那么数据库的技术进入到新时代的标志是什么?即“开源吞噬数据库”。开源已经成为所有开发者的必选项,据GitHub统计数据:2016年仅有80万人第一次做出开源代码贡献,而2021年,这个数字已经增长到300万。在数据库领域中,开源的“吞噬”情况也十分明显。dbdb.io(卡内基梅隆大学维护的全球数据库信息库)分析了全球知名的841个数据库系统,其中开源数据库有608个,占比72%,只有200多家是商业数据库。在全球顶尖数据库排行榜中,开源数据库也占到一半。在CSDN制作的2021 数据库全景图(V1.0)中,我们将不同领域的数据库按照开源和闭源两类进行颜色区分,右侧浅绿色的部分是开源数据库,左侧深绿色的部分是闭源数据库。可以很明显地看到开源在快速发展,且有吞噬闭源数据库的趋势。中国数据库在发展核心技术生态的大背景下,也发展得非常的迅猛。dbdb.io(卡内基梅隆大学维护的全球数据库信息库)统计的全球800多家数据库企业中,中国有56家,但实际上中国数据库厂商有200多家。尤其在新型数据库上,中国企业“冒头”较多,例如现在发展势头强劲的TiDB,在GitHub上非常活跃。当然,开发者目前使用较多的还是相对传统的基础关系型数据库MySQL,还有大数据领域Redis、Apache/Hive、MongoDB等相对比较传统的技术,但绝大部分都是开源的。尽管最普遍被使用的依然是关系型数据库,但新型数据库则代表了未来趋势。根据CSDN 2021-2022年数据库开发者大调查显示,在云趋势下,有52%的公司已经部署了云数据库,只有23%的公司尚未计划部署云数据库。新型数据库人才抢手对于目前的就业环境,我认为开发者应当好好学习数据库技术,并且不要局限于仅学习关系型数据库,更要学新型数据库。为什么呢?新型数据库的技术栈跟过去大有不同,关系型数据库只是里面最基础的一环,而数据分析、数据仓库、可视化等很多新型技术栈在涌现。开源中比较热门的新数据库类型包括分布式数据库、时序数据库、图数据库、流式数据库等都在GitHub上排名非常靠前,Star数也非常高。20年前,市面上只有关系型数据库,主要面向事务性的交易。而如今得益于云、微服务、分布式应用、全球规模、实时数据、深度学习等,新的数据库架构应运而生,以解决新的性能需求:快速读取和快速写入的不同系统;专门用于支持实时分析的系统;用于非结构化、半结构化、事务性、关系、图形或时间序列数据的系统;适用于缓存、搜索、基于索引、事件等的数据……据统计,一家企业平均在七个或更多不同的数据库中存储数据。这些新技术带来了新机会,同时也加大了市场对人才的需求。我国数据工程师真正诞生是在十几年前。而现在,随着数据量的激增且更多地存储在云端,越来越多公司变成数据公司、市场对数据公司的需求也在持续增长。基于数据做分析的数据分析工程师也非常重要,他们既要了解数据库的技术,又要懂业务,才能更好地进行数据分析,这样的人才在未来会非常紧俏。据Glassdoor(美国一家做企业点评与职位搜索的职场社区)统计,从2016年到2020年,“数据科学家”在美国最佳工作排行榜中一直位居榜首,被称为21世纪最性感的工作。现在,数据科学家和数据工程师的需求还在持续上升,薪资也是。目前,中国对数据库人才的需求也具有相同趋势,尽管过去在关系型数据库领域处于引领地位的还是Oracle的MySQL数据库。但我相信,中国未来会构建自己的数据库新生态。中国也非常有机会在新技术上进行弯道超车,例如腾讯云数据库TDSQL,以及其他新型数据库。同时,也希望更多CSDN平台上的开发者能够加入新型数据库赛道中来,并欢迎大家去参加能力认证活动。
-
利用华为云云数据库RDS和分布式数据库中间件DDM完成Oracle应用迁移上云,提高访问效率,轻松应对高并发的实时交易场景,若采用工具流:Oracle Golden Gate/Data guard/Always On/数据库自带迁移工具等若采用公有云服务:DRS数据复制服务(偏同构数据库)1、Oracle数据库迁移上云的工具和流程迁移上云的工具5Oracle数据库可以使用OGG迁移上云流程Oracle GoldenGate 数据复制过程如下:利用抽取进程(Extract Process)在源端数据库中读取Online Redo Log或者Archive Log,然后进行解析,只提取其中数据的变化信息,比如DML操作——增、删、改操作将抽取的信息转换为GoldenGate自定义的中间格式存放在队列文件(trail file)中再利用传输进程将队列文件(trail file)通过TCP/IP传送到目标系统。目标端有一个进程叫Server Collector,这个进程接受了从源端传输过来的数据变化信息把信息缓存到GoldenGate 队列文件(trail file)当中,等待目标端的复制进程读取数据。GoldenGate 复制进程(replicat process)从队列文件(trail file)中读取数据变化信息,并创建对应的SQL语句,通过数据库的本地接口执行,提交到目标端数据库,提交成功后更新自己的检查点,记录已经完成复制的位置,数据的复制过程最终完成。2、Oracle迁移至数据仓库(GaussDB)的工具和流程使用DRS的实时同步功能将本地Oracle数据库实时迁移至华为云GaussDB(for openGauss)。通过全量+增量同步,实现源数据库Oracle和目标数据库GaussDB(for openGauss)的数据长期同步。(1)迁移至数据仓库的工具:DRS(2)迁移至数据仓库的流程:创建VPC和安全组创建GaussDB(for openGauss)实例迁移前构造数据迁移数据库(创建DRS实例,将本地Oracle上的test_info数据库迁移到GaussDB(for openGauss)实例中test_database_info数据库中)迁移后进行数据校验PS:补充业务架构和迁移原理(防止考到)1、业务架构图2、迁移原理次实践使用全量+增量同步功能,原理如下:全量同步阶段,先进行结构迁移,例如表、主键、唯一键的迁移。结构迁移完成后,启动增量数据抽取,以确保全量数据同步期间的增量数据完整的抽取到DRS实例。启动全量迁移任务。全量迁移完成后自动进入增量同步,从全量迁移开始抽取的位点开始回放。当增量回放全部完成后,启动比对任务进行一致性检查,支持实时比对。实时比对数据一致时,可以启动业务割接。
-
在ecs购买了麒麟系统-鲲鹏cpu,想在这个系统上安装oracle数据库,但是arm架构好像没法安装,有没有解决方案
-
DB-Engines 数据库流行度排行榜发布了 6 月份的更新。可以看到,分数明显上涨的数据库包括 Oracle、PostgreSQL 和 MongoDB,其中 Oracle 分数上涨最多 —— 较上个月增加了 24.92 分。MySQL 和 Redis 的分数则略有下跌,尤其是 MySQL 的分数已连续下跌了两个月。下图是 TOP 10 数据库的最新分数和变化情况。排名方面,Snowflake 较上个月上升了 1 个名次,目前的排名是 13,看来有望进入前十。Snowflake 去年曾获得 “2021 年度数据库” 称号。继续看看主流数据库的分数趋势变化:最后看看各类型数据库的排名情况。关系数据库前 10 名Key-Value 数据库前 10 名文档数据库前 10 名时序数据库前 10 名图数据库前 10 名DB-Engines 根据流行度对数据库管理系统进行排名,排名每月更新一次。排名的数据依据 5 个不同的指标:Google 以及 Bing 搜索引擎的关键字搜索数量Google Trends 的搜索数量Indeed 网站中的职位搜索量LinkedIn 中提到关键字的个人资料数Stackoverflow 上相关的问题和关注者数量这份榜单分析旨在为数据库相关从业人员提供一个技术方向的参考,其中涉及到的排名情况并非基于产品的技术先进程度或市场占有率等因素。无论排名先后,选择适合与企业业务需求相比配的技术才是最重要的。
-
1、ORA-12571、ORA-03113、ORA-03114、ORA-01041 特征:客户端(代理或应用服务器)有时报这类断连错误 原因:如果偶尔出现一次,则可能为网络原因或用户异常中止,如果经常出现则为客户端与服务端的字符集不一致。 措施:如果偶尔出现,可在服务端的协议配置文件PROTOCOL.ORA中增加一行 TCP.NODELAY=YES; 如果经常出现,则为客户端与服务端字符集不一致或网络原因。 客户端的字符集在注册表里定义: HKEY__LOCAL__MACHINE/SOFTWARE/ORACLE/NLS__LANG 在客户端注册表中的TCP参数项中设置 TCPMAXDATARETRANSMITIONS=20。 2、ORA-01000 特征:达到会话允许的最大游标数 原因:达到会话允许的最大游标数 措施:有两种解决方法: (1)在初始化文件INIT.ORA文件中增加OPEN_CURSORS的数量,一般要求大于200。 (2)在应用级,与开发工具有关,例如设置MAXOPEN_CURSORS等。 3、ORA-01545 特征:某个回滚段不可用 原因:(1)当使回滚段ONLINE时,但回滚段不可用,例如回滚段所在表空间OFFLINE; (2) 当使回滚段ONLINE时,但回滚段已ONLINE,例如回滚段被使用两次,典型的案例如OPS方式时,回滚段不能公有; (3)删除回滚段时,回滚段中有活动的事务; 措施:(1)确保回滚段可 (2)从初始化文件INIT.ORA的参数ROLLBACK)SEGMENTS中删除指定的回滚段。 (3)可以将回滚段所在表空间删除,取消UNDO事务 4、ORA-0165x 特征:表空间没有足够的空间供分配 原因:表空间已满;存储参数不合理,NEXT太小;没有连续的区间 措施:如果表空间已满,则需为表空间增加文件;如果存储参数不合理,则需增加INITIAL和NEXT;如果没有连续的区间,需要合并空闲的表空间。 查看空间碎片用DBA_FREE_SPACE 5、ORA-01555 特征:当前会话无法读到以前版本的数据 原因:原因很多,主要原因有下列:回滚段太小、太少;回滚段冲突;交叉提交(FETCH_ACROSS) 措施:增加回滚段数量; 6、ORA-04031 特征:共享池内存区内存不够,或产生内存碎片 原因:当试图装载一个大包时或执行一个较大的存储过程时,而共享池没有连续的内存空间。 措施:如果是内存不够,则增加SHARE)POOL_SIZE; 如果是内存碎片,执行alter system flush share_pool 7、ORA-04091 特征:触发器工作不正常 原因:一个行触发读取或修改变化的表(正在修改、插入)时,产生这种错误。 措施:检查触发器脚本,保证引用完整性 8、ORA-01242、ORA-01113 特征:介质故障导致数据库宕机 原因:介质故障。 措施:检查硬件故障;修改dbshut脚本,将其中的STARTUP命令修改为: Startup open recover Alter database open
-
Oracle操作如下:GaussDB A 8.1.0 执行报错,tables不存在:
-
漏洞描述:甲骨文公司,全称甲骨文股份有限公司(甲骨文软件系统有限公司),是全球最大的企业级软件公司,总部位于美国加利福尼亚州的红木滩。1989年正式进入中国市场。2013年,甲骨文已超越 IBM ,成为继 Microsoft 后全球第二大软件公司。Oracle MySQL Server是美国甲骨文(Oracle)公司的一款关系型数据库。Oracle MySQL Server存在输入验证错误漏洞,攻击者可利用该漏洞未经授权更新、插入或删除对MySQL Server可访问数据的访问。漏洞危害:Oracle MySQL 的MySQL Server 产品中的漏洞。受影响的版本包括 5.7.36 及更早版本和 8.0.27 及更早版本。易于利用的漏洞允许高特权攻击者通过多种协议进行网络访问,从而破坏MySQL服务器。成功攻击此漏洞可导致未经授权的能力,导致MySQL服务器挂起或频繁可重复的崩溃,以及未经授权的更新,插入或删除对某些MySQL服务器可访问数据的访问。影响范围:Oracle MySQL Server <=5.7.36Oracle MySQL Server <=8.0.27漏洞等级: 中危修复方案:厂商已发布了漏洞修复程序,请及时关注更新:https://www.oracle.com/security-alerts/cpujan2022.html
-
Oracle并行查询计划分析Oracle 的并行执行计划是由一个或者几个Data Flow Operator(DFO)组成,同一棵DFO树中,最多只有两组PX进程(生产者和消费者)。每个生产者进程都存在一个和每个消费者进程的连接,每个PX进程和QC都存在一个连接。两组PX进程之间,同一时间只存在一个活跃的数据分发,如果执行路径很长,数据需要多次分发,两组PX进程会变换生产者消费者角色,相互协作,完成所有并行操作PX进程之间或者与QC的连接至少存在一个(单节点下至多三个,RAC环境下至多四个)消息缓冲区用于进程间数据交互,该消息缓冲区默认在Largepool中分配(如果没有配置Largepool则在Sharedpool中分配)。多个缓冲区是为了实现异步通信,提高性能 Oracle并行执行计划树红色为数据消费者,蓝色为数据生产者数据消费者和数据生产之间的数据分发数据生产者和消费者之间数据分发有四种方式:send hashsend broadcastSend replicate(12c特性)adaptive(12 c新特性) send hash:生产者PX进程会根据join key,生成一个hash值,然后根据这个hash值把这行数据发送给一个消费者px进程, Hash分发的本质是把hashjoin的左边和右边(两个数据源),通过同样hash函数重新分发,切 分为N个工作单元(假设DoP=N),再进行join ,目的是减少PX进程进行join 操作时需要连接的数据量,如果hash join有一边在连接键上做hash分区,那么优化器可以选择对分区表不分发,因为hash分区已经对数据完成切分,这只需要hash分发hash join的其中一边,这就是partial partition wise join如果hash join的两边都在连接键上做了hash join分区,那么每个PX进程可以独立的处理对等的hash分区, 没有数据需要分发,这是full partition wise join send broadcast:广播分发是数据生产者将数据广播给所有的数据消费者,也就是说每个消费者都有一份数据,广播分发适合扫描后结果集相对比较小的表,广播分发是,数据结果行数*PX进程数据(消费者),相当于每个PX消费者进程都有一份相同的数据,小表驱动大表,建议做广播分发,如果分发的是大表,分发会消耗大量的CPU和内存Send replicate(12c特性):复制分发其实没有数据分发,每个PX进程重复扫描维度表(inner table),并行扫描事实表(outer table),在进行hash join时,每个PX进程重复扫描hashj oin 的左边的表,buffer cache 被用来缓存hashj oin 左边的小表,减少重复扫描所需的物理读,replicate 仅限于hashj oin 左边是表的情况,如果 hashj oin 的左边的结果集来自其他操作,比如join 或者视图,那么此时无法使用replicateadaptive(12 c新特性):通常, replicate 或者 broadcast 分发不受数据倾斜的影响.对于 hash 分发, hash join 两边连接键的最热门数据, 会被分发到同一 PX 进程进行 join 操作, 容易造成明显的并行执行倾斜.12c 引入 adaptive 分发, 可以解决 hash 分发时并行执行倾斜的问题.如果执行计划显示px send hybrid hash,说明该执行计划启用了adaptive分发特性。对hash join左边分发之前, 会插入一个STATISTICS COLLECTOR操作, 用于运行时确定hash join左边数据集的大小. 如果hash join左边的数据量小于并行度的两倍, 那么对于hash join左边的分发会切换为broadcast方式, 对hash join右边的分发为round-robin. 如果hash join左边的数据大于等于并行度的两倍, 对于hash join两边的分发方式都为hash, 和传统的hash分发一样如果存在柱状图信息, 表明hash join右边连接键上存在数据倾斜, 大部分数据为少数热门的值. 硬解析时, 会对hash join右边的表进行动态采样, 确认热点数据(重复度高的数据),Hash join的左边,的热点的数据会被广播到每个接收者,非热点数据被hash分发;Hash join右边的热点数据通过round-robin的方式发送, 非热点数据被hash分发. 布隆过滤:Oracle的布隆过滤器就是在执行join之前,过滤掉大部分的数据,其实就是包hash join的部分连接操作提前了,对 hash join 右边扫描时, 就第一时间把不符合 join条件的大部分数据过滤掉. 大大降低后续数据分发和 hash join 操作的成本. 不同的分布方式, 布隆过滤的生成和使用方式稍有不同:对于 broadcast 分发和 replicate, 每个 PX 进程持有 hash join 左边的完整数据, 对连接键生成 一个完整的布隆过滤, 扫描 hash join 右边时使用. 如果 sql 涉及多个维度表, 维度表全部使用broadcast 分发, 优化器可能对不同的维度表数据生成多个的布隆过滤, 在扫描事实表时同时使用.对于hash 分发,作为消费者的进程接收了hash join左边的数据之后,每个PX进程分别对各自的数据集生成布隆过滤,在广播给作为生产者的每个PX进程,扫描右边数据使用。Oracle数据库会根据统计信息和SQL的过滤条件自动选择是否布隆过滤。大部分场景,使用布隆过滤都会提升性能,但在某些场景下,不建议使用布隆过滤,例如:hash join左边的结果集比较大,几百万或者几千万的数据,且连接键的重复数据不多,这种情况下使用布隆过滤,生成额布隆过滤会非常大,无法在CPU cache中完整缓存数据,没事使用布隆过滤都需要到内存里读取数据进行判断,会导致性能下降
-
oracle序列创建以后,如果想重置序列从 0 开始,逐渐递增1,可以采用如下存储过程:123456789101112131415161718create or replaceprocedure reset_seq( p_seq_name in varchar2 )is l_val number;begin execute immediate 'select ' || p_seq_name || '.nextval from dual' INTO l_val; execute immediate 'alter sequence ' || p_seq_name || ' increment by -' || l_val || ' minvalue 0'; execute immediate 'select ' || p_seq_name || '.nextval from dual' INTO l_val; execute immediate 'alter sequence ' || p_seq_name || ' increment by 1 minvalue 0';end;存储过程创建以后,调用该存储过程,参数是要重置的序列名称:call reset_seq(‘test_seq’);使用下面的SQL语句查询需要重置的序列:12345678910SELECT a.sequence_name 序列名称,a.min_value 序列最小值,to_char(to_number( a.max_value)) 序列最大值,a.last_number 序列当前值,CASE a.last_number WHEN 1 THEN '--不需要重置;' ELSE'CALL seq_reset(''' || a.sequence_name || ''');' END 重置序列脚本,'DROP SEQUENCE ' || a.sequence_name 删除序列脚本,'RENAME ' || a.sequence_name || ' TO {newname}' 重命名脚本FROM USER_SEQUENCES a WHERE a.last_number<>1ORDER BY a.sequence_name ASC;转载自https://www.jb51.net/article/238856.htm
-
项目启动报错看下日志 Caused by: java.sql.SQLRecoverableException: IO 错误: Got minus one from a read call, connect lapse 55 ms., Authentication lapse 0 ms. at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:794) at oracle.jdbc.driver.PhysicalConnection.connect(PhysicalConnection.java:688) at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:39) at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:691) at com.alibaba.druid.filter.FilterChainImpl.connection_connect(FilterChainImpl.java:156) at com.alibaba.druid.filter.stat.StatFilter.connection_connect(StatFilter.java:218) at com.alibaba.druid.filter.FilterChainImpl.connection_connect(FilterChainImpl.java:150) at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1572) at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1636) at com.alibaba.druid.pool.DruidDataSource.init(DruidDataSource.java:898) at com.baomidou.dynamic.datasource.creator.DruidDataSourceCreator.createDataSource(DruidDataSourceCreator.java:95) ... 137 common frames omittedCaused by: java.io.IOException: Got minus one from a read call, connect lapse 55 ms., Authentication lapse 0 ms. at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:790) ... 147 common frames omittedCaused by: java.io.IOException: Got minus one from a read call, connect lapse 55 ms. at oracle.net.ns.NSProtocolNIO.negotiateConnection(NSProtocolNIO.java:138) at oracle.net.ns.NSProtocol.connect(NSProtocol.java:317) at oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:1438) at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:518) ... 147 common frames omittedCaused by: oracle.net.ns.NetException: Got minus one from a read call at oracle.net.ns.NIOHeader.readHeaderBuffer(NIOHeader.java:100) at oracle.net.ns.NIOPacket.readNIOPacket(NIOPacket.java:252) at oracle.net.ns.NSProtocolNIO.negotiateConnection(NSProtocolNIO.java:118) ... 150 common frames omitted与目标 VM 断开连接, 地址为: ''127.0.0.1:64853',传输: '套接字''进程已结束,退出代码为 1使用JDBC连接Oracle时,多次出现上述错误,后来去网上找了下,基本提供的方法有这么几种:1:数据库连接满了,扩大数据库连接池2:所登录的机子IP不在sqlnet.ora内,加入后重启listerner即可3:数据库负载均衡时,指定了(SERVER=DEDICATED),去除这个即可4:网管在Oracle配置上限制了该台机子访问Oracle的权限,这个问题基本和2类似,也是修改Oracle配置即可
-
oracle数据库是一种高效率的、可靠性好的、适应高吞吐量的数据库方案,是很多企业的不二选择。最近选择oracle数据库的很多企业在问,oracle数据库审计用什么数据库审计软件好?可以用什么方式部署?oracle数据库审计用什么数据库审计软件好?可以用什么方式部署?oracle数据库审计就选行云管家。行云管家数据库审计可以帮助企业监视并记录对数据库服务器的各类操作行为,通过对数据的分析,实时地、智能地解析对数据库服务器的各种操作,并记入审计数据库中以便日后进行查询、分析、过滤,实现对目标数据库系统的用户操作的监控和审计。其旁路部署,不影响核心业务运行。其核心功能如下:1、全面支持主流数据库、支持本地数据库与云厂商RDS支持Oracle、MySQL、SQLServer等主流数据库的审计和保护功能,同时适用于本地数据库与云厂商RDS。2、旁路部署,不影响核心业务运行对现有网络结构零影响,无需改动用户网络结构和配置,即可监控审计数据库操作行为。3、协议层支持,不受限于客户端工具访问协议层感知,适用于对数据库的所有访问请求,实现跨客户端的数据库访问审计。4、支持对SQL误操作,非法操作的拦截、告警、阻断与审批智能解析SQL语句,判断操作风险,有效拦截高危操作,辅以操作告警及审批,实现安全、灵活的数据库运维。5、支持数据清洗,避免泄露核心数据通过数据清洗,在开放数据的同时保护敏感数据,使数据资源在受监管基础上健康、有序、安全地流动起来。6、详尽的SQL语句执行日志、数据库运维报表记录SQL语句执行日志,为运维回溯提供依据,通过详尽的运维报表分析并总结数据库运维行为。7、对数据库账户进行统一的管理与授权数据库账户与运维策略从原有数据库方案中剥离,即通过“账户凭证”对数据库账户进行统一的管理与授权。【温馨提示】:如需了解更多,请拨打4008825683!名称解释:1、什么是oracle数据库?Oracle Database,又名Oracle RDBMS或简称Oracle;是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品,可以说Oracle数据库系统是世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小微机环境。2、数据库审计是什么意思?数据库审计(简称DBAudit)以安全事件为中心,以全面审计和精确审计为基础,实时记录网络上的数据库活动,对数据库操作进行细粒度审计的合规性管理,对数据库遭受到的风险行为进行实时告警。数据库审计是数据库安全技术之一,数据库安全技术主要包括:数据库漏洞扫描、数据库加密、数据库防火墙、数据脱敏、数据库安全审计系统。
上滑加载中
推荐直播
-
GaussDB管理平台TPOPS,DBA高效运维的一站式解决方案
2024/12/24 周二 16:30-18:00
Leo 华为云数据库DTSE技术布道师
数据库的复杂运维,是否让你感到头疼不已?今天,华为云GaussDB管理平台将彻底来改观!本期直播,我们将深入探索GaussDB管理平台的TPOPS功能,带你感受一键式部署安装的便捷,和智能化运维管理的高效,让复杂的运维、管理变得简单,让简单变得可靠。
回顾中 -
DTT年度收官盛典:华为开发者空间大咖汇,共探云端开发创新
2025/01/08 周三 16:30-18:00
Yawei 华为云开发工具和效率首席专家 Edwin 华为开发者空间产品总监
数字化转型进程持续加速,驱动着技术革新发展,华为开发者空间如何巧妙整合鸿蒙、昇腾、鲲鹏等核心资源,打破平台间的壁垒,实现跨平台协同?在科技迅猛发展的今天,开发者们如何迅速把握机遇,实现高效、创新的技术突破?DTT 年度收官盛典,将与大家共同探索华为开发者空间的创新奥秘。
回顾中
热门标签