数据库
文章平均质量分 59
数据库
懒虫虫~
无论人生上到哪一层台阶,阶下有人在仰望你,阶上亦有人在俯视你。你抬头自卑,低头自得,唯有平视,才能看见真实的自己!
展开
-
Mysql批量删除大量数据
假设有一个表(syslogs)有1000万条记录,需要在业务不停止的情况下删除其中statusid=1的所有记录,差不多有600万条, 直接执行 DELETE FROM syslogs WHERE statusid=1 会发现删除失败,因为lock wait timeout exceed的错误。如果要用order by 必须要和 limit 联用,否则被优化掉。然后分多次执行就可以把这些记录成功删除。...原创 2022-08-27 08:15:00 · 16425 阅读 · 0 评论 -
MVCC多版本并发控制的理解
什么是MVCC?MVCC,全称Multi-Version Concurrency Control,即多版本并发控制。MVCC是一种并发控制的方法,一般在数据库管理系统中,实现对数据库的并发访问,在编程语言中实现事务内存。MVCC在MySQL InnoDB中的实现主要是为了提高数据库并发性能,用更好的方式去处理读-写冲突,做到即使有读写冲突时,也能做到不加锁,非阻塞并发读。什么是当前读和快照读?在学习MVCC多版本并发控制之前,我们必须先了解一下,什么是MySQL InnoDB下的当前读和快照读?当转载 2021-08-25 22:43:16 · 200 阅读 · 0 评论 -
ORA-29861: 域索引标记为 LOADING/FAILED/UNUSABLE
问题回顾今天有个DBA在生产机创建索引导致系统服务不可用,前端报错界面后台报错界面问题原因DBA新建索引,打算优化查询效率,但是创建的xml字段索引失败,数据量太大而且语句有问题,Oracle并不会自动重建索引。3解决方案3.1 查询失效的索引select INDEX_NAME,STATUS from dba_indexes where STATUS <> 'VALID' and OWNER = 'SMART';3.2 删除索引(这里重建索引失效,所以果断删除)drop原创 2021-07-14 16:44:38 · 753 阅读 · 0 评论 -
Oracle实现去重的两种方式总结
业务场景需要查询某数据,由于需要三张表关联查询,查询结果如下:原始SQL语句SELECT D.ORDER_NUM AS "申请单号" , D.CREATE_TIME , D.EMP_NAME AS "申请人", (SELECT extractvalue(t1.row_data,'/root/row/FI13_wasteName') FROM dat_table_row t1 WHERE d.document_id = t1.document_id AND t1.tabl原创 2021-07-12 22:18:18 · 11674 阅读 · 1 评论 -
SQL With As 用法
项目中需要用到查询筛选出特定用户,数据类型如下筛选出liz特此记录用法如下原创 2021-06-19 18:37:13 · 574 阅读 · 0 评论 -
用户权限管理数据库设计(RBAC)
RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联。简单地说,一个用户拥有若干角色,每一个角色拥有若干权限。这样,就构造成“用户-角色-权限”的授权模型。在这种模型中,用户与角色之间,角色与权限之间,一般者是多对多的关系。(如下图)角色是什么?可以理解为一定数量的权限的集合,权限的载体。例如:一个论坛系统,“超级管理员”、“版主”都是角色。版主可管理版内的帖子、可管理版内的用户等,这些是权限。要给某个用户授予这些权限,不需要直接将权限授予用转载 2021-06-11 17:57:05 · 223 阅读 · 0 评论 -
having group by的使用
题目id为用户主键id,number代表积分情况,让你写一个sql查询,积分表里面出现三次以及三次以上的积分?having子句和group by一起使用,紧跟在group by的后边。having子句可以使用结果集中的列,也可以使用聚合函数(max、min、count、sum、svg)。having的作用是对分组后的结果进行过滤。这里在提一下where,where是对每一行进行过滤的,查询出符合where条件的每一行。having是对查询出结果集分组后的结果进行过滤。select * from g原创 2021-05-29 08:37:56 · 222 阅读 · 0 评论 -
生产中使用Oracle存储过程解决数据库查询缓慢问题
生产上遇到了一个问题,有一段SQL语句需要查询信息,超级缓慢,语句如下:SELECT extractvalue(d.document_data, '/root/deliveryNumber') AS deliveryNumberFROM dat_document dWHERE d.form_name = 'SD04'AND (document_status != 'deleted'OR document_status IS NULL )AND extractvalue(d.docum原创 2021-05-28 18:35:50 · 1283 阅读 · 2 评论 -
ORACLE分页查询、第一条和最后一条记录
Oracle分页查询格式:例如查询第10页到20页数据SELECT * FROM ( SELECT ROWNUM AS rowno, t.* FROM emp t WHERE ROWNUM <= 20) TableA WHERE TableA.rowno >= 10;参考文章https://blog.csdn.net/use_admin/article/details/83622414...原创 2021-05-21 18:24:35 · 741 阅读 · 0 评论 -
面试题-数据库索引的好处与弊端
一、索引好处1)帮助用户提高查询速度2)利用索引的唯一性来控制记录的唯一性3)可以加速表与表之间的连接4)降低查询中分组和排序的时间二、索引弊端1)存储索引需要占用磁盘空间2)执行数据修改操作(INSERT、UPDATE、DELETE)产生索引维护增加IO和调整索引所计算的量参考文章https://blog.csdn.net/qq_29784441/article/details/80887544https://blog.csdn.net/xubo_zhang/article/detai原创 2021-05-19 09:10:59 · 430 阅读 · 0 评论 -
Oracle中用regexp_substr()切分截取查询到的字符串
一、REGEXP_SUBSTRREGEXP_SUBSTR(String, pattern, position, occurrence, modifier)string:需要进行正则处理的字符串pattern:进行匹配的正则表达式position:起始位置,从字符串的第几个字符开始正则表达式匹配(默认为1) 注意:字符串最初的位置是1而不是0occurrence:获取第几个分割出来的组(分割后最初的字符串会按分割的顺序排列成组)modifier:模式(‘i’不区分大小写进行检索;‘c’区分大小写进原创 2021-04-29 10:20:20 · 4244 阅读 · 0 评论 -
数据库相关优化方案
数据库优化方案很多,主要分为两大类:软件层面、硬件层面。软件层面包括:SQL 调优、表结构优化、读写分离、数据库集群、分库分表、缓存等;硬件层面主要是增加机器性能。一、SQL 调优1)开启慢 SQL 记录如果你使用的是 Mysql,需要在 Mysql 配置文件中配置几个参数即可。slow_query_log=onlong_query_time=1slow_query_log_file=/path/to/log2)调优的工具用PL/Sql Developer工具查看 SQL 语句的执行计原创 2021-04-06 09:54:57 · 155 阅读 · 0 评论 -
DISTINCT和COUNT的组合使用
最新项目中需要查询分组过滤并统计审批单子数量,需要用到DISTINCT和COUNT函数,特此记录如下:1:单独使用DISTINCT过滤分组 SELECT DISTINCT(b.short_name) AS short_name, b.WFCODE FROM SUMMARY_DOCUMENT_AUDIT a LEFT JOIN FORMFUNCTION b ON upper(a.WFCODE) = upper(b.WFCODE) WHERE SOURCE =原创 2021-03-04 09:09:54 · 11771 阅读 · 1 评论 -
java.sql.SQLSyntaxErrorException: ORA-01706: 用户函数的结果值过大
最近项目中需要做数据报表,后台执行SQL语句中发现如下报错需要查询某个月的数据报表,发现无法查询出正确结果。但是查询其它月份就可以查询出数据,经过排查SQL语句并没有问题,因此可以定位到某个字段值有问题,值太大!解决方案:1:采用二分法,缩小查询日期,先查询上半月数据,如果没问题,再查下下半月数据。然后逐层缩小查询日期范围。2:这里找到2020-11-12日期的数据异常。查询发现总共5条。3:逐条数据单子查询发现xml格式中存储调用接口保存的异常值Exception字段有问题!超过默认设原创 2021-02-03 10:48:34 · 1030 阅读 · 2 评论 -
ORA-39213: Metadata processing is not available 解决方案
在生产环境,对aacibus仓库进行数据复制,出现如下报错:解决方案如下:第一步:以dba角色进入数据库sqlplus / as sysdba;第二步:修改当前容器为wmp(这里以实际为准,本服务器容器有三个)alter session set container=wmp;//修改容器第三步:执行如下语句execute dbms_metadata_util.load_stylesheets;第四步:重新执行impdb语句进行导入,显示导入成功...原创 2020-11-04 17:26:59 · 1248 阅读 · 0 评论 -
数据库的脏读、不可重复读、幻读以及四种隔离级别
一、数据库的脏读、不可重复读和幻读1、脏读: (读取了未提交的新事物,然后被回滚了)事务A读取了事务B中尚未提交的数据。如果事务B回滚,则A读取使用了错误的数据。比如我给你转了100万,但是我还没有提交,此时你查询自己账户,多了100万,很开心。然后我发现转错人了,回滚了事物。然后你100万就没了。 在过程中你查到了没有提交事物的数据(多出的100万),这就是脏读。解决:如果一个事物在读的时候,禁止读取未提交的事物。是不是就解决了。2、不可重复读: (读取了提交的新事物,指更新操作)不可重原创 2020-11-02 15:15:31 · 6686 阅读 · 2 评论 -
记一次impdp导入失败,失败指令为ORA-39002 ORA-39070 ORA-29283 ORA-06512 ORA-29283
今天对生产机数据库使用impdf导入的时候,出现如下错误,错误指令为:“ORA-39002,ORA-39070,ORA-29283,ORA-06512,ORA-29283”。特此记录解决方案如下:第一步,排查目录是否存在,权限是否oracle:oinstall。发现存在且权限正确。第二步,数据库中检查并确认是否授权执行语句如下:sqlplus / as sysdba;alter session set container=wmp;//如果需要修改容器,则执行select sys_con原创 2020-10-31 14:45:11 · 5388 阅读 · 0 评论 -
ORA-00972: 标识符过长问题解决方案
今天从数据库导数据时,遇到了一个"ORA-00972: 标识符过长"错误,特此记录解决方案如下。1、报错截图2、原因分析及解决方案由于字段别名过长导致,将字段别名缩减即可解决报错比如我的原始SQL如下:SELECT ORDER_NUM AS "申请单号", EMP_NAME AS "申请人", CREATE_TIME AS "申请日期", EXTRACTVALUE(DOCUMENT_DATA, '/root/empCompany') AS "所属公司", EXTRACTVALU原创 2020-10-27 11:10:00 · 71811 阅读 · 5 评论 -
Oracle数据库exp和imp方式导出数据
一、exp方式导出数据1.完全导出(选项都为默认配置)例子:导出WMSP数据库ENTERPRISE用户,密码为WMwhSql0的所有数据到/backup/zqw/dump/expdb_enterprise_01.dmp文件中2.只导出表结构例子:导出mydb数据库system用户,密码为123456的所有表结构到/backup/zqw/dump/expdb_enterprise_01.dmp文件中exp ENTERPRISE/[email protected]/WMSP file=/bac原创 2020-09-08 17:05:38 · 3994 阅读 · 0 评论 -
Oracle查询、创建用户的表空间并授权
oracle查询用户以及用户对应的表空间select username,default_tablespace from dba_users;原创 2020-08-31 16:37:32 · 862 阅读 · 0 评论 -
Oracle12c环境expdp导出时报ORA-65096、ORA-39006和ORA-39213问题解决方案
一:ORA-65096解决方案1:检查pdb利用sqlplus / as sysdba;进入dba账户show pdbs2:切换容器(注意只在当前SQL会话生效)alter system set container=WMP;检查是否生效即可解决如下问题ORA-65096: invalid common user or role name二:ORA-39006和ORA-39213解决方案在Oracle12c环境下,使用数据泵expdp从pdb导出数据时报如下错误:ORA-390原创 2020-08-31 11:54:32 · 434 阅读 · 0 评论 -
Oracle单表备份三种方案
方案一:备份create table [备份名] as select * from [表名];恢复truncate table org_group;insert into org_group select * from [备份名] ;注意:此种情况适用于,同一个数据库,需要备份某张表。方案二:备份oracle用户终端执行:exp [用户名]/[密码] tables=[表一],[表二] file=/home/oracle/table.dmp恢复oracle用户终端原创 2020-08-27 13:59:36 · 1664 阅读 · 0 评论 -
利用PLSQL创建定时任务,定时执行存储过程
1、创建定时向表中插入数据的存储过程,名为testJob1数据库脚本如下:CREATE OR REPLACEPROCEDURE "testJob" ASBEGIN EXECUTE IMMEDIATE 'INSERT INTO TABLE_HIS SELECT * FROM TABLE_AI'; COMMIT;END;2、使用plsql找到定时器对应的DBMS_Jobs文件夹,右键new。3、设置定时任务(1)在what值中填写待执行的存储过程,可以多个,用分号(;)隔开。(2)在间原创 2020-08-23 09:16:41 · 4437 阅读 · 1 评论 -
ORA-28000: the account is locked-的解决办法
复制数据库,由于账Oracle账号密码错误次数太多导致,账号被锁解决方案如下:1、命令行登陆sqlplus2、sqlplus / as sysdba;3、alter user wmsadmin account unlock;4、commit;原创 2020-08-20 19:31:39 · 109 阅读 · 0 评论 -
Oracle 如何将“25-5月 -20 06.13.02.141000 下午”字符串转换成标准日期格式
解决方法–转换成正常日期格式(yyyy-mm-dd hh24:mi:ss)–select to_char(cast(cast('25-5月 -20 06.13.02.141000 下午' as timestamp) as date),'yyyy-mm-dd hh24:mi:ss') dateStr from dual;转换结果其实,上面这种格式是可通过to_timestamp函数转化过来–转换成时间戳格式 —select to_timestamp('2020-05-25 18:13:02',原创 2020-08-11 16:15:22 · 738 阅读 · 0 评论 -
Linux服务器下搭建Oracle11g数据库(详细搭建文档)
一、安装前准备原创 2020-08-03 15:24:31 · 3417 阅读 · 3 评论 -
Windows服务器环境搭建Redis集群
1、下载 Redis-x64-3.2.100原创 2020-07-27 18:41:39 · 1256 阅读 · 1 评论 -
记录一次Navicat连接MySQL数据库报错解决方案
一:安装新版MySQL8.X教程如下MySQL下载与安装(8.0.20版)教程二:连接测试发现报错报错信息如下:HOST is not allowed to connect to this mysql serverhost主机不能访问本机的mysql服务,原因需要连接非本机的mysql的时候,默认host是localhost,我们需要将这个mysql连接权限设置成%,更改方法直接通过软件更改和命令行更改:在mysql的数据库选择mysql这个数据库,里面有一个user表,进入表中有一个host转载 2020-07-23 19:03:02 · 401 阅读 · 0 评论 -
Windows服务器下安装Redis及配置(单机版)
一:下载redis安装包和可视化工具Redis及工具下载提取码: 2xwe二:直接安装到指定目录,默认在(C:\Program Files\Redis)修改Redis安装目录下的redis.windows.conf和redis.windows-service.conf配置文件。注释掉bind 127.0.0.1。修改protected-mode yes为protected-mode no三:启动Redis在Windows系统上,用redis进行远程连接,不能通过redis-serve原创 2020-07-23 18:54:18 · 438 阅读 · 0 评论 -
Oracle中instr()、substr、nvl(exp1,exp2)、nvl(Expr1,Expr2,Expr3)函数使用
1、**instr()**函数的格式 (俗称:字符查找函数)格式一:instr( string1, string2 ) -- instr(源字符串, 目标字符串)格式二:instr( string1, string2, start_position , nth_appearance ) --- instr(源字符串, 目标字符串, 起始位置, 匹配序号)解析:string2 的值要在string1中查找,是从start_position给出的数值(即:位置)开始在string1检索原创 2020-07-15 18:38:24 · 392 阅读 · 0 评论 -
删除表数据drop、truncate和delete的用法
------drop出没场合:drop table tb --tb表示数据表的名字,下同绝招:删除内容和定义,释放空间。简单来说就是把整个表去掉。以后要新增数据是不可能的,除非新增一个表。例如:一个班class就是一个表,学生就是表中的数据,学生的职务就是定义drop table class就是把整个班移除,学生和职务都消失。比如下面testSchool数据库中有两张表[Classes]表和[Teacher]表当执行下面代码之后drop table ClassesClasses表就转载 2020-07-14 17:41:52 · 277 阅读 · 0 评论 -
Oracle复制数据库(单个oracle用户对应的数据库)基本操作
这里以仓库34复制到仓库36为例1.分配权限在linux界面oracle账号下执行sqlplus / as sysdba;oracle数据库中执行:create or replace directory DUMP_DIR as '/backup/zqw/dump';grant read,write on directory DUMP_DIR to wmwhse34,wmwhse36;2.导出(/仓库34)一级目录linux界面oracle账户下执行expdp wmwhse34/WM原创 2020-07-07 18:45:49 · 851 阅读 · 0 评论 -
关于MySQL一张表最多支持创建16个组合索引的探究和验证
一、MySql官网文档解释在**mysql5.***中描述如下Different limits related to tables and indexes. For example, the maximum number of ordered indexes in the cluster is determined by MaxNoOfOrderedIndexes, and the maximum number of ordered indexes per table is 16.**mysql8原创 2020-07-02 10:46:20 · 5853 阅读 · 4 评论 -
Oracle将查询结果按照数值的大小排序
一般情况下使用oracle 中的sql语句 order by id 的时候,得到的排序结果是按照数字的首个数字排序的,比如说1,101,2,22,8。但有时候需要按照数字真实大小排序比如1,2,8,22,101来排序,这就需要使用在order by的后面加上to_number(id),即SELECT * FROM AAC_IT16_SOFTWARE order by to_number(SOFTWAREID) DESC查询前加了to_number后查询结果...原创 2020-07-01 10:54:31 · 5799 阅读 · 0 评论 -
could not execute statement记录一次生产机数据库报错及解决方案
报错信息如下:JDBC exception on Hibernate data access: SQLException for SQL [n/a]; SQL state [52000];error code [15899];could not execute statement;nested exception is org.hibernate.exception.GenericJDBCException: could not execute statement错误原因:数据库中表字段PRO原创 2020-06-15 17:37:43 · 4104 阅读 · 0 评论 -
Oracle数据库重复数据判断以及过滤重复记录(只保留一条数据)
项目背景最近做项目,发现oracle中存在重复数据,导致项目查询结果冗余,特此需要对数据进行去重。比如下面截图所示:场景一:根据单个字段(Id)来判断重复记录1、查找表中多余的重复记录,重复记录是根据单个字段(Id)来判断select * from 表 where Id in (select Id from 表 group byId having count(Id) > 1);2、删除表中多余的重复记录,重复记录是根据单个字段(Id)来判断,只留有rowid最小的记录DELETE fr原创 2020-05-22 18:12:53 · 6535 阅读 · 0 评论 -
Oracle增加、更新、删除、查询xml节点
这里整理下项目开发中用到了SQL对数据库中XML类型字段增删改查的操作,好记性不如烂笔头,特此整理如下。1、Oracle更新XML字段的方式整理如下:方式一(针对字段形如 ):操作DAT_DOCUMENT表,更新为生产测试设备update DAT_DOCUMENT t set DOCUMENT_DATA = UpdateXML(t.DOCUMENT_DATA, '/root/serviceObject',原创 2020-05-22 18:08:29 · 4181 阅读 · 0 评论 -
Oracle查询最近一年数据以及两个日期间隔天数
查询之前需要格式化日期,用to_char(日期,格式)函数进行转换SELECT D.ORDER_NUM , D.EMP_NAMEFROM DAT_DOCUMENT dWHERE D.FORM_NAME ='Form_SD01'AND TO_CHAR(D.CREATE_TIME,'yyyy-MM-dd') BETWEEN '2019-01-01' AND '2020-03-17'; 查询两个日期直接间隔天数:SELECT TO_char(d.CREATE_TIME,'yyyy-MM原创 2020-05-22 18:02:05 · 8148 阅读 · 1 评论 -
Oracle创建、修改视图
视图:是基于一个表或多个表或视图的逻辑表,本身不包含数据,通过它可以对表里面的数据进行查询和修改。视图基于的表称为基表,Oracle的数据库对象分为五种:表,视图,序列,索引和同义词。视图是存储在数据字典里的一条select语句。通过创建视图可以提取数据的逻辑上的集合或组合。视图的优点:1.对数据库的访问,因为视图可以有选择性的选取数据库里的一部分。2.用户通过简单的查询可以从复杂查询中得到结果。3.维护数据的独立性,试图可从多个表检索数据。4.对于相同的数据可产生不同的视图。注意:1、简单原创 2020-05-21 09:11:21 · 5560 阅读 · 0 评论 -
Oracle并发数、会话数、最大连接数
1、查询Oracle并发数、会话数、连接数:select count(*) from v$session #当前的连接数select count(*) from v$session where status='ACTIVE' #并发连接数select value from v$parameter where name = 'processes' #数据库允许的最大连接数show parameter processes #最大连接select username,count(username) fro原创 2020-05-20 10:08:45 · 9270 阅读 · 0 评论