暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

数据库常见问题处理手册

原创 michael 2023-09-12
270

1:oracle数据库   

1.1:扩容表空间  

1.1.1 undo表空间扩容  

后端应用或者DS流,报如下错误,表示undo表空间不足

         图片

解决步骤如下:

使用PL/SQL等工具登陆,查看原来的数据库undo表空间的文件位置,如红色框线上的位置表示原来的增加的undo表空间文件的位置

select * from dba_data_files where tablespace_name='UNDOTBS1';

图片

执行下面的SQL进行扩容,${data_directory}换成上面自己环境查出来的,如果想扩容多个,那么下面的SQL只需变更cs_undo01.dbf文件名即可,文件名可以自己取,与去里面的不重复即可

ALTER TABLESPACE undotbs1 ADD DATAFILE '${data_directory}cs_undo01.dbf' size 1G autoextend on next 10M maxsize unlimited;

注:undo表空间是为了事务回滚使用,所以不需要设置过大,会自动释放,空间可以循环重复使用

1.1.2 temp表空间扩容  

后端应用或者DS流,报如下错误,表示temp表空间不足

图片

解决步骤如下:

使用PL/SQL等工具登陆,查看原来的数据库temp表空间的文件位置,如红色框线上的位置表示原来的增加的temp表空间文件的位置

select* from dba_temp_files where tablespace_name='TEMP';图片

执行下面的SQL进行扩容,${data_directory}换成上面自己环境查出来的,如果想扩容多个,那么下面的SQL只需变更cs_undo01.dbf文件名即可,文件名可以自己取,与去里面的不重复即可

ALTER TABLESPACE cs_task ADD DATAFILE ‘${data_directory}cs_task01.dbf' size 1G autoextend on next 10M maxsize unlimited;

注:数据表空间不可以循环重复使用,除非你truncate或者drop表释放掉,表空间水位下降

         

1.1.3 数据文件表空间扩容  

所谓数据文件表空间指除了系统自带的表空间,如temp,undo,system。我司主要指cs_task,cs_platform,cs_info_dw,cs_info_stg四个表空间

图片

解决步骤如下:

使用PL/SQL等工具登陆,查看原来的数据库表空间的文件位置,如红色框线上的位置表示原来的增加的表空间文件的位置

select * from dba_DATA_files where tablespace_name='CS_TASK';图片

执行下面的SQL进行扩容,${data_directory}换成上面自己环境查出来的,如果想扩容多个,那么下面的SQL只需变更cs_undo01.dbf文件名即可,文件名可以自己取,与去里面的不重复即可

ALTER TABLESPACE CS_TASK ADD TEMPFILE '${data_directory}cs_temp01.dbf' size 1G autoextend on next 10M maxsize unlimited;

注:temp表空间是为了排序分组等临时使用,所以不需要设置过大,会自动释放,空间可以循环重复使用

         

1.2:PL/SQL等工具无法登陆  

1.2.1 提示ORA-12170  

PL/SQL提示ORA-12170,如下图报错解决办法

图片

1:登陆数据库服务器

2:查看数据库的监听状态执行lsnrctl status,返回Instance 那行status为READY或者UNKONW表示监听状态正常,其他的异常。如果异常,执行先停止lsnrctl stop,然后lsnrctl start启动指令是否能正常。正常后重试重新连接

图片

3:如何2步骤的监听状态正常了,还是无法连接,检查服务器的防火墙状态systemctl status firewalld,绿色的表示防火墙是打开状态,需要关闭systemctl stop firewalld

图片

1.2.2 提示ORA-01017  

PL/SQL等工具提示ORA-01017,如下图报错解决办法

         

图片

此报错是用户名或者密码错误,需要数据正确的用户名和密码

1.2.3 提示ORA-28000  

PL/SQL等工具提示ORA-28000,如下图报错解决办法

         

图片

表示账号已经锁定,锁定的原因是密码错误次数超过罚值

解决办法:使用下面SQL解锁,alter user rgh account unlock;

图片

1.2.4 提示ORA-01034  

PL/SQL等工具提示ORA-01034,如下图报错解决办法

图片

收到此提示基本可以确定,数据库已经宕机

解决办法:

1:使用oracle用户登陆数据库服务器

2:查询数据进程 ps –ef|grep smon,如下,不正常

图片

正常查询:

图片

3:启动数据库startup

图片

注:如果startup启动报错,需看具体报错返回,可联系研发人员

4:重新连接

1.3:数据库导出很慢  

现象:当执行数据库导出expdp导出时,命令行一直无反应,等待几个小时也没有反应

常见原因:1:数据磁盘极慢;2:数据库steam pool满了。通常是问题2较多

问题2解决办法:

1:登陆数据库服务器,或者在工具使用sys,system权限用户

2: 执行下面SQL,select shrink_phase_knlasg from X$KNLASG;

图片

3:返回如果值为1,那么异常,为0正常。

4:当值为1时,使用下面SQL处理

alter system set events 'immediate trace name mman_create_def_request level 6';

1.4:数据库导入很慢  

现象:当执行数据库导入impdp导出时,命令行一直无反应,或者等待几个小时也没有反应

常见原因:1:数据磁盘极慢;2:数据库sga和pga设置过小;3:redo日志较小;

解决办法:

1:磁盘慢排查见第三部分,磁盘性能测试,如果磁盘问题,只有更换性能好的磁盘

2:调整sga和pga值:具体请见大B端网站

3:调整redo大小值:具体请见大B端网站

         

1.5:数据库导入表报错  

1.5.1、导入过程中如果出现对象已存在、表或索引的统计信息导入出错的提示  

现象: ORA-31684: Object type USER:"CS_INFO_DW" already exists ORA-31684: Object type TYPE:"CS_PLATFORM"."STRING_SUM_OBJ" already exists ORA-39083: Object type INDEX_STATISTICS

解决办法:导入完成后如果缺少统计信息可以在执行一遍统计收集,plsql命令窗口下,或sqlplus窗口下执行 exec dbms_stats.gather_database_stats(estimate_percent=>10,degree=>8,cascade=>true,granularity=>'ALL');上述报错可以忽略

1.5.2、导入过程中提示ORA-39093,ORA-2000  

现象图如下:

图片

解决办法:忽略。报错原因,是建索引时未指定名称,采取默认编码,不同数据库编码值不一致导致。

1.5.2、导入过程中提示ORA-29913,ORA-08103  

现象图片:

图片

解决办法:报错原因,由于导入时瞬间资源不足,重新上述命令执行处理

         

1.6:执行SQL慢  

1.6.1 SQL突然慢  

常见原因:1:数据库服务器负载问题;2:SQL执行计划异常

解决办法:1:使用服务器top查看,见第三部分系统层面问题处理

2:查看SQL的执行计划是否变动,找到sql_id后代入下面SQL查看是否有多个执行计划,如果有多个执行计划,则考虑是否执行计划突变

select t.SQL_ID,t.PLAN_HASH_VALUE from v$sql_plan t where SQL_ID='2syvqzbxp4k9z';

1.6.2SQL一直慢  

常见原因:1:SQL逻辑问题;2:SQL执行计划问题

解决办法:1:查看SQL的执行计划

explain plan for select * from cs_platform.user_authority_menu;

SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);

尽量的减少全表扫描

2:查看SQL的执行计划,使用hint测试是否可以优化

         

2:Mysql数据库  

2.1 数据库后台如何登陆  

Mysql –u用户名-p密码

注:数据库默认root是自带的高权限账号,此root非服务器root

2.2 数据库后台登陆报错  

现象:如下图

图片

可能原因:

① mysql服务器没有开启

② mysql服务器开启了,但不能找到 socket 文件

解决办法:

1:启动mysql,使用service mysqld start或者systemctl start mysqld.service

2: mysql –u用户名 –p密码 –S增加socket路径,socket通过ps –ef|grep mysqld查询,如下

图片

2.3 数据库导入报错  

2.3.1 数据库导入报错  

现象:如下图

图片

原因:服务器空间满

解决办法:清理不需要数据或者扩磁盘,处理后使用下面脚本重新加载失败的

使用下面的命令脚本vi test.sh,根据实际内容,编写剩余表文件名,加载剩余内容

#!/bin/bash

for i in `cat ${dumpdir}/tablelist/剩余表文件`

    do

        myloader -u root -p ${v_password} -o ${i} -t 8 -v 3 -d ${dumpdir}/core/base/${i}   

    done

2:chmod +x test.sh

3: sh ./test.sh

         

         

2.3.2 数据库导入报错  

现象:如下图

图片

原因:文件不存在或者dmp少了个metadata文件

解决办法:核查是否少包,包正确后执行下面脚本处理失败

使用下面的命令脚本vi test.sh,根据实际内容,编写剩余表文件名,加载剩余内容

#!/bin/bash

for i in `cat ${dumpdir}/tablelist/剩余表文件`

    do

        myloader -u root -p ${v_password} -o ${i} -t 8 -v 3 -d ${dumpdir}/core/base/${i}   

    done

2:chmod +x test.sh

3: sh ./test.sh

2.3.3 数据库导入报错  

现象:如下图

图片

原因:客户的操作系统缺少基础包

解决办法:网上或者找大B端开发获取openssl10包

获取依赖包有使用rmp –ivh安装

3:系统层面  

3.1:测试磁盘性能  

图片

iostat -x 3是一个用于在 Linux 系统上查看磁盘和设备的输入/输出统计信息的命令。该命令将返回一系列指标字段,用于评估磁盘和设备的性能。以下是iostat -x 3 命令返回的各个指标字段的解释:          
%user:表示在给定时间间隔内,CPU 用于处理用户进程的百分比。这是 CPU 时间的一部分,用于执行用户应用程序。          
%nice:表示在给定时间间隔内,CPU 用于处理 nice 优先级的用户进程的百分比。这是 CPU 时间的一部分,用于执行低优先级的用户应用程序。          
%system:表示在给定时间间隔内,CPU 用于处理系统进程的百分比。这是 CPU 时间的一部分,用于执行操作系统内核任务。          
%iowait:表示在给定时间间隔内,CPU 等待磁盘完成输入/输出操作的百分比。这是 CPU 时间的一部分,用于等待磁盘操作完成。          
%steal:表示在给定时间间隔内,由于运行虚拟机或被另一个物理 CPU 偷走,所导致的 CPU 时间的百分比损失。          
%idle:表示在给定时间间隔内,CPU 空闲的百分比。这是 CPU 时间的一部分,表示 CPU 未被使用的时间。          
以下是磁盘相关的字段:          
Device:表示设备的名称,例如 /dev/sda1。          
tps:表示每秒完成的传输次数(每秒的传输操作数)。对于硬盘来说,即每秒钟的 I/O 请求数。          
Reads/s:表示每秒从设备读取的数据量(字节数)。          
Writes/s:表示每秒写入设备的数据量(字节数)。          
rMB/s:表示每秒从设备读取的数据量(以 MB 为单位)。          
wMB/s:表示每秒写入设备的数据量(以 MB 为单位)。          
avgrq-sz:表示平均每个请求的扇区数。          
avgqu-sz:表示平均请求队列长度。          
await:表示平均 I/O 操作等待时间(以毫秒为单位)。          
r_await:表示平均读操作等待时间(以毫秒为单位)。          
w_await:表示平均写入操作等待时间(以毫秒为单位)。          
svctm:表示平均 I/O 操作服务时间(以毫秒为单位)。          
%util:表示设备利用率,即设备正在工作的时间与观察时间的比率          
客户生产环境测试结果w_await搞到30多毫秒。正常的SSD盘,一般在1-3ms,SAS盘4-6ms,剩下的基本就是最老的机械SATA盘。磁盘性能差

         

方法二:

dd bs=32k count=20k if=/dev/zero of=test oflag=dsync

图片

这个命令使用dd工具来创建一个名为test的文件,并将它填充为零。参数和选项的解释如下:          
bs=32k:指定每个数据块的大小为 32KB。          
count=20k:指定要写入文件的数据块数量为 20,000。          
if=/dev/zero:指定输入文件为 /dev/zero,它会产生一个无限数量的零字节流。          
of=test:指定输出文件的名称为 test。          
oflag=dsync:要求在每次写入操作后等待数据同步到磁盘。          
使用这个命令可以测试磁盘写入的性能,因为/dev/zero是一个特殊设备,它会生成无限数量的零字节流。通过将这些零写入到文件中,并使用oflag=dsync          
选项确保每次写入操作后都进行数据同步到磁盘,可以测量磁盘写入的性能和延迟          
进程测试写入1M/S,我行生产全量8T的库,在导出导入的时候可以达到9.6M/s。进一步验证了磁盘写入性能差

3.2:  服务器负载情况  

使用top指令查看,如下:

图片

1.%CPU:显示每个进程使用的 CPU 百分比。

2.%MEM:显示每个进程使用的内存百分比。

3.PID:进程的唯一标识符。

4.USER:拥有该进程的用户。

5.PR:进程的优先级。

6.NI:进程的优先级增量。

7.VIRT:进程使用的虚拟内存量。

8.RES:进程使用的物理内存量。

9.SHR:进程共享的内存量。

10.S:进程的状态(R:运行,S:睡眠,Z:僵尸等)。

11.%CPU:显示系统的总 CPU 使用率。

12.%MEM:显示系统的总内存使用率。

13.TIME+:进程已经运行的时间。

14.COMMAND:进程的命令或可执行文件的名称

3.3:  查看内存情况  

free -g 是一个常用的命令行工具,用于显示系统内存的使用情况。它返回的值表示以下内容:

图片

1.total:系统中总共的物理内存量,以 GB 为单位。

2.used:已被系统和应用程序使用的物理内存量,以 GB 为单位。

3.free:当前未被使用的物理内存量,以 GB 为单位。

4.shared:被多个进程共享的内存量,以 GB 为单位。

5.buffers:用于缓存磁盘数据的内存量,以 GB 为单位。

6.cached:用于缓存文件系统的内存量,以 GB 为单位。


更多精彩内容,请关注 微信公众号   ”数据库福利社“

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论