首页 > 数据库 >2021-4-10-达梦数据库

2021-4-10-达梦数据库

时间:2024-03-22 17:23:39浏览次数:24  
标签:10 GROUP RIGHTS PMS 2021 KIAMBIZ SQL ID 达梦

模式、状态、状态切换、表空间、GROUP BY、JOIN语句报错、事务

模式

达梦数据库支持3中模式: Normal 模式、 Primary 模式和 Standby 模式。

1)Normal 模式

用户可以正常访问数据库,操作没有限制。正常生成本地归档,但不发送实时归档(Realtime)、即时归档(Timely)和异步归档(Async)。

将数据库切换为 Normal 模式:
   ALTER DATABASE NORMAL;

2)Primary 模式

用户可以正常访问数据库,操作有极少限制。对临时表空间以外的所有的数据库对象的修改操作都强制生成 Redo 日志。正常生成本地归档,支持实时归档(Realtime)、即时归档(Timely)和异步归档(Async)。 在归档有效时,发送 REDO 日志到备库;
该模式下部分功能受限,包括:不支持修改表空间文件名、不支持修改 arch_ini 参数。正常生成本地归档,支持实时归档(Realtime)、即时归档(Timely)和异步归档(Async)。

将数据库切换为Primary模式:
   ALTER DATABASE PRIMARY;

3)Standby模式

可以执行数据库备份(不能执行数据库作业备份)、查询等只读数据库操作。接收主库发送过来的REDO 日志并重做。正常生成本地归档,正常发送异步归档日志;但实时归档(Realtime)、即时归档(Timely)均强制失效。该模式下时间触发器、事件触发器等都失效。
另外,还支持临时表的 Insert/Delete/Update 操作。因为临时表数据的修改不会产生 Redo 日志,所以同样主库对临时表的修改无法同步到备库。

将数据库切换为 Standby 模式: 
   ALTER DATABASE STANDBY;

注意:

1、三种模式只能在 MOUNT 状态下设置,模式之间可以相互转换。
2、对于新初始化的库,首次启动不允许使用 mount 方式,需要先正常启动并正常退出,然后才允许 mount 方式启动。
3、一般情况下,数据库为 NORMAL 模式,如果不指定 MOUNT 状态启动,则自动启动到 OPEN状态。
4、在需要对数据库配置时(如配置数据守护、数据复制),服务器需要指定 MOUNT 状态启动。
5、当数据库模式为非 NORMAL 模式(PRIMARY、 STANDBY 模式),无论是否指定启动状态,服务器启动时自动启动到 MOUNT 状态。
6、修改 DMDSC 库的模式必须在 DMDSC 库所有实例都处于 MOUNT 状态下才能进行,只需要在一个节点上执行以上语句即可


状态

DM数据库的状态包括startup、mount、after redo、open、suspend、shutdown这几种状态。

1)startup

系统刚启动时设置为 Startup 状态。

2)mount

数据库在 Mount 状态下,不能修改数据,不能访问表、视图等数据库对象,但可以执行修改归档配置、控制文件和修改数据库模式等操作,也可以执行一些不修改数据库内容的操作,比如查询动态视图或者一些只读的系统过程。
由于 Mount 状态不生成 PWR 日志,因此数据页可以正常刷盘,也正常推进检查点。系统从 Open 状态切换为 Mount 状态时, 会强制回滚所有活动事务,但不会强制清理(Purge)已提交事务,不会强制断开用户连接,也不会强制 Buffer 中的脏页刷盘。

将数据库修改为mount状态: 
   ALTER DATABASE MOUNT;

示例:

服务器[LOCALHOST:5236]:处于普通打开状态
登录使用时间: 5.273(毫秒)
SQL> select status$ from v$instance;

行号     STATUS$
---------- -------
1          OPEN
已用时间: 0.407(毫秒). 执行号:5.
SQL> alter database mount;
操作已执行
已用时间: 00:00:01.778. 执行号:0.
SQL> select status$ from v$instance;

行号     STATUS$
---------- -------
1          MOUNT
PWR日志: Page Written Record 日志,是REDO 日志里包含有一种特殊的记录。包括(ts_id, fil_id, page_no, page_lsn)信息。每个数据页刷盘时,都会生成一条对应的 PWR 日志。

3)after redo

系统启动过程中联机日志重做完成后,回滚活动事务前设置为 After Redo 状态。非Standby 模式的实例在执行 alter database open 操作前,也会将系统设置为 After Redo 状态。

4)open

可以访问数据库对象,对外提供正常的数据库服务,不能进行控制文件维护、归档配置等操作。

将数据库修改为 Open 状态:  (当系统处于 Primary/Standby 模式时,必须强制加上 FORCE 子句。)
   ALTER DATABASE OPEN [FORCE];

示例:

SQL> select status$ from v$instance;

行号     STATUS$
---------- -------
1          MOUNT

已用时间: 54.783(毫秒). 执行号:4.
SQL> alter database open;
操作已执行
已用时间: 00:00:09.971. 执行号:0.
SQL> select status$ from v$instance;

行号     STATUS$
---------- -------
1          OPEN

已用时间: 0.407(毫秒). 执行号:5.

5)suspend

数据库在 Suspend 状态下,可以访问数据库对象,甚至可以修改数据,但限制 Redo 日志刷盘, 一旦执行 COMMIT 等触发 Redo 日志刷盘的操作时,当前操作将被挂起。
相比 Open 到 Mount 的状态切换, Open 到 Suspend 的状态切换更加简单、高效,不会回滚任何活动事务,在状态切换完成后,所有事务可以继续执行。

在DataWatch主备系统中suspend状态的自动切换的使用:
一般在修改归档状态之前将系统切换为 Suspend 状态,比如备库故障恢复后,在历史数据(归档日志)同步完成后,需要重新启用实时归档功能时:

  1. 将系统切换为 Suspend 状态,限制 Redo 日志写入联机 Redo 日志文件;
  2. 修改归档状态为 Valid;
  3. 重新将数据库切换为 Open 状态,恢复 Redo 日志写入功能;
  4. 备库与主库重新进入实时同步状态。

实时归档失败时(比如网络故障导致), Primary 实例将试图切换成 Suspend状态,防止后续的日志写入。因为一旦写入,主备切换时有可能备库没有收到最后那次的RLOG_PKG,导致主库上多一段日志,很容易造成主备数据不一致。当实例成功切换为SUSPEND 状态时,可直接退出,强制丢弃多余的日志,避免主备数据不一致。

将数据库修改为 Suspend 状态:
   ALTER DATABASE SUSPEND;
注意:修改 DMDSC 库的状态为 SUSPEND 时,库内所有实例都不能处于 MOUNT 状态,只需要在一个节点上执行 ALTER DATABASE SUSPEND 语句即可。

示例:

Session 1:
SQL> alter database suspend;
操作已执行
已用时间: 100.968(毫秒). 执行号:0.
SQL> select status$ from v$instance;

行号     STATUS$
---------- -------
1          SUSPEND

Session 2:
SQL> select count(*) from test;   ---查询正常

行号     COUNT(*)            
---------- --------------------
1          3

已用时间: 2.639(毫秒). 执行号:8.

SQL> insert into test values(1,'a',10000);    ---插入正常
影响行数 1

已用时间: 0.882(毫秒). 执行号:11.
SQL> commit;                    ---但是提交会挂起


Session 3:
SQL> create table t(id int);  ---设计会一直挂起

Session 1:
修改为open状态:
SQL> alter database open; 
操作已执行
已用时间: 0.644(毫秒). 执行号:0.

Session 2: 创建成功
SQL> create table t(id int);   
操作已执行
已用时间: 00:05:41.432. 执行号:7.

Session 3:  提交成功
SQL> insert into test values(1,'a',10000);
影响行数 1

已用时间: 0.882(毫秒). 执行号:11.
SQL> commit;
操作已执行
已用时间: 00:01:44.580. 执行号:12.
SQL> 

6)shutdown

实例正常退出时设置为 Shutdown 状态。


状态切换

  1. Open 状态与 Mount 状态可以相互切换;
  2. Open 状态与 Suspend 状态可以相互切换;
  3. Mount 和 Suspend 状态不能直接转换;
  4. 其他状态为系统内部状态,用户不能主动干预。

另外, 可以通过参数ALTER_MODE_STATUS来控制是否允许手工修改服务器的模式、 状态和OGUID,1: 允许; 0: 不允许。默认为1。此参数可以动态修改。

示例:
1、Open状态与Mount状态的相互切换

SQL> select status$ from v$instance;

行号     STATUS$
---------- -------
1          OPEN

已用时间: 0.287(毫秒). 执行号:13.
SQL> alter database mount;
操作已执行
已用时间: 00:00:01.760. 执行号:0.
SQL> select status$ from v$instance;

行号     STATUS$
---------- -------
1          MOUNT

已用时间: 0.677(毫秒). 执行号:14.
SQL> alter database open;
操作已执行
已用时间: 00:00:01.741. 执行号:0.
SQL> select status$ from v$instance;

行号     STATUS$
---------- -------
1          OPEN

已用时间: 0.280(毫秒). 执行号:15.

2、Open状态与Suspend状态的相互切换

SQL> select status$ from v$instance;

行号     STATUS$
---------- -------
1          OPEN

已用时间: 0.280(毫秒). 执行号:15.
SQL> alter database suspend;
操作已执行
已用时间: 100.965(毫秒). 执行号:0.
SQL> select status$ from v$instance;

行号     STATUS$
---------- -------
1          SUSPEND

已用时间: 0.700(毫秒). 执行号:16.
SQL> alter database open;
操作已执行
已用时间: 0.517(毫秒). 执行号:0.
SQL> select status$ from v$instance;

行号     STATUS$
---------- -------
1          OPEN

已用时间: 0.291(毫秒). 执行号:17.

3、Mount状态与Suspend状态不能直接切换

mount状态切换suspend状态:
SQL> select status$ from v$instance;

行号     STATUS$
---------- -------
1          MOUNT

已用时间: 0.673(毫秒). 执行号:18.
SQL> alter database suspend;
alter database suspend;
第1 行附近出现错误[-510]:系统处于MOUNT状态.
已用时间: 0.523(毫秒). 执行号:0.

suspend状态切换mount状态:
SQL> select status$ from v$instance;

行号     STATUS$
---------- -------
1          SUSPEND

已用时间: 0.665(毫秒). 执行号:19.
SQL> alter database mount;
alter database mount;
第1 行附近出现错误[-515]:系统处于SUSPEND状态.
已用时间: 0.337(毫秒). 执行号:0.
SQL> 

表空间

类似于mysql中的数据库

1.创建表空间

-- 创建BIZ表空间
CREATE TABLESPACE KIAMBIZ DATAFILE 'KIAMBIZ.DBF' SIZE 128;

-- 创建用户指定默认表空间
CREATE USER KIAMBIZ IDENTIFIED BY "Aa12345678" DEFAULT TABLESPACE KIAMBIZ;

-- 分配权限
GRANT DBA TO KIAMBIZ;

2.删除表空间

Drop user AAA0407;
drop tablespace "AAA0407";

先删除表空间内的用户,才可删除表空间

如果用户建立了数据库对象 (如表、视图、过程或函数),或其他用户对象引用了该用户的对象,或在该用户的表上存在其它用户建立的视图,DM 将返回错误信息 ,如果要删除需要在语句后加CASCADE

drop user HNGF0407 CASCADE

GROUP BY

SELECT
	"KIAMBIZ"."TB_ORG"."ORG_ID" AS "ORG_ID",
	"KIAMBIZ"."TB_ORG"."ORG_NAME" AS "ORG_NAME",
	"KIAMBIZ"."TB_ORG"."ORG_PATH" AS "ORG_PATH",
	"KIAMBIZ"."TB_ORG"."PARENT_ORG_ID" AS "PARENT_ORG_ID",
	"KIAMBIZ"."VW_AUDIT_ACCESS_COUNT_BY_MONTH_CORE"."APP_ID" AS "APP_ID",
	"KIAMBIZ"."VW_AUDIT_ACCESS_COUNT_BY_MONTH_CORE"."LOG_TIME" AS "LOG_TIME",
	sum( "KIAMBIZ"."VW_AUDIT_ACCESS_COUNT_BY_MONTH_CORE"."ACCESS_COUNT" ) AS "ACCESS_COUNT"
FROM
	"KIAMBIZ"."TB_ORG" JOIN "KIAMBIZ"."VW_AUDIT_ACCESS_COUNT_BY_MONTH_CORE"  
ON
	"KIAMBIZ"."TB_ORG"."ORG_ID" = "KIAMBIZ"."VW_AUDIT_ACCESS_COUNT_BY_MONTH_CORE"."ORG_ID" 
GROUP BY 
	"KIAMBIZ"."TB_ORG"."ORG_ID",
	"KIAMBIZ"."TB_ORG"."ORG_NAME",
	"KIAMBIZ"."TB_ORG"."ORG_PATH",
	"KIAMBIZ"."TB_ORG"."PARENT_ORG_ID",
	"KIAMBIZ"."VW_AUDIT_ACCESS_COUNT_BY_MONTH_CORE"."APP_ID",
	"KIAMBIZ"."VW_AUDIT_ACCESS_COUNT_BY_MONTH_CORE"."LOG_TIME"

在select中存在的字段,必须包含在group by 语句中,否则会报错“ GROUP BY 表达式”


JOIN语句报错

CREATE VIEW "KIAMBIZ"."VW_PMS_GROUP_RIGHTS" ( "RIGHTS_ID", "GROUP_ID", "ROLE_ID", "GROUP_NAME", "ROLE_NAME", "NOTBEFORE", "NOTAFTER", "EXTINFO", "ADDBY", "ADDTIME", "UPDATE_BY", "UPDATETIME", "APP_ID" ) AS SELECT
"PMS_RIGHTS"."RIGHTS_ID" AS "RIGHTS_ID",
"PMS_RIGHTS"."GROUP_ID" AS "GROUP_ID",
"PMS_RIGHTS"."ROLE_ID" AS "ROLE_ID",
"PMS_GROUP"."GROUP_NAME" AS "GROUP_NAME",
"PMS_ROLE"."ROLE_NAME" AS "ROLE_NAME",
"PMS_RIGHTS"."NOTBEFORE" AS "NOTBEFORE",
"PMS_RIGHTS"."NOTAFTER" AS "NOTAFTER",
"PMS_RIGHTS"."EXTINFO" AS "EXTINFO",
"PMS_RIGHTS"."ADDBY" AS "ADDBY",
"PMS_RIGHTS"."ADDTIME" AS "ADDTIME",
"PMS_RIGHTS"."UPDATE_BY" AS "UPDATE_BY",
"PMS_RIGHTS"."UPDATETIME" AS "UPDATETIME",
"PMS_RIGHTS"."APP_ID" AS "APP_ID" 
FROM
	( ( "KIAMBIZ"."TB_PMS_GROUP_RIGHTS" "PMS_RIGHTS" JOIN "KIAMBIZ"."TB_PMS_GROUP" "PMS_GROUP" ) JOIN "KIAMBIZ"."TB_PMS_ROLE" "PMS_ROLE" ) 
WHERE
	( ( "PMS_GROUP"."GROUP_ID" = "PMS_RIGHTS"."GROUP_ID" ) AND ( "PMS_ROLE"."ROLE_ID" = "PMS_RIGHTS"."ROLE_ID" ) );

语句中出现join……where……这样的语句,在达梦中不被允许,只可是join……on……这样的格式,应改为

CREATE VIEW "KIAMBIZ"."VW_PMS_GROUP_RIGHTS" ( "RIGHTS_ID", "GROUP_ID", "ROLE_ID", "GROUP_NAME", "ROLE_NAME", "NOTBEFORE", "NOTAFTER", "EXTINFO", "ADDBY", "ADDTIME", "UPDATE_BY", "UPDATETIME", "APP_ID" ) AS SELECT
"PMS_RIGHTS"."RIGHTS_ID" AS "RIGHTS_ID",
"PMS_RIGHTS"."GROUP_ID" AS "GROUP_ID",
"PMS_RIGHTS"."ROLE_ID" AS "ROLE_ID",
"PMS_GROUP"."GROUP_NAME" AS "GROUP_NAME",
"PMS_ROLE"."ROLE_NAME" AS "ROLE_NAME",
"PMS_RIGHTS"."NOTBEFORE" AS "NOTBEFORE",
"PMS_RIGHTS"."NOTAFTER" AS "NOTAFTER",
"PMS_RIGHTS"."EXTINFO" AS "EXTINFO",
"PMS_RIGHTS"."ADDBY" AS "ADDBY",
"PMS_RIGHTS"."ADDTIME" AS "ADDTIME",
"PMS_RIGHTS"."UPDATE_BY" AS "UPDATE_BY",
"PMS_RIGHTS"."UPDATETIME" AS "UPDATETIME",
"PMS_RIGHTS"."APP_ID" AS "APP_ID" 
FROM
	 "KIAMBIZ"."TB_PMS_GROUP_RIGHTS" "PMS_RIGHTS" , "KIAMBIZ"."TB_PMS_GROUP" "PMS_GROUP"  , "KIAMBIZ"."TB_PMS_ROLE" "PMS_ROLE"  
WHERE
	 "PMS_GROUP"."GROUP_ID" = "PMS_RIGHTS"."GROUP_ID"  AND  "PMS_ROLE"."ROLE_ID" = "PMS_RIGHTS"."ROLE_ID" ;

事务

1)事务的开始

DM 没有提供显式定义事务开始的语句,第一个可执行的 SQL 语句(除登录语句外)隐含 事务的开始。

2)事务的结束

可以使用显式的提交或回滚语句来结束一个事务,也可以隐式地提交一个事务。

(1)提交

COMMIT;

(2)回滚

ROLLBACK;

退出时,用 COMMIT 或 ROLLBACK 命令来显式地结束应用程序。如果没有显 式地提交事务,而应用程序又非正常终止,则最后一个未提交的工作单元被回滚。

特别说明:

CREATE TABLESPACE 和 ALTER DATABASE 两种 DDL 语句是不能回滚的。

3)隐式提交

当遇到 DDL 语句时,DM 数据库会自动提交前面的事务,然后开始一个新的事务执行 DDL 语句。这种事务提交被称为隐式提交。DM 数据库在遇到以下 SQL 语句时自动提交前面 的事务:

  1. CREATE;

  2. ALTER;

  3. TRUNCATE;

  4. DROP;

  5. GRANT;

  6. REVOKE;

  7. 审计设置语句。

标签:10,GROUP,RIGHTS,PMS,2021,KIAMBIZ,SQL,ID,达梦
From: https://www.cnblogs.com/sylvesterzhang/p/18089886

相关文章

  • 2021-6-20-h2
    特点、运行方式、开始特点支持全文检索,提供了内置全文检索和使用ApacheLuncene的全文索引对数据类型和SQL有很好的支持,兼容性好,便于移植支持嵌入式数据库、内存数据库、只读数据库等;能够通过浏览器操控数据库与SQLit相比较,读操作更快,但是在连接、写操作性能......
  • 2021-6-8-zookeeper
    概述、Zookeeper设计目的、zookeepr角色介绍、工作原理、应用场景、安装、命令、JAVA操作zookeeper概述它是一个分布式服务框架,是ApacheHadoop的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务、状态同步服务、集群管理、分布式应用配置项......
  • 2021-10-22-go语言基础
    概述、变量、常量、运算符和函数、导包、指针、defer、数组、切片、map、type使用、面向对象、反射、chanel、协程、json操作、随机数、网络编程、读取文件、beego概述1特性:自动垃圾回收更丰富的内置类型函数多返回值错误处理匿名函数和闭包类型和接口并发......
  • 海思 SS927V100 HI3519AV200 简介
    海思SS927V100HI3519AV200简介HI3519AV200是一颗专业ultra-HDSmartIPCameraSOC。SS927V100(另称:22AP70、SD3402)功能以及封装与HI3519AV200完全一致,可以平替HI3519AV200。最高支持四路sensor输入,支持最高4K60的ISP图像处理能力,支持3FWDR、多级降噪、六轴......
  • 搭建麒麟桌面操作系统V10 SP1 2303的内网全量仓库源
    来源:公众号鹏大圣运维作者:鹏大圣免责声明本文所有内容,只在测试环境中进行,如果您要使用文章中的内容对您的环境进行操作,请您一定知悉:所有的操作都会带来一定的风险,可能会导致系统崩溃等多种问题,切勿盲目操作,本公众号为您提供一种操作的思路,不对您的任何操作行为负责,请您知......
  • 10、ORM模型CRUD操作
    fromconfigimportapp,[email protected]("/")defhello_world():return"helloflask!"#添加用户@app.route("/user/add")defuser_add():password=flask_bcrypt.generate_passwo......
  • 【转载】解决 安装或卸载软件时报错Error 1001 的问题
    卸载或安装程序时出错1001:错误1001可能发生在试图更新、修复或卸载windowsos中的特定程序时。此问题通常是由于程序的先前安装损坏而引起的。错误“1001”通常会遇到,因为程序的先前安装被破坏或者由于Windows安装不处于正常状态(例如,注册表已经被恶意软件修改)。在这种情况......
  • ELK - Win10上使用Docker搭建ES集群
    Win10上使用Docker搭建ES集群ElasticSearch离线镜像包http://www.elastic-view.cn/index.htmlES可视化管理工具http://www.elastic-view.cn/index.html单机单节点启动命令:dockerrun-d--nameelasticsearch-p9200:9200-p9300:9300-enode.name=elasticsearch......
  • 【题目】【网络系统管理】2021年全国职业院校技能大赛模块B--样题(一)
    2021年全国职业院校技能大赛网络系统管理(样题1)模块B:Windows环境全国职业院校技能大赛执委会.技术专家组2021年03月目录一、赛题说明3(一)竞赛介绍3(二)密码3(三)竞赛时间3(四)竞赛注意事项3(五)竞赛结果文件的提交3二、项目任务描述4(一)基本配置4(二)拓扑图5三、......
  • 【题目】【网络系统管理】2021年全国职业院校技能大赛模块B--样题(二)
    2021年全国职业院校技能大赛网络系统管理(样题2)模块B:Windows环境全国职业院校技能大赛执委会.技术专家组2021年03月目录一、赛题说明3(一)竞赛介绍3(二)密码3(三)竞赛时间3(四)竞赛注意事项3(五)竞赛结果文件的提交3二、项目任务描述4(一)基本配置4(二)拓扑图5三、......