达梦常见问题

## 问题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适用于主备库 集群模式)

 

或者看以下文档的第一节 (一主一备配置方式)

 

 

开发人员配置方法2Jdbc 配置 连接数据库的方法请看以下文档的第二节

(一主一备配置方式)

 

 

 

开发人员配置方法2Jdbc 配置 连接数据库的方法请看以下文档的第二节

(一主两备配置方式)

 

 

说明,经过研发二部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. 根据12的结果是否一致,决定是否需要新建一个实例

 

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

 

  1. 如何创建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版本移交的DDLDML以及创建的PACKAGEPACKAGE BODYFUNCTIONTRIGGER前面必须加上属主。

 RESOURCE/PUBLIC role角色

#sp_init_job_sys(1);

#GRANT ADMIN JOB TO NORMAL_USER;

 

5.2 应用访问数据库用户

命名规则:<应用系统简称>OPR

用途:用于应用系统连接数据库,对业务数据进行访问和操作。

系统权限:CREATE SESSION ALTER SESSION权限

使用人员:应用运维部应用管理人员。

密码管理:应用运维部应用管理员管理,长期有效。

开通审计:数据库审计平台审计

5.3 数据同步工具用户

命名规则:<关联应用系统简称>ETL

用途:利用数据同步工具如datastagekettleinformatica等从数据库中抽取数据。

系统权限:create sessioncreate 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备份定期删除备份(每天 2330 删除 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/faq/faq-backup-restore.html#%E5%91%A8%E6%9C%9F%E6%80%A7%E5%A4%87%E4%BB%BD%E8%84%9A%E6%9C%AC

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.增量备份的是每周日到周523: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
###全局配置区
 DMDW=(192.168.254.148:5236,192.168.254.149:5236)
 TIME_ZONE=(+480) #表示+8:00 时区
 LOGIN_ENCRYPT=(0)
 DIRECT=(Y)
 LANGUAGE=(cn)
 LOGIN_MODE=(1) #只连主库

不同方式登录如下:
1.利用./disql连数据库时

---./disql 连接IP登备库时,报错:[-70019]:没有匹配的可登陆服务器.
[dmdba@dmdb02:/home/dmdba/dmdbms/bin]$./disql aaa/aaa@192.168.254.149

---./disql 连接服务名登录时,登录成功:服务器[192.168.254.148:5236]:处于主库打开状态
[dmdba@dmdb02:/home/dmdba/dmdbms/bin]$./disql aaa/aaa@DMDW

2.利用管理工具连数据库时
1)用达梦管理工具连接备库 IP 时,登录失败;
2)用达梦管理工具连接服务名登录时,连接成功,处于主机模式。

二、当dm_svc.conf的参数LOGIN_MOEDE=(1)局部配置时,内容如下

[root@dmdb01 ~]# cat /etc/dm_svc.conf
### 全局配置区
 DMDW=(192.168.254.148:5236,192.168.254.149:5236)
 TIME_ZONE=(+480) #表示+8:00 时区
 LOGIN_ENCRYPT=(0)
 DIRECT=(Y)
 LANGUAGE=(cn)
 [DMDW]#局部配置
 LOGIN_MODE=(1) #只连主库

不同方式登录如下:
1.利用./disql连数据库时

---./disql 连接 IP 登备库时,登录成功,服务器[192.168.254.149:5236]:处于备库打开状态
[dmdba@dmdb02:/home/dmdba/dmdbms/bin]$./disql aaa/aaa@192.168.254.149

---./disql 连接服务名登录时,登录成功,服务器[192.168.254.148:5236]:处于主库打开状态
[dmdba@dmdb01:/home/dmdba/dmdbms/bin]$./disql aaa/aaa@DMDW

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/

 

 

  1. 以管理员身份打开dos。(这一步有问题,联系windows管理员)

 

 

  1. 创建一个文件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.iniARCH_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)

 

606 14:42:51 dba systemd[1]: Starting DM Instance Service(DmServicedmdb)....

606 14:43:09 dba DmServicedmdb[6972]: [39B blob data]

606 14:43:09 dba DmServicedmdb[6972]: version info: enterprise

606 14:43:09 dba systemd[1]: DmServicedmdb.service: Control process exited, code=exited, status=1/FAILURE

606 14:43:09 dba DmServicedmdb[6972]: lic info is different between dm.key and sysinfo.

606 14:43:09 dba systemd[1]: DmServicedmdb.service: Failed with result 'exit-code'.

606 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表空间不能修改


文字化修改方法如下;

  1. 确认表空间名字和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

 

  1. 修改最大大小

-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 无策略

⚫ 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、数据库是打开的

2DMAP服务是打开的  

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 restartdmdb就是服务名)

 

主备:

进入数据库软件的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 1111 ?      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 一个环境

 

  1. 新建实例

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),可选值:163264,单位:页

PAGE_SIZE  数据页大小(8),可选值:481632,单位:K

charset=1                                                                    字符集(0),可选值:0[GB18030]1[UTF-8]2[EUC-KR]

CASE_SENSITIVE  大小敏感(Y),可选值:Y/N1/0

LENGTH_IN_CHAR  VARCHAR类型长度是否以字符为单位(N),可选值:Y/N1/0

LOG_SIZE  日志文件大小(256),单位为:M,范围为:64M ~ 2G

 

  1. 备份还原

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                    默认值为 00 代表 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         默认值为 00 代表 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的麒麟操作系统10key)

生产环境备份旧的库的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

  1. 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个用户,每个用户各运行了一个实例,所以需要启动2dmap服务而配置,单节点多实例备份

 

方案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

 

步骤如下:

  1. in 10.241.28.223

cd /home/dmdba/dmdbms/tool/dmagent

scp -r * root@10.241.28.221:/opt/dmdbms/tool/dmagent0426/

 

  1. 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。

 

解决办法

  1. Dbmonitor 手工停 group_name,同时停下主备实例

 

 

  1. 更多dbmonitor 命令可以使用help 验证下

(更多如果只想停止单个实例

还可以直接连一下备库的实例(备库ip+端口),执行shutdown immediate,只关停单实例。。)

 

  1. 2边实例都停了,就剩下守护进程了,可以考虑手工停了dmwatcherDmWatcherServiceDB5  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       

 

  1. 如果都停止完了,需要手工将实例和dmwaterch拉起来.,步骤如下:


主库:先后执行 
-》 DmServiceDB_name start mount

DmServiceDB_name start 


-》DmWatcherServiceDB5 start

备库:先后执行 
-》 DmServiceDB_name start mount

DmServiceDB_name start


-》 DmWatcherServiceDB5 start


实例服务dmserver启动用mount状态起

 

Q66.2  主备库 启动start mountstart 的区别

主库:先后执行 
 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 aaaidentified 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 1130 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 1110 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: 上一次登录: 三 1130 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. 解决方法

  1. 找到表中 varchar 类型比较长的(如 varchar2(8000)这种),修改成 text 类型

 

  1. 把页大小改为 16 KB 或者 32 KB;这是一个底层参数,在数据库生命周期内都不能更改,所以必须重新初始化。(对于表中 varchar2 类型较长,并且字段较多的情况不太适合,这种情况采用方法 1 解决。)

 

  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 查询中使用双引号引用对象

如果字段名或表名与达梦关键字冲突,可以通过在 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,可以通过以下存储过程设置:
sql
复制
sp_set_para_string_value(2, 'EXCLUDE_RESERVED_WORDS', 'CONTEXT');
 
设置完成后,需要重启数据库服务以使配置生效。可以通过以下查询语句验证设置是否成功:
sql
复制
SELECT para_value FROM v$dm_ini WHERE para_name LIKE '%EXCLUDE_RESERVED_WORDS%';
 
如果返回结果中包含 CONTEXT,则表示服务端已成功屏蔽该关键字。

;

 

 

##sampe 11  dmfldr 版本太低,导致dmfldr无法正常运行

升级客户端版本到2023或者2024

posted @ 2025-02-24 15:59  feiyun8616  阅读(402)  评论(0)    收藏  举报