蓝皮书的自留地

运筹帷幄,决胜千里

上接:ORACLE、MySQL、PostgreSQL 客户端 sqlplus,mysql,psql 常用命令对比(一),在对比了客户端的安装以及连接数据库区别。现在连接上数据库之后就是进一步的操作了,然而连上数据库之后首先看到的就是提示符,那本篇就从定制提示符开始吧。本来之前都是通过一种方式来配置提示符,没想到提示符的配置也比较复杂,mysql 竟然可以通过3种方式来实现。那这篇文章就讲一下三种数据库的提示符相关的知识。

默认提示符

默认情况下 sqlplus、mysql、psql 的提示符都很简单,如下:

image-20240120193039196

sqlplus 默认提示符为: SQL>

mysql 默认提示符为:mysql>

psql 默认提示:[dbname]=# 默认的数据库是postgrespostgres=#

既然要定制提示符,那我们就得知道提示符的配置在哪里,下面是三种数据库的提示符的配置。

阅读全文 »

写在前面的话:当前根据 墨天轮中国数据库排行 https://www.modb.pro/dbRank 来看,已经有 292 个数据库了,国产数据库遍地开花,如果只掌握一种数据库貌似有点落伍了。

大体梳理了下,目前拥有的数据库中级级别(Professional)的证书有 ORACLE 11g OCP(2010)、MySQL 5.7(2019)/8.0(2023) OCP、Tidb PCTP(2022)、HCIP-GaussDB-OLTP(2022);初级级别的有:巨杉数据库openGaussMogDBOceanBaseGoldenDB 总共 9 种数据库了,有云数据库、分布式、集中式、开源数据库等,实际上这些数据库大多都是 paper 能力,目前实际能够支持的也就是 ORACLE 和 MySQL,目前准备实际学习下 PostgreSQL,发现数据库多了,一些命令容易混,还发现 PostgreSQL 的一些操作跟 ORACLE 和 MySQL 有一些不太一样的地方、感觉不太习惯的地方,于是就萌生了总结下这三种数据库的一些对比,先从客户端的常用命令开始吧。

阅读全文 »

1
2
3
4
5
6
7
8
9
10
11
set lines 200
col event for a55
SELECT inst_id,EVENT, SUM(DECODE(WAIT_TIME, 0, 0, 1)) "Prev", SUM(DECODE(WAIT_TIME, 0, 1, 0)) "Curr", COUNT(*) "Tot" , sum(SECONDS_IN_WAIT) SECONDS_IN_WAIT
FROM GV$SESSION_WAIT
WHERE event NOT
IN ('smon timer','pmon timer','rdbms ipc message','SQL*Net message from client','gcs remote message')
AND event NOT LIKE '%idle%'
AND event NOT LIKE '%Idle%'
AND event NOT LIKE '%Streams AQ%'
GROUP BY inst_id,EVENT
ORDER BY 1,5 desc;

根据等待事件查会话

1
2
3
4
5
6
7
8
set line 199 
col username format a14
col event format a35
col module format a20
col spid format a8
col machine format a15
col B_SESS for a10
SELECT /*+rule */ sid, s.serial#, spid, event, sql_id, seconds_in_wait ws, row_wait_obj# obj, s.username, s.machine, BLOCKING_INSTANCE||'.'||blocking_session b_sess FROM v$session s, v$process p WHERE event='&event_name' AND s.paddr = p.addr order by 6;

根据用户查会话

1
2
3
4
5
6
7
8
set line 199 
col username format a14
col event format a35
col module format a20
col spid format a8
col machine format a15

SELECT /*+rule */ sid, s.serial#, spid, event, sql_id, seconds_in_wait ws, row_wait_obj# obj, s.username, s.machine, BLOCKING_INSTANCE||'.'||blocking_session b_sess FROM v$session s, v$process p WHERE s.username='&user_name' AND s.paddr = p.addr order by 6

根据SQL_ID查会话

1
2
3
4
5
6
7
set line 199 
col username format a14
col event format a35
col module format a20
col spid format a8
col machine format a15
SELECT /*+rule */ sid, s.serial#, spid, event, sql_id, seconds_in_wait ws, row_wait_obj# obj, s.username, s.machine, BLOCKING_INSTANCE||'.'||blocking_session b_sess FROM v$session s, v$process p WHERE s.sql_id='&sql_id' AND s.paddr = p.addr order by 6

根据会话ID查会话详情

1
2
3
4
5
6
7
set line 199 
col username format a14
col event format a35
col module format a20
col spid format a8
col machine format a15
SELECT s.sid, s.serial#, spid, event, sql_id, PREV_SQL_ID, seconds_in_wait ws, row_wait_obj# obj, s.username, s.machine, module,blocking_session b_sess,logon_time FROM v$session s, v$process p WHERE sid = '&sid' AND s.paddr = p.addr;

查询阻塞会话

查询会话的对象信息

1
2
3
select count(*),blocking_session from v$session where blocking_session is not null group by blocking_session;
col OBJECT_NAME for a30
select owner,object_name,subobject_name,object_type from dba_objects where object_id=&oid;
1
2
3
4
5
set line 199 
col event format a35

## 杀某个SID会话
SELECT /*+ rule */ sid, s.serial#, 'kill -9 '||spid, event, blocking_session b_sess FROM v$session s, v$process p WHERE sid='&sid' AND s.paddr = p.addr order by 1;
阅读全文 »

又到一年年底时,对数据库的健康检查必不可少,尤其是磁盘空间、asm 空间、表空间的检查与扩容。

平常 asm 磁盘/表空间的检查都很经常做,对于磁盘空间的检查可能没有那么关注,尤其是磁盘文件系统的 inode 使用情况,现在的磁盘都是白菜价,往往都是 2T 起步,根据经验 inode 在大磁盘的情况下,有时候超过50%之后就会有问题,可能出现创建文件很慢,比如创建 oracle的 audit 审计日志很慢,有超过 ext3/4 文件系统 的 Directory indexkernel: EXT4-fs warning (device dm-2): ext4_dx_add_entry: Directory index full! ,即使磁盘空间和文件系统的 inode 仍然很富裕的情况,参见:What is the meaning of “ext[3/4]_dx_add_entry: Directory index full!”? https://access.redhat.com/solutions/29894

检查 磁盘空间/inode 使用情况的时候,在批量机器进行检查的时候,尤其是堡垒机无法批量执行df 命令的时候,挨个去检查还是有点费时的。还有通常我们都是df -hdf -i 去检查,这样会将所有的磁盘的使用率展示出来,但是我只关注超过比如 磁盘使用率超过80%,inode使用率超过50%的情况。现在2023年都快结束了,AI 综合症都流行一年了,那就问下 AI吧。
简单方便,AI 第一次给我的命令如下比较简单明了:

阅读全文 »

问题概述

image-20231218214544794

今天遇到案例,expdpUDE-00014:参数 'include' 的值无效。

后知后觉的题外话,如果看到这个报错直接去搜索,可能一下子就找到了答案,搜索结果第一条就是 mos 官方网站,还带 Doc id 1587384.1 如下:

image-20231218215129278

但是我看到这个报错后没有直接去直接搜索,主要是这个报错信息很明显,是include参数的值有问题, 于是就根据这个报错去进一步的排查。

阅读全文 »

最近接手了几套新的 ORACLE 数据库,发现其归档空间经常满,通过 crontab -l 初步一看是有定时删除归档脚本的,检查磁盘空间df -h 发现,挂载的 NFS 磁盘空间满了,归档是存放在 ASM 的,心想这不影响删除归档呢,这NFS 是用来存放备份的。然后检查 rman 脚本发现NFS确实是存放 rman 备份,但是感觉这跟删除归档失败应该没关系。之后就检查删除归档的脚本日志,发现日志报 Linux-x86_64 Error: 28: No space left on device 好家伙磁盘空间不足。

阅读全文 »

[toc]

今天看到一篇文章,是测试 MySQL 8.0 修改密码并验证登录的文章。

其中有以下验证

image-20230930201407400

可以看到上面修改的是 root@'localhost' 用户的密码,而下面验证登录的是通过-h127.0.0.1 的方式登录。这很显然是有问题的,是不严谨的,为什么呢,因为在 MySQL 中 localhost 和 127.0.0.1 是有一点区别的。

下面说下我对 MySQL 中的localhost 127.0.0.1 区别的理解。

阅读全文 »
0%