达梦常见问题
## 问题1 授权用户用户报错-[-5567]
Server[58.2.10.164:5288]:mode is primary, state is open
login used time : 32.421(ms)
disql V8
SQL>
SQL>
SQL>
SQL> grant create procedure,create any synonym,drop any synonym,create any context,create materialized view to "rwaetl";
grant create procedure,create any synonym,drop any synonym,create any context,create materialized view to "rwaetl";
[-5567]:Error in line: 1
Grantor no granted privilege.
used time: 10.330(ms). Execute id is 0.
SQL> show user;
unknown SHOW choosen user
SQL> select user;
LINEID USER
---------- ------
1 aaa
used time: 11.037(ms). Execute id is 153758000.
SQL>
分析:
SQL> grant create procedure to "rwaetl";
executed successfully
used time: 11.550(ms). Execute id is 153758004.
SQL> grant create procedure to "rwaetl";
executed successfully
used time: 11.198(ms). Execute id is 153758005.
SQL> grant create any context to "rwaetl";
grant create any context to "rwaetl";
[-5567]:Error in line: 1
Grantor no granted privilege.
used time: 10.094(ms). Execute id is 0.
SQL> grant create any context to "rwaetl";
grant create any context to "rwaetl";
[-5567]:Error in line: 1
Grantor no granted privilege.
used time: 10.215(ms). Execute id is 0.
SQL> grant create materialized view to "rwaetl";
executed successfully
used time: 11.292(ms). Execute id is 153758006.
SQL> select sf_get_para_value(1,'ENABLE_DDL_ANY_PRIV') from sysdual;
LINEID sf_get_para_value(1,'ENABLE_DDL_ANY_PRIV')
---------- ------------------------------------------
1 0
开启ENABLE_DDL_ANY_PRIV参数(是否授予和回收DDL相关的ANY系统权限),并再次授权
SQL> sp_set_para_value(1,'ENABLE_DDL_ANY_PRIV',1);
操作已执行
##### 参考文档
sp_set_para_value(1,'ENABLE_DDL_ANY_PRIV',0);
达梦数据库-错误码-[-5567]-分析处理
PYZ
2024/06/28
938
0
0
错误码:-5567
错误内容:授权者没有此授权权限
原因:
默认禁用DDL相关的ANY权限,避免普通用户权限过高
示例:
disql aaa/aaa
--创建用户
create user test identified by test password_policy 0;
--授权
grant create any table to test;
-5567: 第1 行附近出现错误:
授权者没有此授权权限
复制
问题处理:
开启ENABLE_DDL_ANY_PRIV参数(是否授予和回收DDL相关的ANY系统权限),并再次授权
SQL> sp_set_para_value(1,'ENABLE_DDL_ANY_PRIV',1);
操作已执行
SQL> grant create any table to test;
操作已执行
--验证
SQL> select * from dba_sys_privs where grantee='TEST';
行号 GRANTEE PRIVILEGE ADMIN_OPTION
---------- ------- ---------------- ------------
1 TEST CREATE ANY TABLE NO
2 TEST CREATE SESSION NO
https://eco.dameng.com/community/post/20240627142341FFEL1SLI75BXIJNTZE
####sample 来源
介绍0:达梦数据库的架构如下:
没有浮动vip概念,只有dm_svc 配置服务分发连接
传统的x86 VCS 架构
有浮动vip概念
-》1.因为不是传统的 x86 vcs 浮动ip 架构,所以达梦数据库没有对外连接没有浮动vip概念。
达梦的主备 解决方法
配置dm_svc.conf 这个统一的配置文件来处理连接数据库的动作dm_svc.conf 配置服务分发连接
或者在jdbc 字符串指定主备库2个地址来连接主库
需要注意的是:
如果像传统架构使用单个ip 连接数据库,无法实现主备库自动切换,如果使用服务名或者或者在jdbc 字符串指定主备库2个地址来连接,可以实现主备库的自动切换
生产达梦的主备 解决方法
-》对于应用运维人员或者dba: 配置dm_svc.conf 这个统一的配置文件来处理连接数据库的动作dm_svc.conf 配置服务分发连接.(一旦主备库切换,运维不需要改动任何连接信息,可以实现继续访问主库)
-》对于开发人员:在jdbc 字符串指定主备库2个地址来连接主库.(一旦主备库切换,开发不需要改动任何配置,可以实现实现继续访问主库)
需要注意的是:
如果像传统架构使用单个ip 连接数据库(只适用于测试环境),无法实现生产主备库自动切换,如果使用服务名或者或者在jdbc 字符串指定主备库2个地址来连接,可以实现主备库的自动切换,具体配置方法如下,建议适用配置方法2:
开发人员配置方法1:配置 dm_svc.conf,该文件配置在中间件服务器或应用服务器上,root 用户执行
For linux 服务器的配置方法:
具体请看Q6.1 (以下配置linux适用于主备库 集群模式)
或者看以下文档的第一节 (一主一备配置方式)
开发人员配置方法2:Jdbc 配置 连接数据库的方法请看以下文档的第二节
(一主一备配置方式)
开发人员配置方法2:Jdbc 配置 连接数据库的方法请看以下文档的第二节
(一主两备配置方式)
说明,经过研发二部atmc/upbm 项目组测试,在上面主备模式下,
即便主机达梦数据库发生切换后,
->Weblogic/内嵌的tongWeb 能够检测到原连接失效,
重新建立新的连接,切换新机器上。正常主备swithover切换顺滑,
异常failover有一次连接失败,随后就正常
介绍1:达梦数据库的主机一体机配置如下:
配置 一体机节点1/节点2
主机型号 Hygon C86 7280
操作系统 Kylin Linux Advanced Server V10 (Tercel)
CPU Hygon C86 7280 32-core Processor(2颗)
内存 256GB
本地硬盘 硬盘是2*1.2T SAS,3.2T NVME,2*1GE,2*10GE+4*40G
业务网络 1Gb以太网
数据库版本 dm8_20220305_x86_kylin10_64.iso
0.新建达梦数据库需求
案例1:共用实例,需要确认参数一致
1.如果是共用实例,需要查看数据库的参数
Ps -ef |grep dms查看数据库初始化路径
切换到dmdba用户
dminit path=初始化实例路径 +参数设置(这个参数设置和原db要一样)
查看原db得参数设置:
Sql1:
select
*
from
(
SELECT
a.*,
page/1024
||'K' page_size,
SF_GET_EXTENT_SIZE()
||'K' EXTENT_SIZE ,
decode(SF_GET_CASE_SENSITIVE_FLAG(), 1, '是', 0, '否') CASE_SENSITIVE,
decode(SF_GET_UNICODE_FLAG(), 1, 'UTF8', 0, 'GB18030') UNICODE_FLAG,
decode(SF_GET_LENGTH_IN_CHAR(), 1, '是', 0, '否') LENGTH_IN_CHAR
FROM
V$DATABASE a
);
Sql2:
select para_name,para_value from v$dm_ini where para_name ='COMPATIBLE_MODE';
2、如果确保参数一致,开发填写这个表
SID: |
das |
|
数据库产品 |
达梦8 |
|
字符集 CHARSET 字符集选项 , 默认值为 0。0 代表 GB18030,1 代表 UTF-8, |
UTF8 |
charset=1 1, 'UTF8', 0, 'GB18030' 默认0: GB18030 |
簇大小EXTENT_SIZE
|
16 |
extent_size=16 默认16 |
页大小 PAGE_SIZE
|
16 |
page_size=16 默认8 |
端口号 |
5236 |
PORT_NUM=5236 |
VARCHAR类型以字符为单位 (LENGTH_IN_CHAR) (设置为 1 时,所有 VARCHAR 类型对象的长度以字符为单位,否则设置0,以字节为单位) |
否
|
LENGTH_IN_CHAR=0 1, '是', 0, '否' 默认0 |
大小写是否敏感 CASE_SENSITIVE 默认值为 Y(大小写敏感) |
否
|
case_sensitive=0 1, '是', 0, '否' 默认1
|
dm.ini文件参数 |
COMPATIBLE_MODE=2 |
初始化不需要设置这个参数,默认为0,安装完成后在线修改 |
CASE_SENSITIVE 更多的解释如下:
关闭不了,大小写不敏感的数据库里就无所谓
对,默认表名转换大写,双引号表名保持大小写
更加专业解释,见附件
--2:兼容ORACLE,建议大小写敏感
--4:兼容MYSQL,建议大小写不敏感
- 根据1和2的结果是否一致,决定是否需要新建一个实例
dminit path=/dmdata page_size=32 extent_size=32 charset=1 log_size=2048 db_name=dmdb instance_name=dmdb aaa_PWD="Hn@dameng123" SYSAUDITOR_PWD="Hn@dameng123" LENGTH_IN_CHAR=0 case_sensitive=0
|
参数一定不要写错,不然要重建
case_sensitive=0 (0代表大小写不敏感 ,1 为敏感)
LENGTH_IN_CHAR=0 (0代表以字节为单位,1以字符为单位)
charset=1 (1代表 'UTF8)
除了COMPATIBLE_MODE 可以在线修改,默认为0,其他参数都无法在线修改,重启生效
select para_name,para_value from v$dm_ini where para_name ='COMPATIBLE_MODE';
alter system set 'COMPATIBLE_MODE'=3 spfile;
Sql1:
select
*
from
(
SELECT
a.*,
page/1024
||'K' page_size,
SF_GET_EXTENT_SIZE()
||'K' EXTENT_SIZE ,
decode(SF_GET_CASE_SENSITIVE_FLAG(), 1, '是', 0, '否') CASE_SENSITIVE,
decode(SF_GET_UNICODE_FLAG(), 1, 'UTF8', 0, 'GB18030') UNICODE_FLAG,
decode(SF_GET_LENGTH_IN_CHAR(), 1, '是', 0, '否') LENGTH_IN_CHAR
FROM
V$DATABASE a
);
Sql2:
select para_name,para_value from v$dm_ini where para_name ='COMPATIBLE_MODE';
兼容性参数
16.补充:兼容性参数
Compatible_mode
是否兼容其他数据库模式。
0:不兼容,
1:兼容SQL92标准,
2:兼容ORACLE,
3:兼容MS SQL SERVER,
4:兼容MYSQL
1.windows dm8 client登陆服务器登陆方法
登录方法:
su - opamas
disql /nolog
conn aaa/"Hn@dameng123"@57.12.44.12:5288
或者
disql aaa/'"Hn@dameng123"'@57.12.44.12:5288
说明:密码使用单引号+双引号包围起来
或者
disql aaa/\"Hn@dameng123\"@58.4.10.3:5290
或者直接(做了一个alias)
Sqlplus
1.1 点击ISO 文件里面的setup.exe,windows 达梦客户端,一路next 就可以了
安装完成后,点开始的菜单的 达梦管理工具 既可以了
配置信息(ip和端口)如下:
有一个提示,因为aaa 没办法改密码,如果开发问我们要aaa密码,只能我们自己手输,不要泄露
用户名:
aaa
密码(包含特殊字符):
Hn@dameng123
2. 查看数据库的角色
连接之后,会告诉客户,该数据库的角色是primary或者standby
.数据库状态是open
SQL> conn aaa/""@57.12.44.11:5288
Server[57.12.44.11:5288]:mode is primary, state is open
login used time : 1.838(ms)
last login ip : ::ffff:127.0.0.1
last login time : 2021-11-12 13:49:22
login failed times : 0
Whether password is expired : Not expired
或者
select mode$,oguid from v$instance
- 如何创建DBA用户和表空间 和权限
表空间说明如下:
(不需要单独创建用户的临时表空间)
SQL> create user dbmgr identified by dameng123;
SQL> grant dba to dbmgr;
SQL> conn dbmgr/"dameng123"@57.12.44.11:5288
SQL>select path from v$datafile;
SQL>select name from v$tablespace;
SQL> create tablespace users DATAFILE 'users01.DBF' size 32 AUTOEXTEND on NEXT 2 MAXSIZE 1240;
如果遇到这个报错,需要调大数据文件大小,单位是M
(执行失败(语句1)
第1 行附近出现错误[-2410]:
数据文件[/dmtest/data/dmdb/TBS1_01.DBF]大小无效
单个数据文件初始化 -》最小64M
)
SQL> create tablespace test DATAFILE 'student.dbf' size 120;
create tablespace test DATAFILE 'student.dbf' size 120;
[-2410]:Error in line: 1
Data file [student.dbf] size is invalid.
used time: 0.223(ms). Execute id is 0.
##创建测试表空间test,后期可以考虑删除
SQL> create tablespace test DATAFILE 'student.dbf' size 500;
##用户和表空间 sql脚本如下
## shell 如下:
注意
原因:
建立用户的时候,默认是允许失败登陆3次,如果3次登陆都失败的,就会锁10分钟然后自动解锁
create user "dbmon*" identified by "dbmon**" limit failed_login_attemps 3,password_lock_time 1, password_grace_time 10;
建议:
检查连接程序是否有不停的使用错误密码连接数据库行为,如果有的话,使用正确的密码连接
部分角色权限截图如下
详细见如下链接:
https://eco.dameng.com/document/dm/zh-cn/pm/discretionary-access-control.html
3.2 权限
达梦数据库角色管理
默认创建的角色:
DBA:管理员,几乎拥有创建数据库的所有权限,但没有审计数据库和指定强制访问控制的权限。
RESOURCE:具有在自己模式下创建表、视图等对象的权限,也具有操作自己模式下对象数据的权限。
PUBLIC:具有在自己模式下操作数据的权限
SOI:查询系统表的权限
VTI:具有查询动态视图
角色相关数据字典:
5.1 业务对象属主用户
命名规则:<应用系统简称>+DATA
用途:用于建立和维护应用系统自身的数据库对象结构。
系统权限:拥有建数据库对象的权限。
使用人员:应用运维部应用管理员。
密码管理:应用运维部应用管理员管理,定期修改。
开通审计:数据库审计平台审计。
备注:
i)同一个数据库里不允许存在相同名称的对象。
ii)DB版本移交的DDL、DML以及创建的PACKAGE、PACKAGE BODY、FUNCTION、TRIGGER前面必须加上属主。
RESOURCE/PUBLIC role角色
#sp_init_job_sys(1);
#GRANT ADMIN JOB TO NORMAL_USER;
5.2 应用访问数据库用户
命名规则:<应用系统简称>+OPR
用途:用于应用系统连接数据库,对业务数据进行访问和操作。
系统权限:CREATE SESSION 、ALTER SESSION权限。
使用人员:应用运维部应用管理人员。
密码管理:应用运维部应用管理员管理,长期有效。
开通审计:数据库审计平台审计
5.3 数据同步工具用户
命名规则:<关联应用系统简称>+ETL
用途:利用数据同步工具如datastage,kettle,informatica等从数据库中抽取数据。
系统权限:create session、create table权限,同步表查询权限、创建表的权限。
使用人员:数据管理部人员。
密码管理:数据库管理部人员,长期有效。
审计管理:数据库审计平台审计。
5.4 数据库监控用户
命名规则:dbmonopr
用途:监控工具用户。
系统权限:业务表查询权限,数据库数据字典查询权限。
使用人员:监控管理员。
密码管理:应用运维部监控管理人员,长期有效。
审计管理:数据库审计平台审计。
SOI/VTI role角色
##dbmonopr user
create user dbmonopr identified by "dbmonopr<dbname>11" limit failed_login_attemps 3,password_lock_time 1, password_grace_time 10;
grant "VTI","SOI" to "dbmonopr";
grant SELECT on DBA_ARGUMENTS to dbmonopr;
grant SELECT on DBA_ARGUMENTS to dbmonopr;
grant SELECT on DBA_COL_COMMENTS to dbmonopr;
grant SELECT on DBA_COL_COMMENTS to dbmonopr;
grant SELECT on DBA_COL_PRIVS to dbmonopr;
grant SELECT on DBA_COL_PRIVS to dbmonopr;
grant SELECT on DBA_CONSTRAINTS to dbmonopr;
grant SELECT on DBA_CONSTRAINTS to dbmonopr;
grant SELECT on DBA_CONS_COLUMNS to dbmonopr;
grant SELECT on DBA_CONS_COLUMNS to dbmonopr;
grant SELECT on DBA_DATA_FILES to dbmonopr;
grant SELECT on DBA_DATA_FILES to dbmonopr;
grant SELECT on DBA_DB_LINKS to dbmonopr;
grant SELECT on DBA_DB_LINKS to dbmonopr;
grant SELECT on DBA_DEPENDENCIES to dbmonopr;
grant SELECT on DBA_DEPENDENCIES to dbmonopr;
grant SELECT on DBA_DIRECTORIES to dbmonopr;
grant SELECT on DBA_DIRECTORIES to dbmonopr;
grant SELECT on DBA_ENCRYPTED_COLUMNS to dbmonopr;
grant SELECT on DBA_ENCRYPTED_COLUMNS to dbmonopr;
grant SELECT on DBA_EXTENTS to dbmonopr;
grant SELECT on DBA_EXTENTS to dbmonopr;
grant SELECT on DBA_FREE_SPACE to dbmonopr;
grant SELECT on DBA_FREE_SPACE to dbmonopr;
grant SELECT on DBA_INDEXES to dbmonopr;
grant SELECT on DBA_INDEXES to dbmonopr;
grant SELECT on DBA_IND_COLUMNS to dbmonopr;
grant SELECT on DBA_IND_COLUMNS to dbmonopr;
grant SELECT on DBA_IND_PARTITIONS to dbmonopr;
grant SELECT on DBA_IND_PARTITIONS to dbmonopr;
grant SELECT on DBA_IND_SUBPARTITIONS to dbmonopr;
grant SELECT on DBA_IND_SUBPARTITIONS to dbmonopr;
grant SELECT on DBA_JSON_COLUMNS to dbmonopr;
grant SELECT on DBA_JSON_COLUMNS to dbmonopr;
grant SELECT on DBA_OBJECTS to dbmonopr;
grant SELECT on DBA_OBJECTS to dbmonopr;
grant SELECT on DBA_PART_KEY_COLUMNS to dbmonopr;
grant SELECT on DBA_PART_KEY_COLUMNS to dbmonopr;
grant SELECT on DBA_PART_TABLES to dbmonopr;
grant SELECT on DBA_PART_TABLES to dbmonopr;
grant SELECT on DBA_POLICIES to dbmonopr;
grant SELECT on DBA_POLICIES to dbmonopr;
grant SELECT on DBA_POLICY_CONTEXTS to dbmonopr;
grant SELECT on DBA_POLICY_CONTEXTS to dbmonopr;
grant SELECT on DBA_POLICY_GROUPS to dbmonopr;
grant SELECT on DBA_POLICY_GROUPS to dbmonopr;
grant SELECT on DBA_PROCEDURES to dbmonopr;
grant SELECT on DBA_PROCEDURES to dbmonopr;
grant SELECT on DBA_PROFILES to dbmonopr;
grant SELECT on DBA_PROFILES to dbmonopr;
grant SELECT on DBA_PROXIES to dbmonopr;
grant SELECT on DBA_PROXIES to dbmonopr;
grant SELECT on DBA_REDEFINITION_ERRORS to dbmonopr;
grant SELECT on DBA_REDEFINITION_ERRORS to dbmonopr;
grant SELECT on DBA_REDEFINITION_OBJECTS to dbmonopr;
grant SELECT on DBA_REDEFINITION_OBJECTS to dbmonopr;
grant SELECT on DBA_REDEFINITION_STATUS to dbmonopr;
grant SELECT on DBA_REDEFINITION_STATUS to dbmonopr;
grant SELECT on DBA_ROLES to dbmonopr;
grant SELECT on DBA_ROLES to dbmonopr;
grant SELECT on DBA_ROLE_PRIVS to dbmonopr;
grant SELECT on DBA_ROLE_PRIVS to dbmonopr;
grant SELECT on DBA_SEC_RELEVANT_COLS to dbmonopr;
grant SELECT on DBA_SEC_RELEVANT_COLS to dbmonopr;
grant SELECT on DBA_SEGMENTS to dbmonopr;
grant SELECT on DBA_SEGMENTS to dbmonopr;
grant SELECT on DBA_SEQUENCES to dbmonopr;
grant SELECT on DBA_SEQUENCES to dbmonopr;
grant SELECT on DBA_SOURCE to dbmonopr;
grant SELECT on DBA_SOURCE to dbmonopr;
grant SELECT on DBA_SOURCE_AE to dbmonopr;
grant SELECT on DBA_SOURCE_AE to dbmonopr;
grant SELECT on DBA_SYNONYMS to dbmonopr;
grant SELECT on DBA_SYNONYMS to dbmonopr;
grant SELECT on DBA_SYS_PRIVS to dbmonopr;
grant SELECT on DBA_SYS_PRIVS to dbmonopr;
grant SELECT on DBA_TABLES to dbmonopr;
grant SELECT on DBA_TABLES to dbmonopr;
grant SELECT on DBA_TABLESPACES to dbmonopr;
grant SELECT on DBA_TABLESPACES to dbmonopr;
grant SELECT on DBA_TAB_COLS to dbmonopr;
grant SELECT on DBA_TAB_COLS to dbmonopr;
grant SELECT on DBA_TAB_COLUMNS to dbmonopr;
grant SELECT on DBA_TAB_COLUMNS to dbmonopr;
grant SELECT on DBA_TAB_COMMENTS to dbmonopr;
grant SELECT on DBA_TAB_COMMENTS to dbmonopr;
grant SELECT on DBA_TAB_MODIFICATIONS to dbmonopr;
grant SELECT on DBA_TAB_MODIFICATIONS to dbmonopr;
grant SELECT on DBA_TAB_PARTITIONS to dbmonopr;
grant SELECT on DBA_TAB_PARTITIONS to dbmonopr;
grant SELECT on DBA_TAB_PRIVS to dbmonopr;
grant SELECT on DBA_TAB_PRIVS to dbmonopr;
grant SELECT on DBA_TAB_STATISTICS to dbmonopr;
grant SELECT on DBA_TAB_STATISTICS to dbmonopr;
grant SELECT on DBA_TAB_SUBPARTITIONS to dbmonopr;
grant SELECT on DBA_TAB_SUBPARTITIONS to dbmonopr;
grant SELECT on DBA_TRIGGERS to dbmonopr;
grant SELECT on DBA_TRIGGERS to dbmonopr;
grant SELECT on DBA_TRIGGER_COLS to dbmonopr;
grant SELECT on DBA_TRIGGER_COLS to dbmonopr;
grant SELECT on DBA_USERS to dbmonopr;
grant SELECT on DBA_USERS to dbmonopr;
grant SELECT on DBA_VIEWS to dbmonopr;
grant SELECT on DBA_VIEWS to dbmonopr;
5.5 数据库管理员用户
命名规则:dbmgr
用途:数据库管理员用户。
系统权限:数据库管理员权限。
使用人员:DBA。
密码管理:DBA,定期修改。
审计管理:数据库审计平台审计。
Dba role角色
##dbmgr 用户
create user dbmgr identified by "oracle_password_dbgmr" limit failed_login_attemps 3,password_lock_time 1, password_grace_time 10;
grant "dba" to "dbmgr";
补充如下:
达梦数据库内置用户如下:
SYSSSO:系统安全员
aaa:系统管理员
SYS:内置用户,不能直接登录
SYSAUDITOR:系统审计员,用于审计相关功能,开启审计参考
2.权限包含系统权限和对象权限
相关数据字典
select * from DBA_SYS_PRIVS t where T.GRANTEE = ‘user’; ----系统权限
select * from DBA_TAB_PRIVS t where T.GRANTEE = ‘user’; ----对象权限
3.DB_AUDIT 开头为审计相关角色,默认赋给了 SYSAUDITOR;
DB_POLICY 开头的为安全相关角色,默认赋给 SYSSSO;
其他 DBA、RESOURCE、PULIBC、SOI、VTI 等默认赋给了 aaa。
DBA:系统管理员角色,拥有除审计和强制访问控制之外的几乎所有权限。
RESOURCE:拥有 CREATE 创建表、索引、视图等对象定义的权限和数据操作权限(DML 操作)。
PULIBC:拥有数据操作权限(增删改查操作),没有创建表、视图等对象定义权限。
SOI:具有查询系统表(SYS 开头的)查询权限。
VTI: 具有查询动态视图(v$开头的)权限。
4. 检查数据守护集群 (DataWatch)是否启动
自动切换功能
Find / -name dmwatcher.ini
Grep DW_MODE dmwatcher.ini
修改dmwatcher.ini 配置守护进程,配置为全局守护类型,使用自动切换模式。
[GRP1] DW_TYPE = GLOBAL #全局守护类型 DW_MODE = AUTO #自动切换模式 DW_ERROR_TIME = 10 #远程守护进程故障认定时间 INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间 INST_ERROR_TIME = 10 #本地实例故障认定时间 INST_OGUID = 666666 #守护系统唯一OGUID值 INST_INI = /dmdata/MEVI/dm.ini #dm.ini配置文件路径 INST_AUTO_RESTART = 1 #打开实例的自动启动功能 INST_STARTUP_CMD = /dm8/bin/dmserver #命令行方式启动 RLOG_SEND_THRESHOLD = 0 #指定主库发送日志到备库的时间阀值,默认关闭 RLOG_APPLY_THRESHOLD = 0 #指定备库重演日志的时间阀值,默认关闭 |
Q5:生产环境必须开启归档日志,且必须限制归档日志保留量,限制方法:
方法1:
1. 设置归档空间大小限制即指定 SPACE_LIMIT 参数(单位是 MB)。
2. 定期删除归档日志(不用设置定时作业)。
Q:我们配置100g,他会根据限制的大小100g,当要超过这个大小的时候,它会自动覆盖旧的是吧
A:除非是恢复了整个数据库,使用magic 恢复,否则数据库会自动清理归档日志文件
例如开启归档并限制归档空间为 100 G(按实际存储空间给合适的值),如下所示
A:检查方法:
select * from v$arch_status
或者
select arch_space_limit from v$DM_ARCH_INI
如果已经是归档模式,这个值是0,那么参考Q19
方法2:
Q5.2 :查看备份的路径:
-- 查看数据常用参数配置值,数据库常用参数便于了解当前实例数据库文件存放位置,备份集存放位置,数据库缓冲内存大小、使用端口、最大会话连接数等。
SELECT PARA_NAME,PARA_VALUE FROM V$DM_INI WHERE PARA_NAME IN
('MEMORY_POOL','BUFFER','PORT_NUM','MAX_SESSIONS','MAX_SESSION_STATEMENT','INSTANCE_NAME','BAK_PATH','SYSTEM_PATH','ARCH_INI');
Q6备份定期删除备份(每天 23:30 删除 14 天前备份):
A:
使用如下SQL
select * from sysjob.sysjobsteps where id=3;
另外 job相关信息视图
-查询job信息
select * from sysjob.sysjobs;
--查询执行步骤
select * from sysjob.sysjobsteps;
--查询任务调度
select * from sysjob.sysjobschedules;
原文链接:https://blog.csdn.net/m0_60365469/article/details/119736528
2. 观察备份的频率
https://eco.dameng.com/docs/zh-cn/pm/backup-restore-combat.html
连接工具可以观察,
直接用命令行观察的结果因为是二进制的,所以不大好使用
根据下图中观察的效果,
->备份路径是/bbb/amas/data/dmbak
->使用 启动 DMRMAN 工具
->备份时间
1.数据库全量备份是每周6 的23:00 开始备份
(相当执行如下命令
SQL>BACKUP DATABASE BACKUPSET '/bbb/amas/data/dmbak';)
2.增量备份的是每周日到周5的23:00 开始备份
(相当于执行命令
是SQL>BACKUP DATABASE INCREMENT WITH BACKUPDIR '/home/dm_bak' BACKUPSET '/home/dm_bak/db_increment_bak_02';
)
Q6 设置浮动IP 地址,让本地只连接主库
解释如下:
oracle 是只需要在监听文件里配置VIP 就可以了,因为x86 架构支持vcs 双机软件,我们国产达梦数据库用的的ARM的沸腾CPU的国产系统,无法使用vcs 双机软件,所以这能用达梦自己的双机方案
Q6.1(以下配置linux适用于主备库 集群模式)
For linux 服务器:
dm_svc.conf配置在中间件服务器或应用服务器上,root 用户执行
只连接主库
1.
cp /etc/dm_svc.conf /etc/dm_svc.conf.bak
2. ip 和端口根据实际情况选择,login_mode=1代表只连接主库,amas_svc是服务名,一共有2行需要改(LOGIN_MODE=(1)代表着只连接主库,如果是单机环境,就会报错[-70019]:No matching server to login.
)
vi /etc/dm_svc.conf
amas_svc=(57.12.44.12:5288,57.12.44.11:5288)
TIME_ZONE=(480)
LANGUAGE=(en)
[amas_svc]
LOGIN_MODE=(1)
SWITCH_TIME=(300)
SWITCH_INTERVAL=(200)
3.
chmod 644 /etc/dm_svc.conf
4.验证 在dmdba 用户下或者 opamas 用户下,直接用服务名 amas_svc 连接
disql aaa/'"Hn@dameng123"'@amas_svc
或者这样连接
disql aaa/\"Hn@dameng123\"@58.4.10.3:5290
Q6.2(以下配置linux适用于单机库)
/etc/dm_svc.conf
amas_svc=(10.241.58.20:5237)
TIME_ZONE=(480)
LANGUAGE=(en)
Q6.3 创建好主备集群后,备机无法连接
【问题原因】:
考虑是 dm_svc.conf 文件 LOGIN_MODE 参数配置问题。dm_svc.conf 配置文件的内容分为全局配置区和服务配置区。全局配置区在前,服务配置区在后,以“[服务名]”开头,可配置除了服务名外的所有配置项。服务配置区中的配置优先级高于全局配置区。以下介绍 dm_svc.conf 文件 LOGIN_MODE 参数不同配置时的登录情况:
一、当 dm_svc.conf 的参数LOGIN_MODE=(1) 全局配置时,内容如下:
[root@dmdb01 ~]# cat /etc/dm_svc.conf |
不同方式登录如下:
1.利用./disql连数据库时
---用./disql 连接IP登备库时,报错:[-70019]:没有匹配的可登陆服务器. |
2.利用管理工具连数据库时
(1)用达梦管理工具连接备库 IP 时,登录失败;
(2)用达梦管理工具连接服务名登录时,连接成功,处于主机模式。
二、当dm_svc.conf的参数LOGIN_MOEDE=(1)局部配置时,内容如下
[root@dmdb01 ~]# cat /etc/dm_svc.conf |
不同方式登录如下:
1.利用./disql连数据库时
---用./disql 连接 IP 登备库时,登录成功,服务器[192.168.254.149:5236]:处于备库打开状态 |
2.利用管理工具连数据库时
(1)用达梦管理工具连接备库 IP 时,连接成功,处于备机模式;
(2)用达梦管理工具连接服务名登录时,连接成功,处于主机模式。
总结:
(1)当在全局配置区配置 LOGIN_MODE=(1)时,用 IP 登陆备库是拒绝的,但是用服务名则会连接主库。
(2)当在局部配置区配置LOGIN_MODE=(1)时,用IP登录备库是可行的。因此在局部设置时,要用服务名去登录,备机就无法连接。
注意:当修改dm_svc.conf内容后,需要重启客户端,修改的配置才能生效。
Q6.4 windows 配置主备库配置主备库,只连接主库
目的:64 位的 DM 安装在 Win64 上
dm_svc.conf文件放置于C:/windows/system32/
- 以管理员身份打开dos。(这一步有问题,联系windows管理员)
- 创建一个文件dm_svc.conf
copy con dm_svc.conf
1.copy 如下文件到对应目录 C:/windows/system32/,这个是已经编辑好的。请直接粘贴到C:/windows/system32/
2.测试连接,打开dm_console:
新建立连接
登陆成功如下
Q7 达梦数据库建立作业调度的步骤(语句创建)
–建立达梦数据库job调度
–1、初始化,创建系统表
call SP_INIT_JOB_SYS (1);
–2、创建job名称
call SP_CREATE_JOB(‘job_1’,1,0,’’,0,0,’’,0,’’);
–3、以下步骤是,不管新增和修改时,都必须执行的步骤。
call SP_JOB_CONFIG_START(‘job_1’);
–4、创建job作业步骤
–新增
call SP_ADD_JOB_STEP(‘job_1’, ‘统计数据更新情况’, 0, ‘begin
PKG_SYN_DATA.P_HGZX_SYN_DATA;
end;’, 1, 2, 0, 0, NULL, 0);
/*
–修改
call SP_ALTER_JOB_STEP(‘job_1’, ‘统计数据更新情况’, 0, ‘begin
PKG_SYN_DATA.P_HGZX_SYN_DATA;
end;’, 1, 2, 0, 0, NULL, 0);
*/
–5、创建调度步骤
–新增(每天下午14:00执行1次)
call SP_ADD_JOB_SCHEDULE(‘job_1’, ‘调度测试’, 1, 1, 1, 0, 0, ‘14:30:00’, NULL, ‘2019-06-21 13:51:58’, NULL, ‘’);
/*
–修改
call SP_ALTER_JOB_SCHEDULE(‘job_1’, ‘调度测试’, 1, 1, 1, 0, 0, ‘14:30:00’, NULL, ‘2019-06-21 13:51:58’, NULL, ‘’);
*/
–6、作业调度配置提交
call SP_JOB_CONFIG_COMMIT(‘job_1’);
–7、查询确认创建的JOB调度任务。
select * from dba_jobs;
————————————————
版权声明:本文为CSDN博主「Bella_cheng」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/shuying_cheng/article/details/93193479
Q9 DCP机考-DM8实时主备环境搭建_v1
参考 \\30.5.4.8\STZ_share\数据库\国产数据库达梦\faq\Q9
Q8.1 达梦数据守护集群搭建
该守护集群的架构如下:
实验结果
2个节点配置(主节点加备节点(同时部署监视器))
3个节点配置 更加详细(主节点加备节点加监视器节点))
Q8 dm达梦数据库 报错[-70070]初始化SSL环境失败
天在dm中新建了一个用户,但是使用这个用户去连接数据库时出现下面的报错:
查阅资料得知,因为在dm安全版中默认开启了SSL加密,所以需要关闭:
SQL> sp_set_para_value(2,'ENABLE_ENCRYPT',0);
脚本修改方法如下:
disql1<<!
sp_set_para_value(2,'ENABLE_ENCRYPT',0);
!
- 1
执行完之后需要重启数据库才能生效。
Q10 参数文件
参考 \\30.5.4.8\STZ_share\数据库\国产数据库达梦\faq\Q10
Q11 达梦数据库日志
参考 \\30.5.4.8\STZ_share\数据库\国产数据库达梦\faq\Q11
Q12 作业4 DCA考试 考点 小技巧
参考 \\30.5.4.8\STZ_share\数据库\国产数据库达梦\faq\Q12
Q13 官方安装和大梦手册_图形化
参考 \\30.5.4.8\STZ_share\数据库\DM国产数据库达梦\faq\Q13
官方安装手册写的非常详细,如果手工安装,可以参考
安装后一定要记录参数:
sql1:
select
*
from
(
SELECT
a.*,
page/1024
||'K' page_size,
SF_GET_EXTENT_SIZE()
||'K' EXTENT_SIZE ,
decode(SF_GET_CASE_SENSITIVE_FLAG(), 1, '是', 0, '否') CASE_SENSITIVE,
decode(SF_GET_UNICODE_FLAG(), 1, 'UTF8', 0, 'GB18030') UNICODE_FLAG,
decode(SF_GET_LENGTH_IN_CHAR(), 1, '是', 0, '否') LENGTH_IN_CHAR
FROM
V$DATABASE a
);
Sql2:
select para_name,para_value from v$dm_ini where para_name ='COMPATIBLE_MODE';
Q14 如何循环插入数据
参考 \\30.5.4.8\STZ_share\数据库\DM国产数据库达梦\faq\Q14
Q15 如何查看dmserver 的端口
参考 \\30.5.4.8\STZ_share\数据库\国产数据库达梦\faq\Q15
Q16 Q16 数据迁移--DM8如何通过控制文件实现数据库迁移
参考 \\30.5.4.8\STZ_share\数据库\国产数据库达梦\faq\Q16
Q17 如何克隆达梦数据库到异机
参考 \\30.5.4.8\STZ_share\数据库\国产数据库达梦\faq\Q17
以下情况是 源库和目标库 的目录结构和用户完全一样的情况
ps -ef|grep dms
source 10.241.58.22 :
/bbb/dm/fibs/bin/dmserver
path=/dmdata/fibs/fibsuat/dm.ini -noconsole
target: 10.241.223.133
in root
mkdir -p /bbb/dm/fibs
mkdir -p /dmdata/fibs
source:
scp -rp /bbb/dm/fibs/* root@10.241.223.133:/bbb/dm/fibs
scp -rp /dmdata/fibs/* root@10.241.223.133:/dmdata/fibs
in target
dmdba 用户的profile
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/bbb/dm/fibs/bin"
export DM_HOME="/bbb/dm/fibs"
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$DM_HOME/bin"
export PATH=$DM_HOME/bin:$DM_HOME/tool:$PATH:$HOME/bin
echo " there is performance signle dm db \n
db1 fibs port 5245 , /bbb/dm/fibs/bin/DmServicefibsuat start \n
"
chown -R dmdba:dinstall /dmdata/fibs
chown -R dmdba:dinstall /bbb/dm/fibs
启动
/bbb/dm/fibs/bin/DmServicefibsuat start
安装后一定要记录参数:
sql1:
select
*
from
(
SELECT
a.*,
page/1024
||'K' page_size,
SF_GET_EXTENT_SIZE()
||'K' EXTENT_SIZE ,
decode(SF_GET_CASE_SENSITIVE_FLAG(), 1, '是', 0, '否') CASE_SENSITIVE,
decode(SF_GET_UNICODE_FLAG(), 1, 'UTF8', 0, 'GB18030') UNICODE_FLAG,
decode(SF_GET_LENGTH_IN_CHAR(), 1, '是', 0, '否') LENGTH_IN_CHAR
FROM
V$DATABASE a
);
Sql2:
select para_name,para_value from v$dm_ini where para_name ='COMPATIBLE_MODE';
Q18 yum源
参考 \\30.5.4.8\STZ_share\数据库\国产数据库达\YUM源
Q19 增加归档参数ARCH_SPACE_LIMIT 参数,重启库
归档日志的操作
注意:要新建一个归档目录,不能用旧的归档日志目录
检查:归档是指对 REDO 日志的归档.用于数据库的还原和恢复.
dbms_logmnr 可以用于归档的日志挖掘.
find / -name dmarch.ini
如果find 命令找不到就到dm.ini 文件的目录下,去获取对应的文件
修改find / -name dmarch.ini
修改dmarch.ini的ARCH_SPACE_LIMIT 参数
单位默认以M为单位
ARCH_WAIT_APPLY = 1
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /bbb/DM8/dmdbms/data/DAMENG/arch
ARCH_FILE_SIZE = 128
ARCH_SPACE_LIMIT = 1280
其他命令:
select arch_mode from v$database;
select * from v$dm_arch_ini;
开启归档:
alter database mount;
alter database ARCHIVELOG;
--alter database NOARCHIVELOG; --关闭归档
alter database ADD ARCHIVELOG 'type=local,dest=/DB/data/arc,file_size=64,space_limit=10240';
alter database ADD ARCHIVELOG 'type=local,dest=/bbb/DM8/dmdbms/data/DAMENG/arch1,file_size=128,space_limit=1280';
alter database open;
归档的手工切换:
alter database ARCHIVELOG CURRENT;
alter SYSTEM ARCHIVE LOG CURRENT;
alter SYSTEM SWITCH LOGFILE;
归档的删除:
select * from v$ifun t where T.NAME like '%ARCHIVE%';
select SF_ARCHIVELOG_DELETE_BEFORE_LSN(33732);
删除10天以前的归档日志
select SF_ARCHIVELOG_DELETE_BEFORE_TIME(sysdate -10);
关于归档空间达到上限业务繁忙期删除老的归档日志文件,因为 IO 繁忙.
可以创建作业定时清理归档日志;
图形化界面开启归档
SQL修改参数重启数据库后生效
in dmdba user:
[dmdba@localhost bin]$ ./DmServiceDMSERVER restart
Stopping DmServiceDMSERVER: [ OK ]
Starting DmServiceDMSERVER: [ OK ]
[dmdba@localhost bin]$
Q20 DM 存储结构
数据库正常启动必不可少的四种文件:一般4种文件 都在同一个目录下
(1)配置参数文件 dm.ini
[dmdba@LylinV10DCA02 DAMENG]$ ll dm.ini
-rw-r--r-- 1 dmdba dinstall 51157 10 月 18 11:49 dm.ini
找到配置文件:(如何查看配置文件)
find / -name dm.ini
cat dm.ini
Q21 :控制文件 dm.ctl
2.1 如何查看控制文件的内容
strings dm.ctl
2.2. 生成控制文件的跟踪文件
./dmctlcvt TYPE=1 SRC=/wls/applogs/DM8/data/DAMENG/dm.ctl DEST=/tmp/dmctl.txt
(3)数据文件:
[dmdba@LylinV10DCA02 DAMENG]$ ll *.DBF
(4)联机日志文件:
Q22 .如何修改达梦数据库的修改参数
Q:
(5.1)
select * from v$dm_ini where para_name ='HFS_CACHE_SIZE';
(5.2) alter system 方式修改
disql aaa/manager1234
alter system set 'HFS_CACHE_SIZE'=300 spfile;
(5.3)
SQL修改参数重启数据库后生效
in dmdba user:
[dmdba@localhost bin]$ ./DmServiceDMSERVER restart
Stopping DmServiceDMSERVER: [ OK ]
Starting DmServiceDMSERVER: [ OK ]
[dmdba@localhost bin]$
(5.4)如果service 启动失败,可以看看 systemctl status DmServicedmdb.service
失败原因
[root@dba ~]# systemctl start DmServicedmdb
Job for DmServicedmdb.service failed because the control process exited with error code.
See "systemctl status DmServicedmdb.service" and "journalctl -xe" for details.
[root@dba ~]# ps -ef|grep dms
dmdba 1130 1 0 14:22 ? 00:00:09 /bbb/dmdbms/bin/dmserver path=/bbb/dmdata/dmdb01/dm.ini -noconsole
root 7015 2060 0 14:44 pts/0 00:00:00 grep dms
[root@dba ~]# systemctl status DmServicedmdb.service
● DmServicedmdb.service - DM Instance Service(DmServicedmdb).
Loaded: loaded (/usr/lib/systemd/system/DmServicedmdb.service; enabled; vendor preset: disabled)
Active: failed (Result: exit-code) since Mon 2022-06-06 14:43:09 CST; 1min 12s ago
Process: 6972 ExecStart=/bbb/dmdbms/bin/DmServicedmdb start (code=exited, status=1/FAILURE)
6月 06 14:42:51 dba systemd[1]: Starting DM Instance Service(DmServicedmdb)....
6月 06 14:43:09 dba DmServicedmdb[6972]: [39B blob data]
6月 06 14:43:09 dba DmServicedmdb[6972]: version info: enterprise
6月 06 14:43:09 dba systemd[1]: DmServicedmdb.service: Control process exited, code=exited, status=1/FAILURE
6月 06 14:43:09 dba DmServicedmdb[6972]: lic info is different between dm.key and sysinfo.
6月 06 14:43:09 dba systemd[1]: DmServicedmdb.service: Failed with result 'exit-code'.
6月 06 14:43:09 dba systemd[1]: Failed to start DM Instance Service(DmServicedmdb)..
上面就是总结的三种修改达梦实例参数的方法
6.
DM 内存结构
数据缓冲区:
select * from v$dm_ini t where t.PARA_NAME in
('BUFFER','FAST_POOL_PAGES','RECYCLE','KEEP');
Q22.1 .如何修改达梦数据库的参数
MAX_SESSIONS参数太小导致应用启动失败。
1.查看参数是否是静态参数
select type,*from v$parameter where name ='MAX_SESSIONS';
看这个type
in file 就是静态,在ini文件中修改
动态的是SYS(系统级动态参数)和session(会话级动态参数)。会话级参数被修改后,新参数值只会影响新创建的会话,之前创建的会话不受影响;系统级参数的修改则会影响所有的会话。
2修改参数
select sf_get_para_value(2,'MAX_SESSIONS');
alter system set 'MAX_SESSIONS'=2000 spfile;
3
SQL修改参数重启数据库后生效
in dmdba user:
cd $DM_HOME/bin
[dmdba@localhost bin]$ ./DmServiceDMSERVER restart
Stopping DmServiceDMSERVER: [ OK ]
Starting DmServiceDMSERVER: [ OK ]
[dmdba@localhost bin]$
4.
查看端口5239是否启动
netstat -an|grep 5239
查看端口5239属于哪个进程
lsof -i:5239
Q23 检查进程
检查进程
select * from v$process;
检查线程
select * from v$threads;
kill session
sp_close_session
查看端口5239是否启动
netstat -an|grep 5239
查看端口5239属于哪个进程
lsof -i:5239
Q24 .disql 登陆方法
Q:
1.disql aaa/manager1234
2.
sql>conn aaa/aaa@LOCALHOST:5237
3.执行sql
sql>start 1.sql
3.退出sql
ctrl + z
Q25: 检查表空间使用率
SQL1: (考虑表空间扩展性)
可以看到单个文件最大支持32T
(HMAIN 表空间显示不出来,可以忽略,hmain表空间是一个目录,它不是以文件方式存在的,在表目录下,每一列的数据会存放到单独的dta文件中,查看大小要在对应的文件系统目录上查看,是这种形式存放在目录上,不是dbf类型的数据文件)
SELECT '****'||sysdate time,
d.tablespace_name "Name",
d.contents "Type",
to_char(nvl(a.bytes / 1024 / 1024, 0), '99999999.9') "Total Ext Size (M)",
to_char(nvl(a.bytes2 / 1024 / 1024, 0), '99999999.9') "Total Size (M)",
to_char(nvl(a.bytes2 - nvl(f.bytes, 0), 0) / 1024 / 1024, '99999999.99') "Used (M)",
to_char(nvl(nvl(f.bytes, 0), 0) / 1024 / 1024, '99999999.99') "Free (M)",
to_char(nvl((a.bytes2 - nvl(f.bytes, 0)) / a.bytes2 * 100, 0),'990.99') "Used %",
to_char(nvl((a.bytes2 - nvl(f.bytes, 0)) / a.bytes * 100, 0),'990.99') "Ext_Used %"
FROM sys.dba_tablespaces d,
(SELECT tablespace_name, SUM(greatest(BYTEs,MAXBYTES)) bytes,SUM(BYTES) bytes2 FROM dba_data_files GROUP BY tablespace_name) a,
(SELECT tablespace_name, SUM(BYTES) bytes FROM dba_free_space GROUP BY tablespace_name) f
WHERE d.tablespace_name = a.tablespace_name(+)
AND d.tablespace_name = f.tablespace_name(+)
order by 9,8
SQL2 (考虑表空间扩展性)
SELECT
a.tablespace_name ,
round(b.max_total/(1024*1024),2) Max_Total_M,
round(total/ (1024 * 1024),2) System_Allocated_Total_M,
round(free/ (1024 * 1024),2) System_Allocated_Free_M,
round((total- free)/(1024 * 1024),2) System_Allocated_Used_M ,
round((total - free) / total, 4) * 100 "System_Allocated_Used_%",
round(((total- free)/max_total),6)*100 "Max_Used_%"
FROM
(
SELECT
tablespace_name,
SUM(bytes) free
FROM
dba_free_space
GROUP BY
tablespace_name
)
a,
(
SELECT
tablespace_name,
SUM(bytes) total,
sum(decode(AUTOEXTENSIBLE,'NO',bytes,MAXBYTES)) max_total
FROM
dba_data_files
GROUP BY
tablespace_name
)
b
WHERE
a.tablespace_name = b.tablespace_name;
SQL2: 查看数据库文件大小 ,大小为M
SELECT total_size*page_size/1024/1024 from v$datafile
SQL3. 增加一个表空间 初始化大小32M
create tablespace TBS DATAFILE 'TBS01.DBF' size 80 AUTOEXTEND on NEXT 2 MAXSIZE 20480
alter tablespace TBS add DATAFILE 'TBS02.DBF' size 80 AUTOEXTEND on NEXT 2 MAXSIZE 20480;
Sql 4可以看到单个文件最大支持32T
->如何修改表空间的最大支持从32T 修改到32G,注意system/temp表空间不能修改
文字化修改方法如下;
- 确认表空间名字和client_path
select t.name tablespace_name, t.id file_id, d.path file_name,d.client_path client_path,
d.total_size * sf_get_page_size() / 1024 / 1024 || 'M' total_space
from v$tablespace t, v$datafile d
where t.id = d.group_id;
SYSTEM 0 /dmdata/data/DAMENG/SYSTEM.DBF SYSTEM.DBF 66M
- 修改最大大小
-system/temp 不能修改大小,报错(他存储的是数据库字典信息,下面也不能创建表,索引之类的)
alter tablespace SYSTEM datafile '/dmdata/data/DAMENG/SYSTEM.DBF' autoextend on next 100 maxsize 20000;
--temp 不能修改大小,报错(Temp 表空间可自动扩充,为了不影响磁盘空间的使用,通常会通过 ini 参数 TEMP_SIZE 配置大小,TEMP_SPACE_LIMIT 设置上限,通过存储过程 SP_TRUNC_TS_FILE 来收缩 Temp 表空间文件)
alter tablespace TEMP datafile '/dmdata/data/DAMENG/TEMP.DBF' autoextend on maxsize 32000;
--以下表空间可以改
alter tablespace tab_sungl_fms datafile '/dmdata/data/DAMENG/tab_sungl_fms.dbf' autoextend on maxsize 32000;
alter tablespace tab_pcmc_fms datafile '/dmdata/data/DAMENG/tab_pcmc_fms.dbf' autoextend on maxsize 32000;
alter tablespace tab_fms_ms datafile '/dmdata/data/DAMENG/tab_fms_ms.dbf' autoextend on maxsize 32000;
alter tablespace tab_fms_eam datafile '/dmdata/data/DAMENG/tab_fms_eam.dbf' autoextend on maxsize 32000;
alter tablespace MAIN datafile '/dmdata/data/DAMENG/MAIN.DBF' autoextend on maxsize 32000;
alter tablespace ROLL datafile '/dmdata/data/DAMENG/ROLL.DBF' autoextend on maxsize 32000;
图像化修改方法如下:
图形化修改:
打开manager工具,右击要修改的表空间,点击修改,选择扩充上限,修改为32g*1024=32768M
Q26 增加日志文件 大小为256M
select * from v$rlog;
select * from v$rlogfile;
alter database add LOGFILE '/wls/applogs/DM8/data/DAMENG/DAMENG03.log' size 256;
Q26 用户管理
12.
用户管理
系统预定义用户:
SYS:内置用户,不能直接登录.
aaa:系统管理员,拥有除审计和强制访问控制之外的几乎所有权限.
SYSAUDITOR:数据库审计管理员,拥有审计相关角色权限.
SYSSSO:数据库安全管理员, 拥有强制访问控制等相关角色权限.
SYSDBO:安全操作员,仅安全版本才有此用户.
设置系统口令策略:
select * from v$dm_ini t where t.PARA_NAME = 'PWD_POLICY'
(-缺省值为2,
当COMPATIBLE_MODE=1 时,PWD_POLICY 的实
际值均为 0 )
系统支持的口令策略有:
⚫ 0 无策略
⚫ 1 禁止与用户名相同
⚫ 2 口令长度不小于 9
⚫ 4 至少包含一个大写字母(A-Z)
⚫ 8 至少包含一个数字(0-9)
⚫ 16 至少包含一个标点符号(英文输入法状态下,除“和空格外的所有符号)
创建用户报错,Password length invalid. 密码长度不够,如何修改参数
SP_SET_PARA_VALUE(1,'PWD_POLICY',5);
->1是同时改文件和内存,2是改文件,0是改内存
->5 是1+4的密码策略
13.权限的管理
默认数据库不能赋予或回收 DDL 的 ANY 权限. 由参数 ENABLE_DDL_ANY_PRIV 控制.
select * from v$dm_ini t where t.PARA_NAME like '%ENABLE_DDL_ANY_PRIV%';
预定义角色:
DBA:数据库管理员角色,默认赋给了 aaa.
RESOURCE:具有数据库对象定义操作权限(CREATE\ALTER)
PUBLIC:具有数据操作权限(SELECT\UPDATE\DELETE\INSERT)
SOI:查询系统表(SYS 开头的)的权限.
VTI:查询动态视图(v$开头的视图)的权限.
select * from DBA_TAB_PRIVS t where T.GRANTEE = 'HR01';
select * from DBA_SYS_PRIVS t where T.GRANTEE = 'HR01';
select * from dba_role_privs t where T.GRANTEE = 'HR01';
create role r1;
14. 模式对象管理
DM 一个用户可以拥有多个模式,Oracle 用户和模式是一对一.
查看模式和对象的归属关系:
select a.id, a.name, a.pid, b.NAME
from SYSOBJECTS a, SYSOBJECTS b
where a."TYPE$" = 'SCH' and a.pid = b.id;
Q:
1.查询当前用户:
SQL> select user;
2.查询当前模式:
SQL> select sys_context('USERENV','CURRENT_SCHEMA');
Q27 物理备份
15.备份
同时达梦也支持第三方的备份软件:上海爱数,鼎甲。
https://www.cnblogs.com/xuchuangye/p/14247503.html
Q:
15.1 检查达梦ap 服务进程是否已经启动
检查DmAP,如果状态关闭,需要打开DmAP
[dmdba@localhost bin]$ ./DmAPService status
[dmdba@localhost bin]$ ./DmAPService start
【问题 1】:DmAPService 服务主要作用是什么呢?
如果数据库正在提供业务,重启这个服务会影响业务运行吗?
【解答】:DmAPService 服务主要是备份数据库时候会用到。重启这个服务不影响业务运行。
【问题 2】:服务查看器中 DmAPService 服务路径怎么修改,
或者服务怎么删除?
【解答】:这个是系统带的辅助服务,路径是不可以修改的,如果用不到的话,不启动就可以。通过操作系统自带的服务管理功能可以删除此服务。
【问题 3】:在服务查看器上怎么启动这个服务?
【解答】:那直接右键启动就可以了,DMAP 服务不需要 ini
文件。
15.2 冷备份
停库
DmServiceDMSERVER stop
启用备份 (输入ini 文件和备份路径)
dmrman
rman>backup database '/wls/applogs/DM8/data/DAMENG/dm.ini' backupset '/wls/applogs/DM8/data/backup'
还原:(数据库关闭,dmap服务打开)
还原数据 (输入ini 文件和备份路径)
RMAN> restore database '/wls/applogs/DM8/data/DAMENG/dm.ini' from backupset '/wls/applogs/DM8/data/backup'
数据恢复 (输入ini 文件和备份路径)
RMAN>recover database'/wls/applogs/DM8/data/DAMENG/dm.ini' from backupset '/wls/applogs/DM8/data/backup'
数据库还原完成,需要更新魔数 (输入ini 文件)
RMAN> recover database '/wls/applogs/DM8/data/DAMENG/dm.ini' update db_magic
还原后,请立即做备份,否则有可能db_magic 不一致导致无法再次还原
启动库
DmServiceDMSERVER start
15.3 热备份
连接备份直接在sql 窗口上敲
http://www.cuug.com.cn/dameng/26262182019.html
热备
1、数据库是打开的
2、DMAP服务是打开的
3、数据库是归档模式
15.3.1 备份数据库: (默认路径的备份)
SQL> backup database;
备份表空间:表空间备份只能联机,还原只能脱机
SQL> backup tablespace DMHR;
检查默认的备份路径
select * from v$parameter where name='bak_path';
或者 (指定路径的 备份)
命令行方式下增量备
15.3.2 做增量备份,一定要有一次完全备份。以完全备份作为基准,备份改变的。
全量备份 (backupset 指定备份的路径)
SQL> backup database full to "DB_DMDB_FULL_2021_01_06_15_55_48" backupset '/wls/applogs/DM8/data/DAMENG/bak/bak_full';
全量备份的基础上增量 (increment:指定是增量备份,with backupdir:指定完全备份的路径)
也可以使用with backupdir关键字来指定基备份集的搜索目录:
SQL> backup database increment with backupdir '/wls/applogs/DM8/data/DAMENG/bak/bak_full' backupset '/wls/applogs/DM8/data/DAMENG/bak/bak_full1';
15.3.3 查看备份信息
使用DMRMAN工具查看增量备份集信息,可以看到第一个差异增量备份的基备份集是全量备份集fullbak_20200316,第二个备份集的基备份集是第一次的差异增量备份集incrbak_20200317_1:
RMAN> show backupset '/wls/applogs/DM8/data/DAMENG/bak/bak_full1'';
RMAN> show backupset '/wls/applogs/DM8/data/DAMENG/bak/bak_full';
15.3.4 备份归档日志
SQL> backup archivelog all to "ARCH_2020_03_02_21_27_25" backupset 'ARCH_2020_03_02_21_27_25' backupinfo '/wls/applogs/DM8/data/DAMENG/bak/arch';
SQL>backup ARCHIVE LOG BACKUPSET '/backup/archivelogbak';
5、还原
还原之前先关闭数据库服务
15.3.5 整库还原:
停库
DmServiceDMSERVER stop
dmrman 还原:
RMAN> restore database '/wls/applogs/DM8/data/DAMENG/dm.ini' from backupset '/wls/applogs/DM8/data/DAMENG/bak/bak_full';
归档日志恢复
restore archivelog from backupset '/backup/archivelogbak' to archivedir '/data/DAMENG/arch2';
数据恢复
(打开数据归档以后使用这个命令进行数据恢复,冷备的数据恢复和热备的数据恢复有区别)
RMAN>recover database '/wls/applogs/DM8/data/DAMENG/dm.ini' with archivedir '/wls/applogs/DM8/data/DAMENG/arch';
##recover database '/wls/applogs/DM8/data/DAMENG/dm.ini' with archivedir '/wls/applogs/DM8/data/DAMENG/arch';
##recover database '/wls/applogs/DM8/data/DAMENG/dm.ini' with archivedir '/wls/applogs/DM8/data/DAMENG/bak/arch';
##recover database '/wls/applogs/DM8/data/DAMENG/dm.ini' with backupinfo '/wls/applogs/DM8/data/DAMENG/bak/arch';
更新数据库魔数
RMAN>recover database '/wls/applogs/DM8/data/DAMENG/dm.ini' update db_magic;
启动库
DmServiceDMSERVER start
15.4
Q: 停库 和启动库
dmdba 用户
停库
DmServiceDMSERVER stop
启动库
DmServiceDMSERVER start
检查
select status$ from v$instance;
Q28 逻辑备份
数据库整体备份方案,开发会有要求做变更前,做一个整体备份
临时逻辑备份
方案如下
方案如下:用exp/imp工具进行逻辑备份。分别进行以下几种模式的备份:全库、
su - dmdba
./dexp userid=aaa/manager1234:5236 directory=/bbb/DM8/dmdbms/dump file=dexpDAMENG_fulltest.dmp log=dexpDAMENG_fulltest.log full=y
必须是aaa用户进行全量导出
./dimp userid=aaa/manager1234 directory=/bbb/DM8/dmdbms/dump file=dexpDAMENG_fulltest.dmp log=dexpDAMENG_fulltestimp.log full=y
指定模式、用户
dexp userid=aaa/manager1234 directory=/bbb/DM8/dmdbms/dump file=USERTEST.dmp log=dexpUSERTEST.log owner=USERTEST
dexp userid=aaa/manager1234 directory=/bbb/DM8/dmdbms/dump file=USERTEST_schema.dmp log=dexpUSERTEST_schema.log schemas=USERTEST
指定表、根据SQL语句进行备份以及只导出表结构。
将 DMHR 模式下对象和数据导入到 HR01 中
[dmdba@LylinV10DCA02 dexp]$ dimp userid=aaa/manager1234 directory=/bbb/DM8/dmdbms/dump file=USERTEST_schema.dmp log=dimpDMHR.log remap_schema=USERTEST:HR01
select username from dba_users;
用imp工具进行逻辑还原。分别进行以下几种模式的还原:全库导入、从指定模式导入到指定模式的还原、指定是否忽略建表错误以及只还原表结构
Q29兼容性参数
16.补充:兼容性参数
Compatible_mode
是否兼容其他数据库模式。
0:不兼容,
1:兼容SQL92标准,
2:兼容ORACLE,
3:兼容MS SQL SERVER,
4:兼容MYSQL
首先连接数据库,然后执行以下命令查看状态:
可以看到此时为0,表示不兼容其他数据库;
disql aaa/manager1234:5236
select para_name,para_value from v$dm_ini where para_name ='COMPATIBLE_MODE';
然后执行以下命令修改参数,修改为对应的数据库兼容模式,比如打开Oracle兼容模式:
alter system set 'COMPATIBLE_MODE'=3 spfile;
然后通过dmdba账户重启数据库服务:
cd $DM_HOME/bin
ls -ltr DmService*
DmService* restart
注意:数据库兼容模式是静态参数,设置完成后必须要重启数据库服务才能生效。如果是动态参数,则不需要重启。
再次查看参数:
修改完成。
Q30: 手工安装dm8 client in x86-64 bit
in root user:
###get soft
cd /tmp
wget -r -np -nH -R index.html http://10.241.21.200/dm8/
cd dm8
unzip *.zip
cd dm8*
#dm8_20210712_x86_rh6_64_ent.zip
mkdir -p /DM8
mount -o loop /tmp/dm8/dm8_20210712_x86_rh6_64_ent/dm8_20210712_x86_rh6_64_ent_8.1.2.38_pack1.iso /DM8/
cd /DM8
chmod 755 ./DMInstall.bin
##section 2 add user
groupadd -g 12349 dinstall
useradd -u 12345 -g dinstall -m -d /home/dmdba -s /bin/bash dmdba
echo 'dmdba@56'|passwd --stdin dmdba
#####section 3 begining to install client In /app/dm
cd /app
mkdir dm
chmod -R 777 dm
chown -R dmdba:dinstall dm
su - dmdba
cd /DM8
./DMInstall.bin -i
exit
sh /app/dm/script/root/root_installer.sh
#####section 4: add more line in profile
##/home/dmdba/.bash_profile
cat>>/home/dmdba/.bash_profile<<EOF
export DM_HOME="/app/dm"
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$DM_HOME/bin"
export PATH=$PATH:$HOME/.local/bin:$HOME/bin:$DM_HOME/bin:$DM_HOME/tool
EOF
cp /app/appsystems/ods/infa/.bash_profile /app/appsystems/ods/infa/.bash_profile.bak
cat>>/app/appsystems/ods/infa/.bash_profile<<EOF
export DM_HOME="/app/dm"
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$DM_HOME/bin"
export PATH=$PATH:$HOME/.local/bin:$HOME/bin:$DM_HOME/bin:$DM_HOME/tool
EOF
cat>>1<<EOF
export DM_HOME="/app/dm"
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$DM_HOME/bin"
export PATH=$PATH:$HOME/.local/bin:$HOME/bin:$DM_HOME/bin:$DM_HOME/tool
EOF
Q31 手工备份和手工恢复
Q33 如何安装odbc
Odbc 源:E:\达梦\讲义
[root@LylinV10DCA02 opt]# tar -zxvf unixODBC-2.3.0.tar.gz
cd unixODBC-2.3.0/
源码安装三部曲(配置、编译、安装)
[root@LylinV10DCA02 unixODBC-2.3.0]# ./configure
[root@LylinV10DCA02 unixODBC-2.3.0]# make
[root@LylinV10DCA02 unixODBC-2.3.0]# make install
配置环境查看
[root@LylinV10DCA02 unixODBC-2.3.0]# odbcinst -j
unixODBC 2.3.0
DRIVERS............: /usr/local/etc/odbcinst.ini
SYSTEM DATA SOURCES: /usr/local/etc/odbc.ini
FILE DATA SOURCES..: /usr/local/etc/ODBCDataSources
USER DATA SOURCES..: /root/.odbc.ini
SQLULEN Size.......: 8
SQLLEN Size........: 8
SQLSETPOSIROW Size.: 8
[root@LylinV10DCA02 unixODBC-2.3.0]# cd /usr/local/etc/
或者cd /etc
[root@LylinV10DCA02 etc]# ll
总用量 0
drwxr-xr-x 2 root root 6 10 月 20 17:09 ODBCDataSources
-rw-r--r-- 1 root root 0 10 月 20 17:09 odbc.ini
-rw-r--r-- 1 root root 0 10 月 20 17:09 odbcinst.ini
配置 ODBC 文件
[root@LylinV10DCA02 etc]# vim odbcinst.ini
[root@LylinV10DCA02 etc]# vim odbc.ini
[root@LylinV10DCA02 etc]# cat odbcinst.ini
[DM8 ODBC DRIVER]
Description = ODBC DRIVER FOR DM8
Driver = /bbb/DM8/dmdbms/drivers/odbc/libdodbc.so
[root@LylinV10DCA02 etc]# cat odbc.ini
[DM8]
Description = DM ODBC DSN
Driver = DM8 ODBC DRIVER
SERVER = localhost
UID = aaa
PWD = manager1234
TCP_PORT = 5236
登陆验证
su - dmdba
isql dm8 -v
Q34 重启数据库 主备库模式和单机模式
单机:
Dmdba用户
进入数据库软件的bin目录下
./DmS补充服务名 start/stop/restart/status
例如重启./DmServicedmdb restart(dmdb就是服务名)
主备:
进入数据库软件的bin目录下
./DmS补充服务名 start/stop/restart/status
重启顺序这是用root,用dmdba重启的话方法一样
关闭监视器:systemctl stop DmMonitorServiceconfirm
关闭主库守护进程:systemctl stop DmWatcherServicedmrw
关闭备库守护进程:systemctl stop DmWatcherServicedmrw
关闭主库实例:systemctl stop DmServicedmrw
关闭备库实例:systemctl stop DmServicedmrw
启动主库实例:systemctl start DmServicedmrw
启动备库实例:systemctl start DmServicedmrw
启动主库守护进程:systemctl start DmWatcherServicedmrw
启动备库守护进程:systemctl start DmWatcherServicedmrw
启动监视器:systemctl start DmMonitorServiceconfirm
t:5290
Server[localhost:5290]:mode is normal, state is open
login used time : 1.885(ms)
SQL> select * from v$instance;
LINEID NAME INSTANCE_NAME INSTANCE_NUMBER HOST_NAME
---------- ---- ------------- --------------- ---------
SVR_VERSION DB_VERSION START_TIME
-------------------------- ------------------- -------------------
STATUS$ MODE$ OGUID DSC_SEQNO DSC_ROLE
------- ------ ----------- ----------- --------
1 ATMC ATMC 1 samasdb04
DM Database Server x64 V8 DB Version: 0x7000c 2022-07-22 18:46:26
OPEN NORMAL 0 0 NULL
used time: 1.074(ms). Execute id is 11003500.
SQL>
Q35 2个实例,如果确定并且启动
Step 1: 检查有几个service
dmdba@localhost dmdbms]$ cd /dmdata/data/
[dmdba@localhost data]$ ls
DAMENG DMDB
[dmdba@localhost data]$ cd /opt/dmdbms/bin
[dmdba@localhost bin]$ ./DmService
DmServicedmdb DmServiceDMSunService
Step2 检查每个service 的状态
[dmdba@localhost bin]$ ./DmService
DmServicedmdb DmServiceDMSunService
[dmdba@localhost bin]$ ./DmServicedmdb status
DmServicedmdb is stopped
[dmdba@localhost bin]$ ./DmServiceDMSunService status
DmServiceDMSunService (pid 328837) is running.
Step 3 确定哪个service 没起来,就手工拉起来
[dmdba@localhost bin]$ ./DmServicedmdb start
Starting DmServicedmdb: [ OK ]
[dmdba@localhost bin]$ ps -ef |grep dms
dmdba 328837 1 0 11月11 ? 00:31:18 /opt/dmdbms/bin/dmserver path=/dmdata/data/DMDB/dm.ini -noconsole
dmdba 904424 1 3 16:03 pts/5 00:00:00 /opt/dmdbms/bin/dmserver path=/dmdata/data/DAMENG/dm.ini -noconsole
dmdba 912776 2320237 0 16:03 pts/5 00:00:00 grep dms
[dmdba@localhost bin]$ disql
Q36 如何在本机脱机备份和异机还原clone 一个环境
- 新建实例
Ps -ef |grep dms查看数据库初始化路径
切换到dmdba用户
dminit path=初始化实例路径 +参数设置(这个参数设置和原db要一样)
查看原db得参数设置:
select
*
from
(
SELECT
a.*,
page/1024
||'K' page_size,
SF_GET_EXTENT_SIZE()
||'K' EXTENT_SIZE ,
decode(SF_GET_CASE_SENSITIVE_FLAG(), 1, '是', 0, '否') CASE_SENSITIVE,
decode(SF_GET_UNICODE_FLAG(), 1, 'UTF8', 0, 'GB18030') UNICODE_FLAG,
decode(SF_GET_LENGTH_IN_CHAR(), 1, '是', 0, '否') LENGTH_IN_CHAR
FROM
V$DATABASE a
);
初始化例子如:
dminit path=/dmdata page_size=32 extent_size=32 charset=1 log_size=2048 db_name=dmdb instance_name=dmdb PORT_NUM=3308 |
修改端口就在参数设置那里加上PORT_NUM=3308
dminit 参数解释如下:
EXTENT_SIZE 数据文件使用的簇大小(16),可选值:16、32、64,单位:页
PAGE_SIZE 数据页大小(8),可选值:4、8、16、32,单位:K
charset=1 字符集(0),可选值:0[GB18030],1[UTF-8],2[EUC-KR]
CASE_SENSITIVE 大小敏感(Y),可选值:Y/N,1/0
LENGTH_IN_CHAR VARCHAR类型长度是否以字符为单位(N),可选值:Y/N,1/0
LOG_SIZE 日志文件大小(256),单位为:M,范围为:64M ~ 2G
- 备份还原
原db备份:
dmdba用户 启动dmrman工具
dmrman use_ap=2 |
或者(一个节点有多个库,关闭ap服务备份)
(修改dm.ini参数,来设置备份时不使用DMAP辅助进程)
SP_SET_PARA_VALUE(1,'BAK_USE_AP',2);
动态参数,即时生效。
然后停库
shutdown immediate
直接关停数据库服务,然后我们就可以备份了。
执行 backup 全库:
backup database '/dmdata/dmdb/dm.ini' backupset '/home/dmdba/bakfull'; |
(注意备份有时不报错,但是备份时候speed 始终为0,此时可以考虑换一个目录备份
)
新db还原恢复:
将备份的文件/home/dmdba/bakfull拷贝到备库服务器上。
在新db上
多实例的数据库
cd /bbb/dm/fibs/bin
使用 dmrman 工具还原备库,dmdba 用户执行:
dmrman |
进入dmrman工具交互界面
执行 restore:
restore database '/dmdata/dmdb/dm.ini' from backupset '/home/dmdba/bakfull'; |
完成后执行 recover:
recover database '/dmdata/dmdb/dm.ini' from backupset '/home/dmdba/bakfull'; |
最后执行 recover update db_magic。
recover database '/dmdata/dmdb/dm.ini' update db_magic; |
注册数据库实例服务(主备库都执行):
-t The service type(dmserver )
使用 root 用户,到数据库安装目录$DM_HOME 的 script/root 下。
./dm_service_installer.sh -t dmserver -p dmdbtt -dm_ini /dmdata/data/DM_RESTORE/dmdbtt/dm.ini
Q36.2 联机 备份和 恢复
1.数据库备份可以联机备份
在 disql 工具或图形化管理工具 SQL 编辑区中使用 BACKUP 语句可以备份整个数据库,执行以下命令:
BACKUP DATABASE FULL BACKUPSET '/opt/dmdbms/BAK/db_full_bak_01';
指定备份集路径为 /home/dm_bak/db_bak_3_01,执行以下命令:
BACKUP DATABASE BACKUPSET '/home/dm_bak/db_bak_3_01';
创建备份集,备份名设置为 WEEKLY_FULL_BAK,执行以下命令:
BACKUP DATABASE TO WEEKLY_FULL_BAK BACKUPSET '/home/dm_bak/db_bak_3_02';
创建备份为备份集添加描述信息为 完全备份,执行以下命令:
BACKUP DATABASE BACKUPSET '/home/dm_bak/db_bak_3_04' BACKUPINFO '完全备份';
BACKUP DATABASE BACKUPSET '/home/dm_bak/db_bak_3_07' PARALLEL 8;
基于 /home/dm_bak 全量备份的 增量备份,执行以下命令:
BACKUP DATABASE INCREMENT WITH BACKUPDIR '/home/dm_bak' BACKUPSET
2.数据库的还原必须脱机:
注意:
-》DM 的仅支持表的联机还原,
-》 DM的数据库、表空间和归档日志的还原必须通过脱机工具 DMRMAN 执行
脱机还原的步骤
参考上一节的dmrman还原
Q36 如何在测试环境使用nbu 恢复生产数据库
备份的策略为dm8_x86_amas
每周5备份全部文件,和每个月1日备份一次全部文件
如果要恢复,参考 nbu硬件管理 的 文件备份和恢复一章
Q37 数据库异常down机,如何查询达梦数据库日志
日志格式为dm_<service_name>_yyyymm.log
Cd $DM_HOME/log
cat dm_DMSERVER_202201.log|grep fail
[dmdba@localhost log]$ grep fail dm_DMSERVER_202201.log
2022-01-04 16:09:04.017 [WARNING] database P0002562454 T0000000000002562454 fail to load libproj.so, /opt/dmdbms/bin/libproj.so: cannot open shared object file: No such file or directory
2022-01-04 16:09:04.042 [WARNING] database P0002562454 T0000000000002562454 fail to load libxqilla.so, libnsl.so.1: cannot open shared object file: No such file or directory
问题1
1.latp实例查看日志并无down机记录,有数据库重启操作,已配置core生成路径,如有异常会产生core文件,届时分析core文件
2.fib实例查看日志有大量os无法分配内存报错,检查了内存相关参数无问题,机器内存充足,ulimit中内存参数无限制;建议分析nmon文件,是否在宕机时间左右存在资源瓶颈导致无法分配内存,已配置core生成路径,如有异常会产生core文件,届时分析core文件
Q38 测试环境如何通过静默方式安装数据库
Q38.1 从软件到实例的静默安装方式
-》首先查看建库申请资料,从软件到实例的安装方式
-》然后开始建库操作
Dm模板如下:
参数配置如下: 可以根据实际情况修改
0.<LANGUAGE>en</LANGUAGE>
1.<INSTALL_TYPE>
2.<INSTALL_PATH> /opt/dmdbms/
3.<PATH>/dmdata/data
4.<DB_NAME>dmdast
5.<INSTANCE_NAME>dmdast
6.<PORT_NUM>5236
7.<CTL_PATH>/dmdata/data/dmdast/dm.ctl
8.<LOG_PATH>/dmdata/data/dmdast/DAMENG01.log
/dmdata/data/dmdast/DAMENG02.log
/dmdata/data/dmdast/DAMENG03.log
9.<EXTENT_SIZE>16
10.<PAGE_SIZE>16
11.<LOG_SIZE>2048
12.<CHARSET>1 默认值为 0。0 代表 GB18030,1 代表 UTF-8
13.<LENGTH_IN_CHAR>0
14.<CASE_SENSITIVE>Y
SID: |
das |
|
数据库产品 |
达梦8 |
|
字符集 CHARSET 字符集选项 , 默认值为 0。0 代表 GB18030,1 代表 UTF-8, |
UTF8 |
charset=1 1, 'UTF8', 0, 'GB18030' 默认0: GB18030 |
簇大小EXTENT_SIZE
|
16 |
extent_size=16 默认16 |
页大小 PAGE_SIZE
|
16 |
page_size=16 默认8 |
端口号 |
5236 |
PORT_NUM=5236 |
VARCHAR类型以字符为单位 (LENGTH_IN_CHAR) (设置为 1 时,所有 VARCHAR 类型对象的长度以字符为单位,否则设置0,以字节为单位) |
否
|
LENGTH_IN_CHAR=0 1, '是', 0, '否' 默认0 |
大小写是否敏感 CASE_SENSITIVE 默认值为 Y(大小写敏感) |
否
|
case_sensitive=0 1, '是', 0, '否' 默认1 |
dm.ini文件参数 |
COMPATIBLE_MODE=2 |
初始化不需要设置这个参数,默认为0,安装完成后在线修改 |
##########解释如下
path=/dmdata/data/DM_RESTORE
page_size=16
extent_size=16
charset=1 默认值为 0。0 代表 GB18030,1 代表 UTF-8
log_size=2048
db_name=dmdbtt
LENGTH_IN_CHAR=y
CASE_SENSITIVE=y
instance_name=dmdbtt
PORT_NUM=5239
另外
1.注意如果是测试环境 建议在/ 根目录 建立200G 目录
(10.241.133.82/10.241.133.78)
2.建议软件放在 /opt/dmdbms/
3.数据库文件放在 /dmdata/data
脚本如下
Q38.2 测试环境(虚拟机飞腾arm)已经安装软件的情况下
-》安装DB软件的步骤
-》
-------------.如果在软件已经安装好的基础上,只需要2步,初始化实例,然后注册服务
3.3使用 dminit 工具初始化实例
执行以下命令
dminit path=/dmdata page_size=32 extent_size=32 charset=1 log_size=2048 db_name=dmdb instance_name=dmdb
注意:
初始化参数中除了 path 参数必须指定,其它参数都有默认值,如果需求与默认值不同,初始化的时候请指定需要的值。因为部分参数初始化后是无法修改的例如:page_size(页大小),charset(字符集),case_sensitive(大小写敏感)等。更多参数./dminit help 查看,是否无法修改的参数可以查询 v$dm_ini 视图,para_type=’READ ONLY’ 表示无法修改。
----------------------------
3.4 注册服务并启动实例
以系统服务方式启动实例,DM 提供脚本将数据库实例注册为操作系统服务。
root 用户下切换到 /home/dmdba/dmdbms/script/root/:
cd /bbb/dmdbms/script/root/
执行以下命令,执行脚本注册服务:
./dm_service_installer.sh -t dmserver -p dmdb -dm_ini /dmdata/dmdb/dm.ini
检查服务是否启动
ls -ltr /bbb/dmdbms/bin/DmService*
ls -ltr /bbb/dmdbms/bin/DmServicedmdb01*
执行以下命令,以服务方式启动实例:
systemctl start DmServicedmdb
3.5 登录数据库
dmdba用户下执行以下命令:
./disql aaa/aaa@localhost:5236
说明:密码使用单引号+双引号包围起来
3.6 修改ssl参数
disql1<<!
sp_set_para_value(2,'ENABLE_ENCRYPT',0);
exit;
!
3.7.
create tablespace "FIBS_DATA" datafile '/bbb/dmdata/dmdb/FIBS_DATA_TS.dbf' size 175 autoextend on maxsize 33554431 CACHE = NORMAL;
create user FIBSDATA identified by "fibs@1234" limit failed_login_attemps 3,password_lock_time 1, password_grace_time 10 default tablespace "FIBS_DATA" default index tablespace "FIBS_DATA";
grant "RESOURCE",”VTI”,”RESOURCE” to FIBSDATA;
#如果有作业,需要给作业job 权限
#sp_init_job_sys(1);
#GRANT ADMIN JOB TO NORMAL_USER;
create user FIBSOPR identified by "fibsopr@1234" limit failed_login_attemps 3,password_lock_time 1, password_grace_time 10 default tablespace "FIBS_DATA" default index tablespace "FIBS_DATA";
grant "RESOURCE",”VTI”,”RESOURCE” to FIBSOPR;
create user FIBSETCL identified by "fibsetl@1234" limit failed_login_attemps 3,password_lock_time 1, password_grace_time 10 default tablespace "FIBS_DATA" default index tablespace "FIBS_DATA";
grant "RESOURCE",”VTI”,”RESOURCE” to FIBSETC;
以下附件是 如何重装实例的操作,原因是大小写不敏感需要修改成大小写敏感
Q38.3 测试环境(海光arm一体机)手工安装软件和数据库
SID: |
das |
|
数据库产品 |
达梦8 |
|
字符集 CHARSET 字符集选项 , 默认值为 0。0 代表 GB18030,1 代表 UTF-8, |
UTF8 |
charset=1 1, 'UTF8', 0, 'GB18030' 默认0: GB18030 |
簇大小EXTENT_SIZE
|
16 |
extent_size=16 默认16 |
页大小 PAGE_SIZE
|
16 |
page_size=16 默认8 |
端口号 |
5236 |
PORT_NUM=5236 |
VARCHAR类型以字符为单位 (LENGTH_IN_CHAR) (设置为 1 时,所有 VARCHAR 类型对象的长度以字符为单位,否则设置0,以字节为单位) |
否
|
LENGTH_IN_CHAR=0 1, '是', 0, '否' 默认0 |
大小写是否敏感 CASE_SENSITIVE 默认值为 Y(大小写敏感) |
否
|
case_sensitive=0 1, '是', 0, '否' 默认1 |
dm.ini文件参数 |
COMPATIBLE_MODE=2 |
初始化不需要设置这个参数,默认为0,安装完成后在线修改 |
Q38.4 从软件的静默安装方式
适合生产arm单独安装clinet
Q39 启动报错comm_create_lsnr_sockets_low failed to .
报错信息如下:
comm_create_lsnr_sockets_low failed to create socket or listen port:3306, errno:97.
[root@yfy-2749 root]# netstat -an|grep 3306
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN
查看方法:
查看占用端口进程的PID:
lsof -i:3306
在进行处理
Q40 测试环境lisence 过期,如何替换新lisence
准备工作1.
vi .bash_profile
echo " there is two dm db \n
db1 DMDB port 5238 , disql1 \n
db2 DAMENG port 5236, disql2"
~
准备工作2.
vi ~/.bashrc
//在文件中添加:
alias disql1='/opt/dmdbms/bin/disql aaa/aaa@10.241.28.221:5238'
alias disql2='/opt/dmdbms/bin/disql aaa/aaa@10.241.28.221:5236'
开始做3.
step1:(找达梦销售 申请新的飞腾cpu的麒麟操作系统10的key)
生产环境备份旧的库的key
将key改名为dm.key,拷贝至数据库安装目录的bin目录下,
Dm.key 授权dmdba 权限
step2:
然后disql执行sp_load_lic_info();,
最后再select EXPIRED_DATE,PROJECT_NAME,CPU_TYPE from v$license;
脚本如下:
disql1<<!
select EXPIRED_DATE,PROJECT_NAME,CPU_TYPE from v\$license;
sp_load_lic_info();
select EXPIRED_DATE,PROJECT_NAME,CPU_TYPE from v\$license;
!
disql2<<!
select EXPIRED_DATE,PROJECT_NAME,CPU_TYPE from v\$license;
sp_load_lic_info();
select EXPIRED_DATE,PROJECT_NAME,CPU_TYPE from v\$license;
!
Ps:注意操作系统58.20
运行shell 会提示报错source /home/dmdba/.bash_profile ,
- sh: source: not found,这和操作系统有关,原因未明.
报告这个错误,可以手工执行,不要放在shell 脚本执行
Q41 移动表空间数据文件
例如:移动main表空间
offline main表空间
创建新目录data 给权限
移动数据文件后online main 表空间
可以看到原表空间在/dmdata/dmdb下面,现在移动到了/data下面
Q41.2 移动数据库从A位置到B位置
A主机A位置
/dmdata/data/DM_RESTORE/restore
B主机的B位置
/dmdata/amas/amas
方法如下:
1修改ini 文件的路径
/dmdata/data/DM_RESTORE/restore/dm_5235.ini
export socket="/dmdata/latpuat/latpuat"
perl -p -i -e "s#/dmdata/latpdev1/latpdev1#$socket#g" dm.ini
3创建新的路径:
mkdir -p /dmdata/amas/amas/bak
mkdir -p /dmdata/amas/amas
4拷贝旧路径的文件到新路径
cp -rp /dmdata/data/DM_RESTORE/restore/* /dmdata/amas/amas
5.转换原控制文件
转存dm.ctl控制文件信息在dmctl.txt文件中
cd /bbb/dm/latpuat/bin
./dmctlcvt TYPE=1 SRC=/dmdata/latpuat/latpuat/dm.ctl DEST=/tmp/dmctl.txt
复制
6.修改dmctl.txt路径参数
查询需要修改的内容:
[dmdba@node3 DAMENG]$ cat dmctl.txt |grep /dmdata/
fil_path=/dmdata/DAMENG/SYSTEM.DBF
fil_path=/dmdata/DAMENG/ROLL.DBF
fil_path=/dmdata/OADATA/GCLOUD_EXSC_IDX01.dbf
htspath=/dmdata/DAMENG/HMAIN
复制
修改/dmdata为/data
export socket="/dmdata/latpuat/latpuat"
perl -p -i -e "s#/dmdata/latpdev1/latpdev1#$socket#g" /tmp/dmctl.txt
7.更新控制文件
把原来的 dm.ctl 文件备份为 dm.ctl.bak ,使用以下命令将dmctl.txt转换新的dmctl.txt为新的 dm.ctl控制文件
cd /bbb/dm/latpuat/bin
mv /dmdata/latpuat/latpuat/dm.ctl /dmdata/latpuat/latpuat/dm.ctl.bak
./dmctlcvt TYPE=2 SRC=/tmp/dmctl.txt DEST=/dmdata/latpuat/latpuat/dm.ctl
复制
9.
./DmServicelatpuat start
参考
https://eco.dameng.com/community/training/214a75d5afbf9b966d5a99471f6a59cc
Q42 DEM 修改历史数据保存时间
默认是永久保存,可以调整到30天
Q43 达梦数据库常用的系统表和视图
https://www.cndba.cn/cndba/guft/article/4427
在使用达梦数据库或运维时,可能会查看数据库中有哪些表、视图,也可能会查看表空间物理文件的名称和大小,再或者查看数据库的归档方式,这时就可以使用系统表或视图,下面列举一下常用的系统表与视图,然后举几个小例子。
系统表
- SYSOBJECTS
- 可查询所有对象
- SYSCOLUMNS
- 可查询表的所有列的信息
- dba_tables
- 可查询表信息(包括系统表)
- dba_users
- 可查询系统所有用户
- dba_data_files
- 可查询数据库文件信息
- dba_segments
- 可查询模式
- all_tables
- 可查询所有用户的表
- user_tables
- 可查询当前用户所拥有的所有表
- user_tablespaces
- 可查询表空间
- 系统视图
- v$database
- 可查询数据库信息
- v$tablespace
- 可查询表空间信息
- v$datafile
- 可查询数据文件信息
- v$dm_arch_ini
- 可查询归档信息
- v$dm_ini
- 可查询参数
- v$instance
- 可查询数据库实例信息
- v$rlogfile
- 可查询日志文件信息
- v$systeminfo
- 可查询操作系统CPU和内存的信息
- v$version
- 可查询数据库版本
- v$wait_class
- 可查询等待(wait)情况
- 相关例子
- 查看表空间的名称和大小
- select name, total_size * sf_get_page_size() / 1024 / 1024 || 'M'
- from v$tablespace;
- 查看表空间物理文件的名称和大小
- select t.name tablespace_name, t.id file_id, d.path file_name,
- d.total_size * sf_get_page_size() / 1024 / 1024 || 'M' total_space
- from v$tablespace t, v$datafile d
- where t.id = d.group_id;
- 查看表空间使用情况
- select t1.NAME tablespace_name,
- t2.FREE_SIZE * SF_GET_PAGE_SIZE() / 1024 / 1024 || 'M' free_space,
- t2.TOTAL_SIZE * SF_GET_PAGE_SIZE() / 1024 / 1024 || 'M' total_space,
- t2.FREE_SIZE * 100 / t2.total_size" % FREE"
- from V$TABLESPACE t1, V$DATAFILE t2 where t1.ID = t2.GROUP_ID;
- 查看控制文件
- select para_value name from v$dm_ini where para_name='CTL_PATH';
- 查看日志文件大小
- select PATH, RLOG_SIZE / 1024 / 1024 || 'M' from v$rlogfile;
- 查看数据库对象
- select t2.name owner, t1.subtype$ object_type,
- t1.valid status, count(1) count#
- from sysobjects t1, sysobjects t2
- where t1.schid = t2.id and t1.schid != 0
- group by t2.name, t1.subtype$, t1.valid;
- 查看数据库创建日期和归档方式
- select create_time,
- case when arch_mode = 'n' then '非归档模式' else '归档模式' end arch
- from v$database;
- 查看object分类数量
- select subtype$ object_type, count(1) quantity from sysobjects where subtype$ <>'' group by subtype$
- union
- select 'column', count(1) from syscolumns;
Q44 达梦原厂 达梦常用sql
Q45 达梦原厂 达梦数据库主要监测指标
Q46 达梦原厂 达梦数据库DBA达梦常用
Q47 达梦原厂 DMAP服务监听端口修改
这个目的主要是为了使用一台主机装了2个用户,每个用户各运行了一个实例,所以需要启动2个dmap服务而配置,单节点多实例备份
方案1 :
方案2. 第二个db临时禁用dmap 服务
1:注意结尾不要有特殊字符
seLECT * FROM V$PARAMETER where NAME='BAK_USE_AP'
2.修改dm.ini参数,来设置备份时不使用DMAP辅助进程
SQL会话中输入:
SP_SET_PARA_VALUE(1,'BAK_USE_AP',2);
动态参数,即时生效。
Q42 DEM 安装dm server
Q42 DEM 修改历史数据保存时间
默认是永久保存,可以调整到30天
Q48 DEM监控参数说明
Q49 DM管理工具如何保存密码免密
选择红色的提示 注册该连接才可以,免密登陆
连接名字修改一下,不要设置默认的连接名字
Q50 DEM如何新加主机和数据库
参考Q52.1
Q51 DEM如何新加自定义sql
Q51.1 如何用sql 查询dem 的报警信息
Dem server ip/port
create user dbmonopr identified by dbmonopr_dem;
grant dba to dbmonopr;
Dem server user/password/ip/port
disql dbmonopr/dbmonopr_dem@10.241.28.223:5238
查看告警信息
select A.ALERT_NAME,A.LEVEL,A.MESSAGE,C.LOGIN_NAME FROM DEM.DMA_ALERT_HIS A,DEM.DMA_ALERT_HIS_NOTIFY B,DEM.ADMIN_USER C WHERE C.ID=B.USER_ID AND A.ID=B.ALERT_HIS_ID;
Q51.1 DEM达梦数据库巡检
具体请参考对应案例
目前考虑使用dem 巡检,包括基本和自定义的项目,但是每个数据库都需要手工添加自定义项目。
巡检的具体界面位置 如下:
Q52 如何在db安装DEM agent
Step 1:先改agent.ini文件里面的dem的地址
cd $DM_HOME/tool/dmagent
vi agent.ini
调整这个参数center_url
Step 2:
在数据库安装目录的tool/dmagent下面
cd $DM_HOME/tool/dmagent
./start.sh -d agent.ini
Starting dmagent...
.....
The dmagent(pid: 2259470) started successfully.
Step 3:
step 3
https://eco.dameng.com/docs/zh-cn/ops/dem-monitor-cluster.html
查看agent 进程信息
ps -ef|grep agent.ini
step 4
Log 目录只会打印报错的日志,正常启动的日志不会更新
step 5
Agent 配置成功,与服务器连接成功后,新的主机能被自动发现。在资源监控-》主机
能自动发现该主机,
Step6.
能自动发现该主机后,可以在数据库界面,手工添加数据库资源
如果不能发现,有可能server 和agent端的时间不一致,测试环境使用
Ntpdate 同步
ntpdate 10.241.67.8
Step 7
在系统配置-》prometheus_metrice_nodes 加入新监控的主机
然后点击保存,就可以在http://10.241.28.223:8080/dem/metrics 看到信息了
8 dem观察数据库tps
-》点击智能运维-》资源监控
-》选中某个数据库,然后点拖动到最右边,选择操作的下拉框
-》点击下拉框后, 选择 信息大盘 就可以观察 tps 了
Q52.1 如何在克隆安装一个DEM agent
如果在dem 服务器端监控界面出现 agent版本不一致,该如何做
说明如下;
10.241.28.221 为报错的agent版本
agent新目录:/home/dmdba/dmdbms/tool/dmagent
10.241.28.223 为正常的agent版本
agent目录:/home/dmdba/dmdbms/tool/dmagent
步骤如下:
- in 10.241.28.223
cd /home/dmdba/dmdbms/tool/dmagent
scp -r * root@10.241.28.221:/opt/dmdbms/tool/dmagent0426/
- in 10.241.28.221
切换到tool目录下的dmagent目录下;
Cd /opt/dmdbms/tool/dmagent0426
nohup ./start.sh agent.ini &
3.停下agent
查看agent 进程信息
ps -ef|grep agent.ini
Kill -9 pid
建议将dem agent 上传到yum服务器上,目前生产已经这么做
汕尾的agent 在
Q52.2 如何在克隆安装一个达梦client
以下文档基于arm和海光,用户测试环境安装达梦client
Q64 dm达梦数据库慢sql 检查
V$SYSTEM_LONG_EXEC_SQLS中,sql内容相同的情况下,执行次数N_RUNS会累加,不会新增记录,EXEC_TIME和FINISH_TIME记录的为最慢的那次执行时间。
select
sess_id, --会话id,关联v$sessions
sql_id, --语句id,关联v$sqltext
sql_text, --sql文本
exec_time/1000, --,每次执行时间(秒)
finish_time, --执行结束时间
n_runs, --执行次数
seqno, --编号
trx_id --事务ID
from v$system_long_exec_sqls order by exec_time desc;
详细信息:
Q65 dm awr报告
Awr 有bug,可能只能偶尔开启,官方介绍:
Q66 生产库如何维护,启动停止方法 一主一备
文档包括主备集群启动 和 单机启动2种方法
-》分2个时间点做,第一阶段 先做备库的节点(7/29 )。观察一个礼拜后,再做主库节点 ( 8/5 )
-》理论上主机重启dmserver 会自动带起来
Q66.1 启动停止方法 一主一备,方法2
检查主备实例,有的时候会有报错。现在显示status 报错DmServiceDB5 dead but pid file exists。
这个是时候不能使用DmWatcherServiceDB5 stop。
原因如下:
现在数据库的服务进程dmserver有,但是服务显示dead。
说明dmserver不是以服务的方式启动,而是由dmwatcher自动拉起的。
这个时候,可以在监视器dmmonitor 里执行stop group 组名, 来停掉dmserver的实例进程,
再手动停dmwatcher的服务:DmWatcherServiceDB5 stop。
解决办法
- Dbmonitor 手工停 group_name,同时停下主备实例
- 更多dbmonitor 命令可以使用help 验证下
(更多如果只想停止单个实例
还可以直接连一下备库的实例(备库ip+端口),执行shutdown immediate,只关停单实例。。)
- 2边实例都停了,就剩下守护进程了,可以考虑手工停了dmwatcher,DmWatcherServiceDB5 stop。
手工停下dmwatcher 后,dbmonitor 就会报错守护进程有问题,这个是正常的
[monitor] 2022-08-02 09:20:35: 接收守护进程(DB5_STB0)消息超时
WTIME WSTATUS INST_OK INAME ISTATUS IMODE RSTAT N_OPEN FLSN CLSN
2022-08-02 09:19:34 ERROR ERROR DB5_STB0 SHUTDOWN STANDBY VALID 11 227368936 227368936
- 如果都停止完了,需要手工将实例和dmwaterch拉起来.,步骤如下:
主库:先后执行
-》 DmServiceDB_name start mount
或
DmServiceDB_name start
-》DmWatcherServiceDB5 start
备库:先后执行
-》 DmServiceDB_name start mount
或
DmServiceDB_name start
-》 DmWatcherServiceDB5 start
实例服务dmserver启动用mount状态起
Q66.2 主备库 启动start mount和start 的区别
主库:先后执行
DmServiceDB_name start mount
主库:先后执行
DmServiceDB_name start
的区别?
回答:这个是先用配置状态启动,由守护进程检查集群状态,再open数据库,安全些,所以理论上这个更好,但是大体也没差别
一般认为start mount 是数据库守护进程自带恢复的数据库,自带带起的数据库
Start 模式是通过服务进程拉起来的数据库
Q66.2 主备库 非确认监视器状态各个字段解释
https://eco.dameng.com/document/dm/zh-cn/pm/data-watch-monitor
Q67 dm主备集群搭建实验手册v1 (一主一备一监视器)
生产架构如下
57.12.44.11/12 DB arm 一主一备 (主库还配置了非确认监视器,用于前台查看集群状态)
57.12.43.12 DB_MONITOR arm ps -ef|grep dmmonitor 一确认监控器(用于自动切换,后台以服务方式启动,无法查看集群状态,需要登陆非确认监视器才可以查看集群状态)
查看集群状态方法:
57.12.44.11
Q68 java jre连接达梦比较慢
可以考虑用原生的jar包
Q70 达梦忘记管理员aaa密码如何做(失效,无法用)
1、达梦数据库版本
SQL> select * from v$version; 行号
BANNER ---------- ------------------------- 1
DM Database Server 64 V8 2 DB Version: 0x7000c
2、确定ENABLE_LOCAL_OSAUTH参数类型
SQL> select para_name,para_type,para_value from v$dm_ini where para_name like ‘%OSAUTH’;
PARA_NAME PARA_TYPE PARA_VALUE
1 ENABLE_LOCAL_OSAUTH READ ONLY 0
注: SESSION: 会话级, 动态参数, 即改即生效, 只针对当前会话有效。
SYS: 系统级, 动态参数, 即改即生效, 全局的参数。
IN FILE: 静态参数, 需要重启数据库实例生效。
READ ONLY: 只读参数, 需要通过文本编辑器(vi/vim) 修改。
经查看$DM_HOME/data/DMSERVER/dm_ini文件,发现并没有吃参数,经官方文档说明:此文档为隐含参数,
添加此参数到dm_ini文件内 ENABLE_LOCAL_OSAUTH=1
#PORT_NUM =5236
4、重启达梦数据库实例。 $DmServiceDMSERVER restart
./disql /@127.0.0.1:5248 as aaa
6、验证当前数据库的用户; SQL> select user;
行号 USER()
1 aaa
已用时间: 5.237(毫秒). 执行号:300.
7、修改aaa的密码;
8、 SQL> alter user “aaa” identified by “dameng123”;
操作已执行 已用时间: 202.969(毫秒). 执行号:403.
SQL>
9、验证修改的密码 [dmdba@dm8 DMSERVER]$ disql aaa/dameng123
服务器[LOCALHOST:5236]:处于普通打开状态 登录使用时间 : 4.794(ms) disql V8
到此说明达梦数据库的密码修改成功。
注意:这种方法经过测试,ENABLE_LOCAL_OSAUTH 参数不能手工添加dm.ini 文件,无法生效,只能通过sql语法alter system set 'ENABLE_LOCAL_OSAUTH' = 1 spfile; 设置,所以
Q70 查看表空间ddl
达梦数据库使用SQL获取对象创建DDL语句
众所周知,使用达梦数据库管理工具,可以通过右键点击对象,查看“属性”,可以查看到达梦数据库对象创建的DDL语句,但有些环境对图形化不支持。
MySQL获取数据库表对象创建语句可以使用 show create tables 表名;
Oracle 获取数据库表对象创建语句可以使用select dbms_metadata.get_ddl('TABLE','USER') from dual;
达梦这里使用方式与Oracle基本一致,使用该命令可以查询,查询结果为长文本类型。
格式:
SELECT DBMS_METADATA.GET_DDL(‘对象类型’,‘对象名称’);
SELECT DBMS_METADATA.GET_DDL(‘对象类型’,‘对象名称’) FROM DUAL;
SELECT DBMS_METADATA.GET_DDL(‘对象类型’,‘对象名称’,‘模式名’) FROM DUAL;
例子:
查看用户
SQL> SELECT DBMS_METADATA.GET_DDL('USER','DAS_CORE_APP_DEV') FROM DUAL;
LINEID DBMS_METADATA.GET_DDL('USER','DAS_CORE_APP_DEV')
---------- ------------------------------------------------------------------------------------------------
1 CREATE USER "DAS_CORE_APP_DEV" IDENTIFIED BY <PASSWORD> HASH WITH SHA512 PASSWORD_POLICY 2 ENCRYPT BY <PASSWORD>
limit failed_login_attemps 3, password_grace_time 10 DEFAULT TABLESPACE "DASCORE_DEV" DEFAULT INDEX TABLESPACE "DASCORE_DEV"
查看表空间
select TABLESPACE_NAME from dba_tablespaces;
SELECT DBMS_METADATA.GET_DDL('TABLESPACE','DASDEV') FROM DUAL;
查看表
SQL > SELECT DBMS_METADATA.GET_DDL('TABLE','USER') FROM DUAL;
1
或
SQL > SELECT DBMS_METADATA.GET_DDL('TABLE','USER','aaa') FROM DUAL;
Q72 sql 优化基本步骤
Q73 达梦消耗内存过高
关于数据库buffer调整:
buffer:内存足够的情况下,可根据数据文件的大小调整,内存不充足的情况下,可调整为可用物理内存的 60%~80%。
在机器内存充足的情况下,根据附件参数脚本调整即可,一般调整为不超过总内存的40%。
测试环境,该脚本在10.241.21.200/dm
Lscpu ,free -m
如果该主机上面跑了5个达梦数据库,需要把cpu和内存分成5份
v_mem_mb int:= 32000; --根据机器实际内存调整此参数
v_cpus int:= 16; --根据机器CPU核数调整此参数
Disql aaa/password@localhost:port
Start autop*.sql
Q74 删除某个用户下的表和存储过程
select 'drop table if exists DMHR.'||name||' cascade;' from sysobjects where schid =(select id from sysobjects where name='DMHR' AND TYPE$='SCH') and subtype$='UTAB';
--删除DMHR模式下所有表
select 'drop view if exists DMHR.'||name||' ;' from sysobjects where schid =(select id from sysobjects where name='DMHR' AND TYPE$='SCH') and subtype$='VIEW';
--删除DMHR模式下所有视图
select 'drop procedure DMHR.'||name||' ;' from sysobjects where schid =(select id from sysobjects where name='DMHR' AND TYPE$='SCH') and subtype$='PROC';
--删除DMHR模式下所有存储过程
级联删除OA模式下所有的表
set heading off
set feedback off
set linesize 150
set lineshow off
set timing off
set newpage none
select
'DROP TABLE OA.'
|| a .table_name
||' cascade;'
from
dba_tables a
where
owner='OA';
–删除OA模式下所有的视图
select
'DROP VIEW OA.'
|| a.view_name
||';'
from
dba_views a
where
owner='OA';
–删除OA模式下所有的序列
select
'DROP SEQUENCE OA."'
||a.sequence_name
||'";'
from
SYS.DBA_SEQUENCES a
where
A.SEQUENCE_owner='OA';
–删除OA模式下所有的存储过程
select
'DROP PROCEDURE OA."'
||NAME
||'";'
from
sysobjects
where
SYSOBJECTS."SUBTYPE$"='PROC'
AND SCHID in
(
select id from sysobjects where type$='SCH' AND NAME='OA'
);
–删除OA模式下所有的触发器
select
'DROP TRIGGER OA."'
||a.trigger_name
||'";'
from
dba_triggers a
WHERE
owner='OA';
–删除OA模式下所有包
select
'DROP PACKAGE OA."'
|| name
||'";'
from
sysobjects
where
SYSOBJECTS."SUBTYPE$"='PKG'
AND SCHID IN
(
SELECT ID FROM sysobjects where type$='SCH' AND NAME='OA'
);
————————————————
版权声明:本文为CSDN博主「yuDazzle」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/yudazzle/article/details/121945358
Q74.1 删除用户提示用户有锁
select 'sp_close_session('||sess_id||');' from v$sessions where USER_NAME ='用户名' AND sess_id not in(select dbms_session.unique_session_id from dual);
--关闭除当前会话外,所有使用‘用户名’连接的会话
sp_close_session(sess_id)关闭阻塞会话
Q74.2 锁表的处理方法
1找到session_id
select sess_id,sql_text,state,trx_id from v$sessions where trx_id
in (SELECT trx_id from v$lock where table_id in
(select ID from sysobjects where name='B039_CHINAMUTUALFUNDNAV' and subtype$='UTAB'))
2.拼接成kill session 的会话
select 'SP_CLOSE_SESSION(' ||s.sess_id||');' from v$sessions s where s.trx_id
in (SELECT trx_id from v$lock where table_id in
(select ID from sysobjects where name='B039_CHINAMUTUALFUNDNAV' and subtype$='UTAB'))
Q74.3 达梦数据库 错误号: -2508 登录失败次数超过限制
Q74.4 达梦 -8310备份集子版本不一致
达梦对rman 和导入导出要求都严格,小版本不一致都不行
所以需要做好版本管理,目标恢复环境可以新版本但是不能旧版本
登陆源库和目标库,检查如下
Select id_code;
或者
./disql -id
DM Database 64 V8 03134283914-20220927-170566-20009
做好版本管理
如下是正常的可以备份恢复的机器配置
正常的
prod:
select id_code;
LINEID ID_CODE
---------- ---------------------------------------
1 1-2-18-21.06.17-141777-10013-SEC Pack3
恢复环境新
SQL> select id_code;
LINEID ID_CODE
---------- ---------------------------------
1 1-2-70-21.09.08-147080-10028-SEC
如下是有问题的备份和恢复的机器
Prod:
SQL> select id_code;
LINEID id_code
---------- -----------------------------------------
1 --03134283914-20220927-170566-20009 Pack3
used time: 0.819(ms). Execute id is 38996300.
恢复环境uat
SQL> select id_code;
行号 ID_CODE
---------- -----------------------------------
1 --03134283890-20220304-158322-10045
已用时间: 16.283(毫秒). 执行号:0.
如何升级旧版本的数据库,请见Q74.5
Q74.5 如何升级达梦软件的版本
step1
[root@dmdw02 opt]# mount -o loop dm8_20220928_x86_kylin10_64_ent_8.1.2.138_pack3.iso /bbb/update/dmiso/
mount: /bbb/update/dmiso: WARNING: source write-protected, mounted read-only.
[root@dmdw02 opt]#
[root@dmdw02 opt]#
[root@dmdw02 opt]# cd /bbb/update/dmiso/
step2
[root@dmdw02 dmiso]# sh DMInstall.bin -i
请选择安装语言(C/c:中文 E/e:英文) [C/c]:c
解压安装程序..........
本系统已存在其他版本达梦数据库,请您卸载。如继续安装,可能影响其他版本达梦数据库正常使用。
是否继续? (Y/y:是 N/n:否) [Y/y]:y
欢迎使用达梦数据库安装程序
是否输入Key文件路径? (Y/y:是 N/n:否) [Y/y]:n
是否设置时区? (Y/y:是 N/n:否) [Y/y]:
设置时区:
[ 1]: GTM-12=日界线西
[ 2]: GTM-11=萨摩亚群岛
[ 3]: GTM-10=夏威夷
[ 4]: GTM-09=阿拉斯加
[ 5]: GTM-08=太平洋时间(美国和加拿大)
[ 6]: GTM-07=亚利桑那
[ 7]: GTM-06=中部时间(美国和加拿大)
[ 8]: GTM-05=东部部时间(美国和加拿大)
[ 9]: GTM-04=大西洋时间(美国和加拿大)
[10]: GTM-03=巴西利亚
[11]: GTM-02=中大西洋
[12]: GTM-01=亚速尔群岛
[13]: GTM=格林威治标准时间
[14]: GTM+01=萨拉热窝
[15]: GTM+02=开罗
[16]: GTM+03=莫斯科
[17]: GTM+04=阿布扎比
[18]: GTM+05=伊斯兰堡
[19]: GTM+06=达卡
[20]: GTM+07=曼谷,河内
[21]: GTM+08=中国标准时间
[22]: GTM+09=汉城
[23]: GTM+10=关岛
[24]: GTM+11=所罗门群岛
[25]: GTM+12=斐济
[26]: GTM+13=努库阿勒法
[27]: GTM+14=基里巴斯
请选择设置时区 [21]:
安装类型:
1 典型安装
2 服务器
3 客户端
4 自定义
请选择安装类型的数字序号 [1 典型安装]:
所需空间: 1787M
请选择安装目录 [/opt/dmdbms]:/bbb/update/newapp
可用空间: 548G
是否确认安装路径(/bbb/update/newapp)? (Y/y:是 N/n:否) [Y/y]:y
安装前小结
安装位置: /bbb/update/newapp
所需空间: 1787M
可用空间: 548G
版本信息:
有效日期:
安装类型: 典型安装
是否确认安装? (Y/y:是 N/n:否):y
配置文件/etc/dm_svc.conf已存在,是否进行替换? (Y/y,N/n) [Y/y]:n
2022-11-30 15:50:40
[INFO] 安装达梦数据库...
2022-11-30 15:50:40
[INFO] 安装 基础 模块...
2022-11-30 15:50:42
[INFO] 安装 服务器 模块...
2022-11-30 15:50:42
[INFO] 安装 客户端 模块...
2022-11-30 15:50:43
[INFO] 安装 驱动 模块...
2022-11-30 15:50:43
[INFO] 安装 手册 模块...
2022-11-30 15:50:43
[INFO] 安装 服务 模块...
2022-11-30 15:50:45
[INFO] 移动日志文件。
2022-11-30 15:50:45
[INFO] 更改安装目录权限完成。
2022-11-30 15:50:45
[INFO] 正在启动DmAPService服务...
2022-11-30 15:50:55
[INFO] 启动DmAPService服务成功。
2022-11-30 15:50:55
[INFO] 安装达梦数据库完成。
安装结束
step3
[root@dmdw02 dmiso]# cd /bbb/dm/fibs/
[root@dmdw02 fibs]# ls
bin desktop drivers jar license_en.txt log script uninstall web
bin2 doc include jdk license_zh.txt samples tool uninstall.sh
[root@dmdw02 fibs]#
[root@dmdw02 fibs]#
[root@dmdw02 fibs]# mv bin bin.bak
[root@dmdw02 fibs]#
[root@dmdw02 fibs]#
[root@dmdw02 fibs]# cp -r /bbb/
dm/ update/
[root@dmdw02 fibs]# cp -r /bbb/update/newapp/bin ./
[root@dmdw02 fibs]# ll
总用量 52
drwxr-xr-x 10 root root 8192 11月 30 15:52 bin
drwxr-xr-x 2 dmdba dinstall 30 6月 6 16:38 bin2
drwxr-xr-x 10 dmdba dinstall 8192 8月 2 11:40 bin.bak
drwxr-xr-x 3 dmdba dinstall 19 6月 6 16:38 desktop
drwxr-xr-x 2 dmdba dinstall 4096 6月 6 16:38 doc
drwxr-xr-x 12 dmdba dinstall 131 6月 6 16:38 drivers
drwxr-xr-x 2 dmdba dinstall 4096 6月 6 16:38 include
drwxr-xr-x 2 dmdba dinstall 94 6月 6 16:38 jar
drwxr-xr-x 7 dmdba dinstall 161 6月 6 16:38 jdk
-rwxr-xr-x 1 dmdba dinstall 1071 6月 6 16:38 license_en.txt
-rwxr-xr-x 1 dmdba dinstall 1146 6月 6 16:38 license_zh.txt
drwxr-xr-x 2 dmdba dinstall 4096 11月 10 15:54 log
drwxr-xr-x 6 dmdba dinstall 92 6月 6 16:38 samples
drwxr-xr-x 3 dmdba dinstall 37 6月 6 16:38 script
drwxr-xr-x 9 dmdba dinstall 4096 6月 6 16:38 tool
drwxr-xr-x 3 dmdba dinstall 97 6月 6 16:38 uninstall
-rwxr-xr-x 1 dmdba dinstall 2146 6月 6 16:38 uninstall.sh
drwxr-xr-x 3 dmdba dinstall 88 6月 6 16:38 web
[root@dmdw02 fibs]# chown -R dmdba:dinstall /bbb/dm/fibs/bin
STEP5
[root@dmdw02 bin]#
[root@dmdw02 bin]# ./DmServicefibsuat start
Starting DmServicefibsuat: 上一次登录: 三 11月 30 15:43:28 CST 2022 pts/3 上
there is some DEV signle dm db \n
db1 fibs port 5245 , /bbb/dm/fibs/bin/DmServicefibsuat start \n
db2 atmc port 5246, systemctl start DmServiceuatmcuat\n
db3 upbm port 5244, systemctl start DmServiceupbmuat\n
#db4 latp port 5247, systemctl start DmServicelatpdev.service \n
db4 latp port 5257, /bbb/dm/latpdev/bin/DmServicelatpdev1 start\n
db5 lms port 5248, systemctl start DmServicelmsuat \n
db6 mysql_comm(itpw/amps) port 5249, systemctl start DmServicemy_common \n
db7 scf port 5250 /bbb/dm/scfdev/bin/DmServicescfdev start \n
some primary/standy mode db\n
process: /dbms5/bin/dmserver /dmdata/DB5/dm.ini mount \n
port : 5240 \n
[ OK ]
[root@dmdw02 bin]# ./disql aaa/aaa:5245
服务器[LOCALHOST:5245]:处于普通打开状态
登录使用时间 : 2.438(ms)
disql V8
SQL> SELECT ID_CODE();
行号 ID_CODE()
---------- -----------------------------------------
1 --03134283914-20220927-170566-20009 Pack3
已用时间: 1.174(毫秒). 执行号:3600.
SQL>
Q75 超长字段问题2则
问题1:
1. 问题描述
更新字段报错记录超长,字段定义3.2万,更新1.3万基本都是英文。字段exe_msg是联合主键中的字段,所以更新的时候也会同步维护二级索引。
2. 技术说明
在DM数据库中实际插入表中的列长度受到记录长度的约束,每条记录总长度不能大于页面大小的一半,其次达梦的索引长度默认长度也是受限的16384bytes。
3. 处理方法
A)基于第一点可以开启行长记录;
ALTER TABLE xxx ENABLE using long row;
B)基于第二点可以修改参数MAX_SEC_INDEX_SIZE =32768,增加二级索引的长度,或者不要在过长字段创建主键或者索引,这中场景大部分都是不合理的。
问题2:
2665]: 记录超长报错处理
1. 问题原因
DM 中记录长度不能超过页大小的一半。DM 在初始化的时候,默认的页大小是 8 KB,也就是说一个表一条记录的所有的字段的总长度不能超过 4 KB。选择的页大小影响后面表每行数据的长度,表每行的长度之和(普通数据类型)不能超过一页大小,如果超过 1 页大小即报记录超长的错误。
2. 解决方法
- 找到表中 varchar 类型比较长的(如 varchar2(8000)这种),修改成 text 类型。
- 把页大小改为 16 KB 或者 32 KB;这是一个底层参数,在数据库生命周期内都不能更改,所以必须重新初始化。(对于表中 varchar2 类型较长,并且字段较多的情况不太适合,这种情况采用方法 1 解决。)
- 利用该表的启用超长记录来解决;(建议使用此方式)
ALTER TABLE xxx USING LONG ROW;
4.考虑使用大字段,大字段是不参与上述描述计算的。大字段长度能够达到 2 GB。但是要注意,大字段的使用和普通字段是有区别的。
3. 统计表中占用字节长度最大的一行数据
Eg:SELECT max(LENGTHB(C)+LENGTHB(B)+LENGTHB(A)) FROM TAB_LENGTHB;
或者参考使用以下存储过程查询:
CREATE OR REPLACE PROCEDURE FindMaxRowByteSize(p_table_name IN VARCHAR2)
IS
v_sql VARCHAR2(32767);
v_column_list VARCHAR2(32767);
v_max_row_size NUMBER;
BEGIN
-- 构建列列表,使用 LENGTHB 函数计算每一列的字节大小
SELECT LISTAGG('LENGTHB(' || column_name || ')', ' + ') WITHIN GROUP (ORDER BY column_id)
INTO v_column_list
FROM user_tab_columns
WHERE table_name = UPPER(p_table_name);
-- 检查是否成功构建了列列表(如果表为空或没有列,LISTAGG 可能返回 NULL)
IF v_column_list IS NULL THEN
DBMS_OUTPUT.PUT_LINE('表 ' || p_table_name || ' 没有列。');
RETURN; -- 退出存储过程
END IF;
-- 构建 SQL 语句
v_sql := 'SELECT MAX(' || v_column_list || ') AS max_row_size FROM ' || p_table_name;
-- 执行 SQL 语句
EXECUTE IMMEDIATE v_sql INTO v_max_row_size;
-- 输出结果
DBMS_OUTPUT.PUT_LINE('表 ' || p_table_name || ' 的最大行字节大小为:' || v_max_row_size);
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('表 ' || p_table_name || ' 中没有数据。');
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('错误:' || SQLERRM);
END;
/
-- 调用存储过程
call FindMaxRowByteSize('TAB_LENGTHB');---填写实际表名字
###sample 10 达梦屏蔽关键字
方法1:
java的应用,还可以在jdbc的url里面去设置屏蔽关键字,后面加&keyWords=(关键字1,关键字2)
方法2:
达梦数据库系统关键字屏蔽方法
1. 概述
2. 目的
3. 屏蔽方法
3.1 在 SQL 查询中使用双引号引用对象
CONTEXT
作为字段名时,直接使用会导致语法错误。通过在字段名外加上双引号(如 "CONTEXT"
),可以成功执行查询。3.2 在客户端中屏蔽关键字
dm_svc.conf
,该文件的存放位置因操作系统和安装版本而异:-
32位 DM 安装在 Win32 操作平台下:位于
%SystemRoot%\system32
目录。 -
64位 DM 安装在 Win64 操作平台下:位于
%SystemRoot%\system32
目录。 -
32位 DM 安装在 Win64 操作平台下:位于
%SystemRoot%\SysWOW64
目录。 -
Linux 平台:位于
/etc
目录。
dm_svc.conf
文件,并添加以下内容:KEYWORDS=(关键字1,关键字2,...)
CONTEXT
:KEYWORDS=(CONTEXT)
3.3 在服务端中屏蔽关键字
dm.ini
文件中的 EXCLUDE_RESERVED_WORDS
参数来屏蔽关键字。例如,屏蔽关键字 CONTEXT
,可以通过以下存储过程设置:sp_set_para_string_value(2, 'EXCLUDE_RESERVED_WORDS', 'CONTEXT');
SELECT para_value FROM v$dm_ini WHERE para_name LIKE '%EXCLUDE_RESERVED_WORDS%';
CONTEXT
,则表示服务端已成功屏蔽该关键字。;
##sampe 11 dmfldr 版本太低,导致dmfldr无法正常运行
升级客户端版本到2023或者2024