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

磐维数据库日常维护命令&常见问题

原创 飞天 2024-05-09
5188

磐维数据库官网

磐维数据库官网

日常运维

启停数据库集群

--启停整个集群
gs_om -t start
gs_om -t stop
gs_om -t restart  
或者
cm_ctl start
cm_ctl stop 

查看数据库集群的状态

gs_om -t status --detail
或者
cm_ctl query -Cvid

启停单节点进程(包括cm和数据库进程)

cm_ctl start -n <nodeid> 
cm_ctl stop -n <nodeid> 

启停单节点数据库

gs_ctl start [-D <DATADIR>]
gs_ctl stop  [-D <DATADIR>]
gs_ctl restart  [-D <DATADIR>]

查看单节点数据库状态

 gs_ctl query [-D <DATADIR>]

查看数据库静态配置

gs_om -t view

数据库主备切换(主备机均正常时)

主备机均正常的状态下,主备机之间可以通过switchover命令进行角色切换,

cm_ctl switchover -n <nodeid> -D <datadir>
示例:cm_ctl switchover -n 2 -D /data/panweidb/data

--从节点上执行,执行后,从节点变成主节点
gs_ctl switchover -D /data/panweidb/data
注意:执行switchover或failover后,需要执行gs_om -t refreshconf 命令记录当前主备机信息。

数据库主备切换(主机故障时)

主机故障后可以通过failover命令对备机进行升主。

gs_ctl failover   [-D DATADIR]

重建备库

gs_ctl build -b auto -D <datadir>

数据库节点扩缩容

详情可以参考文档:数据库节点扩缩容

gs_expansion -U omm -G dbgrp -h 192.*.*.14 -X ./clusterconfig.xml
gs_dropnode -U omm -G dbgrp -h 192.*.*.14

数据库添加白名单

gs_guc reload -N all -I all -h 'host all all 192.*.*.0/24 sha256'

修改数据库参数

gs_guc [ set | reload ] [-N NODE-NAME] [-I INSTANCE-NAME | -D DATADIR] -c "parameter = value"

--将已设置的参数值设置为默认值
gs_guc [ set | reload ] [-N NODE-NAME] [-I INSTANCE-NAME | -D DATADIR] -c "parameter"

说明:
set
表示只修改配置文件中的参数。

reload
表示修改配置文件中的参数,同时发送信号量给数据库进程,使其重新加载配置文件。

-N
需要设置的主机名称。
取值范围:已有主机名称。
当参数取值为ALL时,表示设置openGauss中所有的主机。

-I INSTANCE-NAME
需要设置的实例名称。
取值范围:已有实例名称。
当参数取值为ALL时,表示设置主机中所有的实例。

修改数据库归档模式

gs_guc reload -N all -I all -c "archive_mode ='on'"
gs_guc reload -N all -I all -c "archive_dest = '/archive' "

查看数据库大小(降序)

select datname,pg_size_pretty(pg_database_size(datname)) as dbsize from pg_database order by 2 desc;

查看表大小(降序)

select tableowner,schemaname,tablename,pg_size_pretty(pg_table_size(schemaname||'.'||tablename)) as table_size from pg_tables order by pg_table_size(schemaname||'.'||tablename) desc;

查看当前会话的pid

postgres=# select pg_backend_pid();
 pg_backend_pid  
-----------------
 140538249737984
(1 row)

查看会话

--查看活跃的会话
SELECT * FROM pg_stat_activity WHERE state = 'active';
--查看运行时间超过1小时的活跃会话
SELECT * FROM pg_stat_activity WHERE state = 'active' AND query_start < NOW() - INTERVAL '1 hour';

查看长事务

--找出当前数据库中最早开始的五个事务
select * from pg_stat_activity order by  xact_start limit 5;

查杀会话

--先查会话的pid
postgres=# select datid,pid,state,query from pg_stat_activity where query like '%pw_version%';
 datid |      pid       | state  |                                        query                                        
-------+----------------+--------+-------------------------------------------------------------------------------------
 20538 | 47922937857792 | active | select datid,pid,state,query from pg_stat_activity where query like '%pw_version%';
 20538 | 47922981963520 | idle   | select * from pw_version();
(2 rows)
--基于上一步查到的pid杀会话
postgres=# select * from pg_terminate_backend(47922981963520);
 pg_terminate_backend 
----------------------
 t
(1 row)
--再次查询,会话已消失
postgres=# select datid,pid,state,query from pg_stat_activity where query like '%pw_version%';
 datid |      pid       | state  |                                        query                                        
-------+----------------+--------+-------------------------------------------------------------------------------------
 20538 | 47922937857792 | active | select datid,pid,state,query from pg_stat_activity where query like '%pw_version%';
(1 row)

查看锁情况

with tl as (
select usename,granted,locktag,query_start,query,relation::regclass relname,a.pid
  from pg_locks l,pg_stat_activity a 
 where l.pid=a.pid and locktag in(select locktag from pg_locks where granted='f')) 
select ts.pid blocker_pid, 
tt.pid blocked_pid,
ts.usename locker_user,ts.query_start locker_query_start,ts.granted locker_granted,ts.query locker_query,tt.relname locked_relation,tt.query locked_query,
tt.query_start locked_query_start,tt.granted locked_granted,tt.usename locked_user,extract(epoch from now() - tt.query_start) as locked_times
from (select * from tl where granted='t') as ts,
(select * from tl where granted='f') tt 
where ts.locktag=tt.locktag 
order by 1;

查看超5分钟的慢sql

select user_name,query,application_name,finish_time-start_time run_time from dbe_perf.statement_history where user_name='user_name' and run_time  >'5 minutes' order by run_time desc;

修改数据库密码有效期

数据库用户的密码都有密码有效期(password_effect_time),当达到密码到期提醒天数
(password_notify_time)时,系统会在用户登录数据库时提示用户修改密码。

postgres=# show password_effect_time;
 password_effect_time 
----------------------
 90
(1 row)

postgres=# show password_notify_time;
 password_notify_time 
----------------------
 7
(1 row)

-- 修改用户密码有效期时间为36500(集群内所有节点执行)
alter system set password_effect_time to 36500;
-- 用户密码有效期查询校验(集群内所有节点查询确认)
select b.usename,a.passwordtime,a.passwordtime+numtodsinterval(to_number((select setting from pg_settings where name='password_effect_time')),'DAY') as passwordexpiredtime  from 
(select roloid,max(passwordtime) as passwordtime from pg_catalog.pg_auth_history group by roloid) a 
right join 
(select usename,usesysid from pg_user) b 
on a.roloid=b.usesysid;
-- 用户密码有效期查询校验(集群内所有节点查询确认)  
show password_effect_time;

数据库日志收集

详情请参考数据库日志收集

gs_collector --begin-time="BEGINTIME" --end-time="ENDTIME" [-h HOSTNAME |
-f HOSTFILE] [--keyword=KEYWORD] [--speed-limit=SPEED] [-o OUTPUT] [-l LO
GFILE] [-C CONFIGFILE]

示例:gs_collector --begin-time="20240323 21:00" --end-time="20240323 21:20"
说明:不加-h参数时,收集的是集群中所有节点的信息

查看数据库license信息

--查临时许可证信息
pw_licensetool --view-temporary
--查正式许可证信息
pw_licensetool --dump=/正式license路径 

获取磐维数据库中对象的DDL语句

磐维数据库中获取DDL语句

修改表名、字段名大小写不敏感

gs_guc reload -N all -D <datadir> -c "lower_case_table_names=1"
gs_guc reload -N all -D <datadir> -c "lower_case_column_names=1"
注意:需要重启数据库才能生效!

查看数据库参数的值

gsql中:

show 参数名;
举例:
show failed_login_attempts; 

图形化工具中:

show current_setting('参数名'); 
举例:
select current_setting('failed_login_attempts'); 

查看数据库兼容模式

show sql_compatibility;
或者
select datname, datcompatibility
FROM pg_database;

常用数据字典

select * from pg_class;
select * from pg_database;
select * from pg_tables;
select * from information_schema.columns;
SELECT * from pg_constraint;
select * from pg_namespace;
select * from pg_roles;
select * from pg_shadow;
select * from pg_user;
SELECT * from pg_views ;
select * from pg_stat_activity;

查看物化视图

SELECT n.nspname as "Schema",
  c.relname as "Name",
  CASE c.relkind WHEN 'r' THEN 'table' WHEN 'v' THEN 'view' WHEN 'i' THEN 'index' WHEN 'I' THEN 'global partition index' WHEN 'S' THEN 'sequence' WHEN 'L' THEN 'large sequence' WHEN 'f' THEN 'foreign table' WHEN 'm' THEN 'materialized view'  WHEN 'e' THEN 'stream' WHEN 'o' THEN 'contview' END as "Type",
  pg_catalog.pg_get_userbyid(c.relowner) as "Owner",
  c.reloptions as "Storage"
FROM pg_catalog.pg_class c
     LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
     LEFT JOIN pg_catalog.gs_recyclebin rcy ON rcy.rcyrelid = c.oid and rcy.rcyoperation='d'
WHERE c.relkind IN ('m')
      AND rcy.rcyrelid is null
      AND n.nspname <> 'pg_catalog'
      AND n.nspname <> 'db4ai'
      AND n.nspname <> 'information_schema'
      AND n.nspname !~ '^pg_toast'
      AND c.relname not like 'matviewmap\_%'
      AND c.relname not like 'mlog\_%'
  AND pg_catalog.pg_table_is_visible(c.oid)
ORDER BY 1,2;

常用gsql元命令

\copyright 显示版权信息
\conninfo 显示当前登录信息
\l 列出数据库信息
\db 列出表空间信息
\du 列出用户、角色
\dt 列出数据库表
\di 列出索引
\dx 列出插件
\df 列出函数
\dv 列出view
\i FILE 执行文件中的命令 
\h [NAME]  sql命令的help信息 
\q 退出数据库

常见问题

CM选主异常

详情请参考文档:CM选主异常排查思路

omm账号过期

两种处理方法:

方法一、直接延期omm账号
(1)检查账号过期情况
[omm@cmdb1 ~]$ chage -l omm
Last password change                                    : Jan 31, 2024
Password expires                                        : Apr 30, 2024
Password inactive                                       : never
Account expires                                         : never
Minimum number of days between password change          : 7
Maximum number of days between password change          : 90
Number of days of warning before password expires       : 7
可以看到,账号已经于4月30日过期
(2)延期账号
[omm@cmdb1 ~]$ chage -M 99999 omm
(3)检查延期结果
[omm@cmdb1 ~]$ chage -l omm
Last password change                                    : Jan 31, 2024
Password expires                                        : never
Password inactive                                       : never
Account expires                                         : never
Minimum number of days between password change          : 7
Maximum number of days between password change          : 99999
Number of days of warning before password expires       : 7

方法二、真实修改omm账号的密码
修改命令:passwd omm

归档异常

如果开启了归档,但是归档不成功,那么xlog日志会一直增长,pg_xlog的archive_status目录下会有大量的.ready文件使磁盘空间被撑爆。

检查归档目录的权限是否正确
检查归档命令是否正确

磁盘空间满

1、调整datastorage_threshold_value_check参数:
gs_guc reload -Z cmserver -N all -I all -c "datastorage_threshold_value_check=95"
2、登录数据库检查大表,然后对大表执行vacuum操作:
   vacuum full 大表名;
3、检查磁盘使用率是否已经下降到85%以下
4、将参数阈值调回85。
gs_guc reload -Z cmserver -N all -I all -c "datastorage_threshold_value_check=85"
5、主库上检查数据库参数
postgres=# show transaction_read_only;
 transaction_read_only 
-----------------------
 off
(1 row)

postgres=# show default_transaction_read_only;
 default_transaction_read_only 
-------------------------------
 off
(1 row)
主库上需保证两个参数transaction_read_only、default_transaction_read_only都是off,如果不是off,用下面语句修改:
alter system set default_transaction_read only = off.
alter system set transaction_read_only = off;

备份空间满

--检查备份情况
gs_probackup show -B /backup/probackup --instance=panweidb
--删除状态是error的备份
gs_probackup delete -B  /backup/probackup/ --status=ERROR --instance=panweidb
--删除最早的(或者异常的)备份
gs_probackup delete -B /backup/probackup --instance=panweidb -i <上一步查出来id列的值>
--根据实际情况调整备份策略,vacuum 大表减少数据量

备份报错:ERROR: pg_stop_backup doesn’t answer in 300 seconds, cancel it

解决办法:
1、检查归档是否开启:show archive_mode;
2、检查归档路径是否正确:show archive_dest;
3、检查wal_sender_timeout参数配置是否配置正确:show wal_sender_timeout;
4、检查/archive目录的读写权限:设置成磐维数据库安装用户的权限

备份报错:WARNING:session unused timeout FATAL:terminating connection due to administrator command Error:query failed: courd not see data to server: Broken pipe

查看报错信息,可能还有这个:INFO:Data files are transferred,time elapsed:15m:**s

解决办法:
1、检查omm用户session超时设置:show  session_timeout;
2、关闭omm用户的session超时参数,设置如下:
alter user omm set session_timeout to 0;

在虚拟机安装磐维数据库2.0.2时,数据库无法成功启动

在虚拟机安装磐维数据库2.0.2时,数据库无法成功启动

关于作者:
网名:飞天,墨天轮2024年度优秀原创作者,拥有 Oracle 10g OCM 认证、PGCE认证以及OBCA、KCP、ACP、磐维等众多国产数据库认证证书,目前从事Oracle、Mysql、PostgresSQL、磐维数据库管理运维工作,喜欢结交更多志同道合的朋友,热衷于研究、分享数据库技术。
微信公众号:飞天online
墨天轮:https://www.modb.pro/u/15197
如有任何疑问,欢迎大家留言,共同探讨~~~

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

评论