生产运维中的小妙招:Oracle和MySQL优化技巧

生产运维中的操作无小事,尤其是针对黑屏操作,很多客户都有着自己的血泪史。比如误删关键系统数据的操作系统rm命令,或者执行关库操作后才发现连错了数据库等情况。

除了对生产要有敬畏之心,做关键操作之前反复多确认,多人复核,其实还可以借助一些小妙招来减少紧张和焦虑情绪。在为客户进行hands-on实验演示时,也可以通过这些小妙招来加快演示速度,同时能让观众更清楚Demo环境。

  • Oracle的小妙招
  • MySQL的小妙招

Oracle的小妙招

默认情况下,sqlplus连接到数据库,并不会清楚显示必要信息,只有默认的 SQL> 。有经验的运维人员在做关键操作时,比如关闭数据库,会习惯性的确认当前连接的数据库是否正确。同时,建议设置glogin.sql文件,示例如下:

cd $ORACLE_HOME/sqlplus/admin/
vi glogin.sql

添加新内容如下:

define gname=idle
column global_name new_value gname
set heading off
set termout off
col global_name noprint
select upper (sys_context ('userenv', 'DATABASE_ROLE') || ' @' || sys_context('userenv', 'db_unique_name') || ' -> ' ||user||' @'|| sys_context ('userenv', 'con_name')) global_name from dual;
set sqlprompt '&gname> '
set heading on
set termout on
set lines 180 pages 100

关于连接信息的核心就是配置这一段,可根据你的需求做微调:

select upper (sys_context ('userenv', 'DATABASE_ROLE') || ' @' || sys_context('userenv', 'db_unique_name') || ' -> ' ||user||' @'|| sys_context ('userenv', 'con_name')) global_name from dual;

连接上就可以清楚的看到这些信息,效果如下:

[oracle@demo ~]$ p

SQL*Plus: Release 19.0.0.0.0 - Production on Thu Apr 11 07:55:08 2024
Version 19.21.0.0.0

Copyright (c) 1982, 2023, Oracle.  All rights reserved.


Connected to:
Oracle Database 19c EE High Perf Release 19.0.0.0.0 - Production
Version 19.21.0.0.0

PRIMARY @DB0913_9DF_IAD -> SYS @CDB$ROOT> 

[oracle@demo ~]$ s

SQL*Plus: Release 19.0.0.0.0 - Production on Thu Apr 11 07:55:17 2024
Version 19.21.0.0.0

Copyright (c) 1982, 2023, Oracle.  All rights reserved.


Connected to:
Oracle Database 19c EE High Perf Release 19.0.0.0.0 - Production
Version 19.21.0.0.0

PHYSICAL STANDBY @DB0913_DG -> SYS @CDB$ROOT> 

上面的p和s是简化后的别名,同时需要注意的是,glogin.sql其实也有一定的局限性,比如已经连接到会话之后,针对这个会话本身的操作,比如alter session set container这样的命令,就无法捕捉到容器的变化,因为glogin.sql只有在你发起新的连接才能触发,不过瑕不掩瑜,执行这样的操作之后如果想看到变化,就手工调用下glogin.sql就OK。

另外,我最后面特意写了一行 set lines 180 pages 100 ,是想提醒如果大家的日常操作相对固定,可以把最常用的格式设置都放在这里,而不用平常不管查什么都大量去set和col了,真的一点儿都不酷。

别再狂找alert日志了

经常遇到现场的小伙伴在遇到问题时慌慌张张,一顿操作猛如虎,仔细一看就是在各种cd还没找到最关键的alert日志在哪里。而adrci工具也不是所有人都知道,况且有时候也会出现问题不可用。最简单的技巧,就是设置个别名,日常把数据库的alert日志查清楚,写好别名,比如下面示例,针对主库和备库的alert都设置了别名:

[oracle@demo ~]$ which alert
alias alert='tail -200f /u01/app/oracle/diag/rdbms/db0913_9df_iad/DB0913/trace/alert_DB0913.log'
	/usr/bin/tail
[oracle@demo ~]$ which alertdg
alias alertdg='tail -200f /u01/app/oracle/diag/rdbms/db0913_dg/DB0913_DG/trace/alert_DB0913_DG.log'
	/usr/bin/tail

这样遇到问题就直接看最近错误,最近错误显示不到,也可以快速vi这个全路径做精细查找分析,非常方便。

MySQL的小妙招

类似的,MySQL也一样,如何优化mysql界面?有没有类似Oracle的glogin.sql配置文件,不用那么麻烦,MySQL的设置更加简单,直接在你MySQL的my.cnf配置文件中的[mysql]下,添加这么一行:

prompt=\u@\h [\d] >

这样就可以看到关键的用户和所连接的数据库,效果如下:

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2556678
Server version: 5.7.29-log Source distribution

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

alfred@localhost [demodb] >

此外,针对MySQL的错误日志和慢查询日志,也是可以做类似别名设置提示效率的。

Tips: 这些小妙招其实并没啥统一规范,有规划也是企业内部自己制定的规划,所以就当抛砖引玉吧,期望能给经常动手实践的同学带来些许帮助。

标签:游戏攻略