eygle.com   eygle.com
eygle.com eygle
eygle.com  
 

September 30, 2022

Oracle Database 23c 新特性: 基于别名和位置的 GROUP BY 简化

在Oracle Database 23c 中,group by 作出了一个期待已久的增强,支持通过别名或者位置的Group by 查询。

在23c之前,group by 要不断重复查询中的复杂逻辑,如下所示:

SELECT EXTRACT(year FROM hiredate) AS hired_year, COUNT(*) from emp

GROUP BY extract(year FROM hiredate) HAVING extract(year FROM hiredate) > 1985;

在23c中,可以通过别名大大简化这一SQL:

SELECT EXTRACT(year FROM hiredate) AS hired_year, COUNT(*) from emp

GROUP BY hired_year HAVING hired_year > 1985;

20220927-f614551a-5cfc-4a68-9dd3-b0eada06632c.png

这是开发者期待已久的,终于在 23中得以实现。

Posted by eygle at 9:18 AM | Permalink | Oracle12c/11g (177)

September 28, 2022

Oracle Database 23c 新特性:4096 列支持和 Schema 权限一次授予

我们知道 MogDB 单表最大支持 1600 列,Oracle 此前版本单表支持 1000列。

在23c中,单表支持列数量扩展到 4096 列。启用这一个特性需要将兼容性参数设置为23.0.0,同时将 Max_columns设置为 Extended:

alter system set MAX_COLUMNS=EXTENDED;

20220927-31e05273-6171-4759-9bb4-012612c27a47.png

在23c之前的版本,如果针对 Schema 对其他用户进行授权,需要通过系统权限 或 对象权限 分别显示的授予,这对数据库带来了额外的安全风险 或 复杂性。

在 Oracle 23 中,可以对 Schema 进行授权,简化了之前的全线操作:

grant select any table on SCHMEA PROD to HR;

20220927-9d215746-e487-41d7-b5d1-6bcc2fdf104c.png

详情参考:Oracle Database 23c 十小新特性速览:从Schema权限到4096列支持

Posted by eygle at 3:33 PM | Permalink | Oracle12c/11g (177)

Oracle Database 23c新特性:无需DUAL表和FROM的SELECT快捷查询

我们知道,在 MogDB 数据库中,SELECT 是可以不跟 FROM 子句实现一系列的查询功能,例如:

MogDB=#select 2^10;
 ?column? 
----------
     1024
(1 row)

MogDB=#select 9*9;
 ?column? 
----------
       81
(1 row)

在 Oracle 23c 中,第一次实现了不带From子句的查询,因而原来大量依赖 Dual 表的查询,可以松下了一口气。

现在 Oracle 开始支持 SELECT SYSDATE 直接返回结果:

20220927-6bbc9e9d-5f48-4154-8acb-673388a5001c.png

在23c之前的版本中,DUAL 表是最常用的一个计算和常量返回的虚拟表:

SQL> select sysdate from dual;

SYSDATE

---------

28-SEP-22

SQL> select sysdate;

select sysdate

*

ERROR at line 1:

ORA-00923: FROM keyword not found where expected

详情参考:Oracle Database 23c 十小新特性速览:从Schema权限到4096列支持

Posted by eygle at 3:19 PM | Permalink | Oracle12c/11g (177)

March 14, 2022

MacOS 使用终端连接 MySQL 查询乱码的问题解决

最近在使用 MacOS 访问 MySQL 数据库时,查询总是出现乱码,数据库和表的字符集、终端设置都是 UTF8.

最后发现是 MacOS Terminal 的环境变量设置问题:

编辑配置文件

vim ~/.bash_profile

添加一样内容:

export LC_ALL=zh_CN.UTF-8

执行命令,使其生效:

source ~/.bash_profile

即可解决客户端的 Terminal 终端设置导致的乱码问题。

Posted by eygle at 2:46 PM | Permalink | Beginner (55)

December 7, 2021

openGauss 概述

本文来源于墨天轮:https://www.modb.pro/db/190317 openGauss数据库是华为公司在深度融合技术应用于数据库领域多年经验的基础上,结合企业级场景要求,推出的新一代企业级开源数据库。

openGauss是关系型数据库(relational database),采用客户端/服务器,单进程多线程架构;支持单机和一主多备部署方式,同时支持备机可读、双机高可用等特性。

openGauss有如下基本功能 :

(1) 支持标准SQL。

openGauss数据库支持标准的SQL(structured query language,结构化查询语言)。SQL标准是一个国际性的标准,会定期更新和演进。SQL标准的定义分为核心特性以及可选特性,绝大部分的数据库都没有100%支撑SQL标准。openGauss数据库支持SQL92/SQL99/SQL2003等,同时支持SQL2011大部分核心特性以及部分可选特性。

(2) 支持标准开发接口。

openGauss数据库提供业界标准的ODBC(open database connectivity,开放式数据库连接)及JDBC(java database connectivity,java数据库连接)接口,保证用户能将业务快速迁移至openGauss。目前支持标准的ODBC3.5及JDBC4.0接口,其中ODBC能够支持CentOS、openEuler、SUSE、Win32、Win64等平台,JDBC无平台差异。

(3) 支持混合存储引擎。

openGauss数据库支持行存储引擎、列存储引擎和内存存储引擎等。行存储分为inplace update和append update两种模式,前者通过单独的回滚段(undo log)来保留元组的前像以解决读写冲突,可以更自然地支持数据更新;后者将更新记录混杂在数据记录中,通过新旧版本的形式来支持数据更新,对于旧版本需要定期做vacuum操作来支持磁盘空间的回收。列存储支持数据快速分析,更适合OLAP(online analytical processing,联机分析处理)业务。内存引擎支持实时数据处理,对有极致性能要求的业务提供支撑。

(4) 支持事务。

事务支持指的是系统提供事务的能力,openGauss支持事务的原子性、一致性、隔离性和持久性。事务支持及数据一致性保证是绝大多数数据库的基本功能,只有支持了事务,才能满足事务化的应用需求。

  • A(atomicity): 原子性。整个事务中的所有操作,要么全部完成,要么全部不完成,不可能停滞在中间某个环节。

  • C(consistency): 一致性。事务需要保证从一个执行性状态转移到另一个一致性状态,不能违反数据库的一致性约束。

  • I(isolation): 隔离性。隔离事务的执行状态,使它们好像是系统在给定时间内执行的唯一操作。例如有两个事务并发执行,事务的隔离性将确保每一事务在系统中认为只有该事务在使用系统。

  • D(durability): 持久性。在事务提交以后,该事务对数据库所做的更改便持久地保存在数据库之中,不会因掉电、进程异常故障而丢失。 openGauss数据库支持事务的隔离级别有读已提交和可重复读,默认隔离级别是读已提交,保证不会读到脏数据。 事务分为隐式事务和显式事务。显式事务的相关基础接口如下。

  • Start transaction:事务开启。

  • Commit:事务提交。

  • Rollback:事务回滚。

另有用户还可以通过set transaction命令设置事务的隔离级别、读写模式或可推迟模式。

(5) 软硬结合。

openGauss数据库支持软硬件地结合,包括多核地并发访问控制、基于SSD(solid-state drive,固态硬盘)地I/O(input/output,输入/输出)优化、智能地buffer pool(缓冲池)数据管理。

(6) 智能优化器。

openGauss数据库提供了智能的代价模型、智能计划选择,可以显著提升数据库性能。openGauss的执行器包含了向量化执行和LLVM(low level virtual machine,底层虚拟机,一种构架编译器的框架系统)编译执行,可以显著提升数据库性能。

(7) 支持AI。

传统数据库生态依赖于DBA(database administrator,数据库管理员)进行数据地管理、维护、监控、优化。但是在大量的数据库实例中,DBA难以支持海量实例,而AI(artificial intelligence,人工智能)则可以自动优化数据库,openGauss数据库的AI功能包括AI自调优、AI索引推荐、AI慢SQL诊断等。

(8) 支持安全。

openGauss数据库具有非常好的安全特性,包括透明加密(在磁盘的存储文件是加密的)、全密态(数据传输、存储、计算都是加密的)、防篡改(用户不可篡改)、敏感数据智能发现等。

(9) 支持函数和存储过程。

函数和存储过程是数据库中的一种重要对象,主要功能是将用户特定功能的SQL语句集进行封装并方便调用。存储过程是SQL、PL(procedural language SQL,过程语言SQL)/SQL的组合。存储过程可以使执行商业规则的代码从应用程序中移动到数据库,从而实现代码存储一次但能够被多个程序使用。

允许客户模块化程序设计,对SQL语句集进行封装,调用方便。 存储过程会进行编译缓存,可以提升用户执行SQL语句集的速度。 系统管理员通过对执行某一存储过程的权限进行限制,能够实现对相应数据访问权限的限制,避免了非授权用户对数据的访问,保证了数据的安全。 为了处理SQL语句,存储过程分配一段内存区域来保存上下文。游标是指向上下文区域的句柄或指针。借助游标,存储过程可以控制上下文区域的变化。 支持6种异常信息级别方便客户对存储过程进行调试,支持设置断点和单步调试。存储过程调试是一种调试手段,可以在存储过程开发中,一步一步跟踪存储过程执行的流程,根据变量的值,找到错误的原因或者程序的bug,提高问题定位效率。 openGauss支持SQL标准中的函数及存储过程,增强了存储过程的易用性。

(10) 兼容PostgreSQL接口。

openGauss数据库兼容PSQL客户端,兼容PostgreSQL标准接口。

(11) 支持SQL hint。

openGauss数据库支持SQL hint(hint是SQL语句的注释,可以指导优化器选择人为指定的执行计划),影响执行计划生成,提升SQL查询性能。Plan Hint为用户提供了直接影响执行计划生成的手段,用户可以通过指定join顺序、join方法、Scan方法、结果行数等多个手段进行执行计划的调优,以提升查询性能。

(12)支持Copy接口容错机制。

openGauss数据库中,用户可以使用封装好的函数创建Copy错误表,并能在使用Copy From语句时指定容错选项。指定容错选项后,openGauss数据库在执行Copy From语句过程中不会因"部分解析"、"数据格式"、"字符集"等相关的报错中断事务,而是把这些报错信息记录至错误表中,从而使得Copy From的目标文件即使有少量数据错误也可以完成入库操作。用户随后可以在错误表中对相关的错误进行定位以及进一步排查。

Posted by enmotech at 4:35 PM | Permalink |

近期发表

  • openGauss 云安全技术 - December 3, 2021
  • MacOS Monterey在腾讯会议声音不起作用coreaudiod重置 - November 30, 2021
  • openGauss 分布式事务 - November 25, 2021
  • openGauss 数据库并发控制 - November 24, 2021
  • openGauss 数据库事务概览 - November 22, 2021
  • openGauss 数据库内存引擎 - November 19, 2021
  • openGauss 数据库列存储引擎 - November 18, 2021
  • 墨天轮国产数据库沙龙 | 胡彦军:华为GaussDB迁移工具解密 - November 17, 2021
  • 国产数据库沙龙 | 张晓庆:GoldenDB分布式数据库自动安装与备份恢复 - November 17, 2021
  • openGauss 数据库存储概览 - November 16, 2021


  • CopyRight © 2004 ~ 2012 eygle.com, All rights reserved.