GBASE 8A 管理员手册(1)基础管理

服务的启停

当GBase 8a安装完毕后,其中的gbase.server服务需要手动启动,之后, 每当开机和重新启动机器时,gbase.server服务都需要手动启动。如果用户在 使用中,需要手工进行GBase服务的启停操作,则要使用安装GBase 8a的用户 进行操作。具体命令如下:

A 启动命令
$ gbase.server start
> 停止命令
$ gbase.server stop
A 重新启动命令
$ gbase.server restart

修改数据库root用户的密码

在安装GBase 8a的用户下,可以进行GBase 8a的登录。
默认情况下,在进行GBase 8a的安装过程中,系统创建数据库超级帐号 root,并且可以为它设置初始密码,如果在这个安装过程中,用户将root的密 码设置为空,那么,用户还可以在首次登录GBase 8a后,为root帐号设置一 个安全密码。
示例如下:安装GBase 8a时,用户将root用户密码设置为空,此时,在 第一次登录GBase 8a时,可以继续为root用户设置密码。

$ gbase. -uroot
GBase client 8. 5. 1. 2 build 27952. Copyright (c) 2004-2013, GBase. All Rights
Reserved.
gbase> SET PASSWORD FOR root = PASSWORD(,H133%_h,);
Query OK, 0 rows affected
退出登录的命令为在gbase>提示符下,键入\q。
gbase> \q
Bye
修改root的□令后,重新登录GBase 8a。
$ gbase -uroot
Enter password:
GBase client 8.5.1.2 build 27952. Copyright (c) 2004-2013, GBase. All Rights
Reserved.
gbase >

DDL

数据库

CREATE DATABASE是用给定的名称来创建一个数据库。用户需要获得创建 数据库的权限,才可以使用CREATE DATABASE。
如果用户没有指定IF NOT EXISTS并且该数据库存在,则产生一个错误。

创建数据库
CREATE DATABASE test;
CREATE DATABASE IF NOT EXISTS test;
删除数据库
DROP DATABASE test;
DROP DATABASE IF EXISTS test;

用户可以通过CREATE TABLE命令在当前数据库创建一个指定名称的表。
GBase 8a支持两种表类型,普通表、和临时表。
表类型 特点
普通表 就是符合SQL标准, 使用CREATE TABLE创建的表。
临时表 使用TEMPORARY关键字,临时表被限制在当前连接 中,当连接关闭时,临时表会自动地删除。

普通表

GBase 8a支持可以通过下面的语法创建普通表:
CREATE TABLE [IF NOT EXISTS] [database_na^me. ] tbl_na^e
[(create_definition,...)] [table_options];
table_options:
[COMMENT ' comment_value']
删除普通表:
DROP TABLE [IF EXISTS] tbl_name;
创建普通表
CREATE TABLE t3(a int);
删除表
DROP TABLE t3;

临时表

GBase 8a支持临时表,可以通过下面的语法创建临时表:
CREATE TEMPORARY TABLE [IF NOT EXISTS] [database_name. ] tbl_name
[(create_definition,...)] [table_options];
table_options:
[COMMENT ' comment_value']
删除临时表:
DROP [TEMPORARY] TABLE [IF EXISTS] tbl_name;
临时表生命周期为会话级,当前会话连接结束后自动删除。
临时表支持普通表支持的所有相关操作,包括:DDL、DML、SHOW CREATE TABLE、DESC、SELECT及TEMPORARY TABLE和普通表之间的关联等操作。

视图

GBase 8a 禁止对视图进行 INSERT,DELETE,UPDATE 动作。
创建视图
CREATE VIEW v_t AS SELECT a,b FROM t;
CREATE OR REPLACE VIEW v_t AS SELECT b FROM t;
CREATE OR REPLACE VIEW v_t_1 AS SELECT a FROM t;
更改视图
ALTER VIEW v_t(a, b) AS SELECT * FROM t;
ALTER VIEW v_t(aa, bb) AS SELECT a,b FROM t;
删除视图
DROP VIEW IF EXISTS v_t, v_t_1;

存储过程和函数

创建存储过程或函数。
下面介绍创建自定义存储过程的语法,在GBase 8a里,我们为用户提供了 对存储过程的支持。
>	存储过程(Procedure):
CREATE PROCEDURE <proc_name'>([<parameter1'>[,	[,parameter_nll)
[characteristic ...]
下面介绍创建自定义函数的语法,在GBase 8a里,我们为用户提供了对 自定义函数的支持。
> 函数(Function):
CREATE FUNCTION <func_name~>([<parameterr>[,…][,parameter_n]])
RETURNS type
[characteristic ...]
〈函数定义〉
〈参数列表〉:
[IN | OUT | INOUT ] param_name type
而函数则没有[IN | OUT | INOUT ]标记。
type:
Any valid GBASE data type
characteristic:
LANGUAGE SQL
| [NOT] DETERMINISTIC
| { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
| SQL SECURITY { DEFINER | INVOKER }
| COMMENT 'string'
针对 CONTAINS SQL,NO SQL,READS SQL DATA,MODIFIES SQL DATA 的使 用,需要注意的是,虽然可以一次性全部指定,但仅最后一个出现的关键字为 有效的。
〈过程/函数定义〉:
这个语法参数是一系列的SQL语句的组合,其中包含一些数据操作以完成 一定的功能逻辑。
修改存储过程或函数
ALTER {PROCEDURE | FUNCTION} sp_name [characteristic ...]
characteristic:
{ CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
| SQL SECURITY { DEFINER | INVOKER }
| COMMENT 'string'
删除存储过程或函数
DROP {PROCEDURE | FUNCTION} [IF EXISTS] sp_name

哈希索引

使用哈希索引能提高等值精确查询的性能。创建哈希索引时需明确指明创 建哈希索引的列及该列所在的表。
哈希索引创建成功后,在数据存储介质上存放数据的位置会产生与索引相 关的文件。
哈希索引有两种类型,一种是全局索引,称为全局哈希索引,基于表中整 列建立索引;一种是局部索引,称局部哈希索引,基于表中第一个DC建立索引。
创建哈希索引后,基于索引列的等值查询的性能会提高,尤其是表中的数 据量非常大的情况,在小数据量的情况下,哈希索引对性能的提升效果不明显。

支持创建哈希索引的数据类型,见下表:
可创建索引的数据类型
|TINYINT|SAMLLINT|INT|BIGINT|FLOAT|DOUBLE
可创建索引的数据类型
|DECIMAL|CHAR|VARCHAR|DATE|DATETIME|TIME
创建全局哈希索引
CREATE INDEX IDX_T1_A ON T1(A) USING HASH GLOBAL;
创建局部哈希索引
CREATE INDEX IDX_T2_A ON T2(A) USING HASH LOCAL;
删除索引
DROP INDEX IDX_T1_A ON T1;
DROP INDEX IDX_T2_A ON T2;
使用限制说明:
>二进制类型的列不适合使用哈希索引;或者该列数据量较大,但 distinct值较少时,也不适合使用哈希索引。
> 创建索引时,只能指定单列,不能指定多列创建联合索引。
A 同一表上不能创建相同名称的哈希索引,同一表的同一列上能且只能 创建一个哈希索引。

DML

使用GBase 8a批量执行INSERT、UPDATE、DELETE等操作的性能,高于单 条执行这些操作。

INSERT

GBase 8a支持向表中插入数据。
INSERT [INTO] [database_name. ]tbl_name [(col_name,...)]
VALUES ({expr | DEFAULT},...),,..),...;
或
INSERT [INTO] [database_name. ]tbl_name [(col_name,...)]
SELECT ... FROM [database_name. ] tbl_na^e;
创建表t1和t2
CREATE TABLE t1(id int);
CREATE TABLE t2(id int);
示例:插入数据
gbase> INSERT INTO t1 VALUES(1),(2),(3),(4),(5),(6),(2),(3),(1);
Query OK, 9 rows affected
Records:	9 Duplicates:	0 Warnings:	0
gbase> INSERT INTO t2 SELECT * FROM t1;
Query OK, 9 rows affected
Records: 9 Duplicates: 0 Warnings: 0

UPDATE

GBase 8a支持更新表中数据。
语法:
UPDATE [database_name.]tbl_name
SET col_name1 = expr1 [, col_name2 = expr2 ...]
[WHERE where_definition]
创建表t1
CREATE TABLE t1(id int);
表t1中插入数据
INSERT INTO t1 VALUES(1),(2),(3),(4),(5),(6),(2),(3),(1);
示例:更新表中数据
gbase> UPDATE t1 SET t0.id = tO.id+1 WHERE t0.id > 1;
Query OK, 7 rows affected

DELETE

GBase 8a支持删除表中数据。
语法:
DELETE [FROM] [database_name. ]tbl_name [tbl_alias]
[WHERE where_definition]
创建表t1
CREATE TABLE t(a int);
示例1:标准删除语句。
gbase> INSERT INTO t VALUES(1),(2),(3),(4),(5);
gbase> DELETE FROM t WHERE a = 2;
Query OK, 1 row affected
示例2 :省略关键字FROM的删除。
gbase> INSERT INTO t VALUES(1),(2),(3),(4),(5);
gbase> DELETE t WHERE a = 2;
Query OK, 1 row affected
示例3:按照别名删除,同时省略掉FROM关键字。
gbase> INSERT INTO t VALUES(1),(2),(3),(4),(5);
gbase> DELETE t tt WHERE tt.a=2;
Query OK, 1 row affected

审计日志

审计日志最重要的作用,就是用于监控SQL执行性能,当一些SQL语句的 执行用时大于long_query_time设定值的时候,审计日志便将这些SQL语句记 录下来,方便用户针对这些执行效率低下的SQL语句进行分析,优化,改写, 从而提高SQL语句的执行效率。

审计日志记录的主要内容如下:
>thread_id:线程号,同 processlist 中的 ID;
>taskid:每个sql任务编号;
>start_time:开始执行时间;
>end_time:结束执行时间;
>user_host:登录的用户和IP,显示格式为: priv_user[user]@hostname[ip];
>user :用户名;
>host_ip:用户登录端IP地址;
>query_time:执行语句所用时间;
>rows :行数;
>db :执行语句所针对的数据库;
A	table_list:涉及表,格式:'<db>' .'<tb>'[,...];
>sql_text:记录执行用时大于long_query_time设定值的SQL语句;
A	sql_type: sql 类型,如 DDL、DML、DQL、OTHERS	;
A	sql_command: sql 命令类型,如 SELECT、UPDATE,INSERT,LOAD 等;
>algorithms:涉及的算子,比如 JOIN、WHERE、GROUP、HAVING 等;
>status: sql 执行状态,如 SUCCESS、FAILED、KILLED 等;
>conn_type:用户登录方式(CAPI、ODBC、JDBC、ADO.NET、STUDIO);
其中 sql_command 的取值范围为:INSERT、DELETE、UPDATE、LOAD、CREATE USER、CREATE DB、CREATE TABLE、CREATE VIEW、CREATE INDEX、CREATE PROCEDURE, CREATE FUNCTION、RENAME USER、ALTER DB、ALTER TABLE、ALTER PROCEDURE、 ALTER FUNCTION、ALTER EVENT、DROP USER、DROP DB、DROP TABLE、DROP VIEW、 DROP INDEX、DROP PROCEDURE、DROP FUNCTION、DROP EVENT、TRUNCATE、GRANT、 REVOKE、 SELECT 和 OTHERS。
algorithms 的取值范围为:START_WITH、CONNECT_BY、JOIN、WHERE、GROUP、 OLAP_GROUP、HAVING、OLAP_FUNC、DISTINCT、ORDER 和 LIMIT。若一个 SQL 涉 及多个算子,各算子之间用逗号分割。
目前,用户每次查看的审计日志为登录节点机器上的日志内容。

配置参数

可以使用如下配置方式:

>使用配置audit_log参数的方式开启或关闭审计日志。需要配置为全 局级变量(默认为0,即关闭审计日志)。
SET GLOBAL audit_log = 0;
或
SET GLOBAL audit_log = 1;
>配置long_query_time参数,决定执行时间超过多少时长的操作会被 记入审计日志(默认为10秒)。
SET long_query_time = 5;(当前会话生效)
或
SET GLOBAL long_query_time = 5 ;(如果将本参数设置为全局变量, 在本配置生效后,所有新建会话生效)
配置审计日志输出方式,必须设成表形式(即设为table,就能以表
形式输出审计日志)。
SET GLOBAL log_output = 'table';

存储方式

GBase 8a使用如下方式存储这些内容:
审计日志的信息存储在系统表gbase.audit_log中。

使用约束

审计日志用于记录所有的SQL操作,对于包含结果集行数的统计操作,只 涉及以下 4 种 DML 操作:SELECT、DELETE、INSERT 和 UPDATE。
清空audit_log时,需要使用TRUNCATE audit_log语句,一般情况下,建 议每2-3个月可以TRUNCATE 一次audit_log表,用于清除陈旧日志信息,避免 数据过多,影响日后的分析。

使用示例

示例1:使用系统表查看审计日志。
$ gbase -uroot -p
Enter password:
GBase client 8. 5. 1. 2 build 37185. Copyright (c) 2004-2013, GBase. All Rights Reserved.
gbase> SET GLOBAL audit_log = 1;
Query OK, 0 rows affected
gbase> SET long_query_time = 0;
Query OK, 0 rows affected
gbase> SET GLOBAL log_output = 'table';
Query OK, 0 rows affected
gbase> DROP USER tzt;
Query OK, 0 rows affected
gbase> DROP DATABASE test;
Query OK, 1 row affected
gbase> CREATE USER tzt identified by 'tzt';
Query OK, 0 rows affected
gbase> GRANT ALL ON *.* TO tzt@'%';
Query OK, 0 rows affected
gbase> CREATE DATABASE test;
Query OK, 1 row affected
gbase> USE test;
Query OK, 0 rows affected
gbase> CREATE TABLE t1(i int);
Query OK, 0 rows affected
gbase> INSERT INTO t1 VALUES (1),(2);
Query OK, 2 rows affected
Records:	2 Duplicates:	0 Warnings:	0
gbase> SELECT start_time,user_host,query_time,rows,LEFT(sql_text, 30), conn_type
FROM gbase.audit_log;
+	+	+
|	start_time	|	user_host	|
+	+	+

+	+	+-
■+	+-

10 rows in set gbase> INSERT INTO t1 SELECT * FROM t1;
Query OK,	2	rows affected
Records:	2	Duplicates: 0	Warnings: 0
gbase> UPDATE t1 SET i = 3;
Query OK,	4	rows affected
Rows matched: 4 Changed: 4 Warnings: 0
gbase> DELETE FROM t1;
Query OK, 4 rows affected
gbase> SELECT start_time,user_host,query_time,rows, LEFT(sql_text, 30), conn_type
FROM gbase.audit_log;
+	+	
| start_time	| user_host
+-

+-
■+	+-
| query_time	| rows | LEFT(sql_text, 30)
| conn_type |


|	00:00:00. 029832	|	2	|	(1)INSERT INTO t1 SELECT * FRO	| CAPI	|
|	00:00:00. 013553	|	4	|	(1)UPDATE t1 SET i = 3	| CAPI	|
|	00:00:00.009300	|	4	|	(1)DELETE FROM t1	| CAPI	|
+	+――		+_		-+			+
14 rows in set

上一篇:BAT Windows定时指定任务


下一篇:MySQL的DDL语言:1、库和表的管理(创建、修改、删除)