-
操作步骤 登录SAP S/4HANA主备节点,修改其/etc/hosts文件。 将ascsha对应的主节点物理IP改成主节点的虚拟IP地址; 将ersha对应的备节点物理IP改成备节点的虚拟IP地址; 将hanaha对应的SAP HANA主节点的物理IP改成SAP HANA节点的虚拟IP地址。 修改之前的hosts文件如下: 将ascsha、ersha以及hanaha对应的物理IP改成相对应的虚拟IP地址。 ascsha为AS
CS 主节点示例
虚拟主机 名,ersha为ASCS备节点示例虚拟主机名,虚拟机主机名可自定义。 登录SAP S/4HANA备节点,将其/etc/hosts文件修改成与主节点一样。
-
操作步骤 登录SAP S/4HANA主节点“s4001”启动SWPM安装,选择安装ASCS到虚拟主机ascsha。 在浏览器中输入:https://s4001:4237/sapinst/docs/index.html,然后root用户以及密码登录进行ASCS的安装。 选择ASCS Instance,然后单击Next。 输入已经规划好的SID和sapmnt路径。 取消FQDN的勾选。 设置密码。 保持默认。 选择文件所在的目录。 输入密码。 安装之前的规划填写ASCS Instance Number与ASCS Host Name(此处填写主节点的虚拟主机名称)。 保持默认。 保持默认。 保持默认。 确认参数。 开始安装。
-
注意事项 使用ROLLBACK TO SAVEPOINT回滚到一个保存点。使用RELEASE SAVEPOINT删除一个保存点,但是保留该保存点建立后执行的命令的效果。 保存点只能在一个事务块里面建立。在一个事务里面可以定义多个保存点。 由于节点故障或者通信故障引起的节点线程或进程退出导致的报错,以及由于COPY FROM操作中源数据与目标表的表结构不一致导致的报错,均不能正常回滚到保存点之前,而是整个事务回滚。 SQL标准要求,使用SAVEPOINT建立一个同名保存点时,需要自动删除前面同名保存点。在
GaussDB数据库 里,将保留旧的保存点,但是在回滚或者释放的时候,只使用最近的保存点。释放了新的保存点将导致旧的再次成为ROLLBACK TO SAVEPOINT和RELEASE SAVEPOINT可以访问的保存点。除此之外,SAVEPOINT是完全符合SQL标准的。
-
示例 --创建一个新表。
gaussdb=# CREATE TABLE table1(a int);
--开启事务。
gaussdb=# START TRANSACTION;
--插入数据。
gaussdb=# INSERT INTO table1 VALUES (1);
--建立保存点。
gaussdb=# SAVEPOINT my_savepoint;
--插入数据。
gaussdb=# INSERT INTO table1 VALUES (2);
--回滚保存点。
gaussdb=# ROLLBACK TO SAVEPOINT my_savepoint;
--插入数据。
gaussdb=# INSERT INTO table1 VALUES (3);
--提交事务。
gaussdb=# COMMIT;
--查询表的内容,会同时看到1和3,不能看到2,因为2被回滚。
gaussdb=# SELECT * FROM table1;
--删除表。
gaussdb=# DROP TABLE table1;
-
参数说明 LOCAL 声明该命令只在当前事务中有效。 SESSION 声明这个命令只对当前会话起作用。 SET SESSION TRANSACTION语句需要在sql_compatibility = 'B'场景下,设置GUC参数b_format_behavior_compat_options为set_session_transaction后生效,作用等同于SET SESSION CHARACTERIS
TICS AS TRANSACTION语句。 GLOBAL 声明这个命令对当前数据库的全局会话生效。 作用范围:在sql_compatibility = 'B'场景下生效。对后续连接的会话生效。 SESSION CHARACTERISTICS 声明这个命令只对当前会话起作用。 ISOLATION LEVEL 指定事务隔离级别,该参数决定当一个事务中存在其他并发运行事务时能够看到什么数据。 在事务中第一个数据修改语句(SELECT、INSERT、DELETE、UPDATE、FETCH、COPY)执行之后,当前事务的隔离级别就不能再次设置。 事务块内SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL对当前事务不生效,需要COMMIT之后才生效。 取值范围: READ COMMITTED:读已提交隔离级别,只能读到已经提交的数据,而不会读到未提交的数据。这是缺省值。 READ UNCOMMITTED:读未提交隔离级别,指定后的行为和READ COMMITTED行为一致。 REPEATABLE READ:可重复读隔离级别,仅仅能看到事务开始之前提交的数据,不能看到未提交的数据,以及在事务执行期间由其它并发事务提交的修改。 SERIALIZABLE:
GaussDB 目前功能上不支持此隔离级别,等价于REPEATABLE READ。 READ WRITE | READ ONLY 指定事务访问模式(读/写或者只读)。
-
示例 --创建并切换至测试数据库。
gaussdb=# CREATE DATABASE my_compatible_db DBCOMPATIBILITY 'B';
gaussdb=# \c my_compatible_db
--开启一个事务,设置事务的隔离级别为READ COMMITTED,访问模式为READ ONLY。
my_compatible_db=# START TRANSACTION;
my_compatible_db=# SET LOCAL TRANSACTION ISOLATION LEVEL READ COMMITTED READ ONLY;
my_compatible_db=# COMMIT;
--设置当前会话的事务隔离级别、读写模式。
--在sql_compatibility = 'B'场景下,b_format_behavior_compat_options设置为set_session_transaction。
my_compatible_db=# SET b_format_behavior_compat_options TO set_session_transaction;
my_compatible_db=# SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED READ ONLY;
--给sql_compatibility = 'B'的数据库设置全局会话的事务隔离级别、读写模式(当前只能在sql_compatibility = 'B'场景下)。
gaussdb=# SET GLOBAL TRANSACTION ISOLATION LEVEL READ COMMITTED READ ONLY;
--切换回初始数据库,并删除测试数据库。请用真实的数据库名替换postgres。
my_compatible_db=# \c postgres
gaussdb=# DROP DATABASE my_compatible_db;
-
语法格式 设置事务的隔离级别、读写模式。 { SET [ LOCAL | SESSION | GLOBAL ] TRANSACTION|SET SESSION CHARACTERISTICS AS TRANSACTION }
{ ISOLATION LEVEL { READ COMMITTED | READ UNCOMMITTED | SERIALIZABLE | REPEATABLE READ }
| { READ WRITE | READ ONLY } };
-
示例 --创建数据表t1。
gaussdb=# CREATE TABLE t1 (id int, name varchar);
--插入数据。
gaussdb=# INSERT INTO t1 VALUES (1, 'zhangsan');
gaussdb=# INSERT INTO t1 VALUES (2, 'lisi');
gaussdb=# INSERT INTO t1 VALUES (3, 'wangwu');
gaussdb=# INSERT INTO t1 VALUES (4, 'lisa');
gaussdb=# INSERT INTO t1 VALUES (5, 'jack');
--创建快照。
gaussdb=# CREATE SNAPSHOT s1@1.0 comment is 'first version' AS SELECT * FROM t1;
--迭代创建快照。
gaussdb=# CREATE SNAPSHOT s1@2.0 FROM @1.0 comment is 'inherits from @1.0' USING (INSERT VALUES(6, 'john'), (7, 'tim'); DELETE WHERE id = 1);
--查看快照内容。
gaussdb=# SELECT * FROM DB4AISHOT(s1@1.0);
id | name
----+----------
1 | zhangsan
2 | lisi
3 | wangwu
4 | lisa
5 | jack
(5 rows)
gaussdb=# SELECT * FROM DB4AISHOT(s1@2.0);
id | name
----+--------
2 | lisi
3 | wangwu
4 | lisa
5 | jack
6 | john
7 | tim
(6 rows)
--快照采样。
gaussdb=# SAMPLE SNAPSHOT s1@2.0 stratify by name as nick at ratio .5;
--删除快照。
gaussdb=# PURGE SNAPSHOT s1@2.0;
gaussdb=# PURGE SNAPSHOT s1nick@2.0;
gaussdb=# PURGE SNAPSHOT s1@1.0;
--删除表格t1。
gaussdb=# DROP TABLE t1;
-
参数说明 qualified_name 创建snapshot的名称。 取值范围:字符串,需要符合标识符命名规范。 version (可省略)snapshot的版本号,当省略设置。系统会自动顺延编号。 取值范围:字符串,数字编号配合分隔符。 ident 用于标定快照后缀编号(或者大版本) 取值范围:整数(int),数字编号。 sconst 用浮点数标记版本号,特性会在后台中将用GUC参数db4ai_snapshot_version_separator指定的分隔符代替小数点 取值范围:浮点型(float)。 comment 指定添加的评论内容。 取值范围:字符串,需要符合标识符命名规范。 alias 对当前对象取的别名。 取值范围:字符串,需要符合标识符命名规范。 attr_list 目标对象的list集合。 取值范围:字符串,需要符合标识符命名规范。 label 采样数据列别名。 取值范围:字符串,需要符合标识符命名规范。 num 指定的比例值。 取值范围:数字。
-
注意事项 本特性GUC参数db4ai_snapshot_mode,快照存储模型分为MSS和
CSS 两种;GUC参数db4ai_snapshot_version_delimiter,用于设定版本分隔符,仅接受设定单字节参数值,默认为“@”;GUC参数db4ai_snapshot_version_separator,用于设定子版本分隔符,仅接受设定单字节参数值,默认为“.”。 当快照选用增量存储方式时,各个快照中具有依赖关系。删除快照需要按照依赖顺序进行删除。 snapshot特性用于团队不同成员间维护数据,涉及管理员和普通用户之间的数据转写。所以在三权分立(enableSeparationOfDuty=ON)等状态下,数据库不支持snapshot功能特性。 当需要稳定可用的快照用于AI训练等任务时,用户需要将快照发布。
-
参数说明 SESSION 声明这个命令只对当前会话起作用,此参数为缺省值。 LOCAL 声明该命令只在当前事务中有效。 role_name 角色名。 取值范围:字符串,数据库中已存在的用户名。 password 角色的密码。要求符合密码的命名规则。 使用密文密码限制如下: 管理员用户不能使用密文密码切换到其他管理员用户,只能向权限更低用户切换。 使用密文密码通常用于gs_dump、gs_dumpall导出场景,其他场景不建议直接使用密文密码。 RESET ROLE 用于重置当前用户标识。
-
注意事项 当前会话的用户必须是指定的rolename角色的成员,当系统管理员可以选择任何角色。 使用这条命令,它可能会增加一个用户的权限,也可能会限制一个用户的权限。如果会话用户的角色有INHERITS属性,则它自动拥有它能SET ROLE变成的角色的所有权限;在这种情况下,SET ROLE实际上是删除了所有直接赋予会话用户的权限,以及它的所属角色的权限,只剩下指定角色的权限。另一方面,如果会话用户的角色有NOINHERITS属性,SET ROLE删除直接赋予会话用户的权限,而获取指定角色的权限。
-
参数说明 new_table new_table指定新建表的名称。 UN
LOG GED 指定表为非日志表。非日志表中写入的数据不会被写入到预写日志中,比普通表快很多。但是,非日志表在冲突或异常关机后会被自动删截,非日志表中的内容也不会被复制到备用服务器中,在该类表中创建的索引也不会被自动记录。 使用场景:非日志表不能保证数据的安全性,用户应该在确保数据已经做好备份的前提下使用,例如系统升级时进行数据的备份。 故障处理:当异常关机等操作导致非日志表上的索引发生数据丢失时,用户应该对发生错误的索引进行重建。 GLOBAL | LOCAL 创建临时表时可以在TEMP或TEMPORARY前指定GLOBAL或LOCAL关键字。如果指定GLOBAL关键字,GaussDB会创建全局临时表,否则GaussDB会创建本地临时表。 TEMPORARY | TEMP 如果指定TEMP或TEMPORARY关键字,则创建的表为临时表。临时表分为全局临时表和本地临时表两种类型。创建临时表时如果指定GLOBAL关键字则为全局临时表,否则为本地临时表。 全局临时表的元数据对所有会话可见,会话结束后元数据继续存在。会话与会话之间的用户数据、索引和统计信息相互隔离,每个会话只能看到和更改自己提交的数据。全局临时表有两种模式:一种是基于会话级别的(ON COMMIT PRESERVE ROWS),当会话结束时自动清空用户数据;一种是基于事务级别的(ON COMMIT DELETE ROWS),当执行commit或rollback时自动清空用户数据。建表时如果没有指定ON COMMIT选项,则缺省为会话级别。与本地临时表不同,全局临时表建表时可以指定非pg_temp_开头的schema。 本地临时表只在当前会话可见,本会话结束后会自动删除。因此,在除当前会话连接的数据库节点故障时,仍然可以在当前会话上创建和使用临时表。由于临时表只在当前会话创建,对于涉及对临时表操作的DDL语句,会产生DDL失败的报错。因此,建议DDL语句中不要对临时表进行操作。TEMP和TEMPORARY等价。 本地临时表通过每个会话独立的以pg_temp_开头的schema来保证只对当前会话可见,因此,不建议用户在日常操作中手动删除以pg_temp_、pg_toast_temp_开头的schema。 如果建表时不指定TEMPORARY/TEMP关键字,而指定表的schema为当前会话的pg_temp_开头的schema,则此表会被创建为临时表。 如果其它会话正在使用全局临时表或索引,则无法对其执行ALTER/DROP操作。 全局临时表的DDL只会影响当前会话的用户数据和索引。例如truncate、reindex、analyze只对当前会话有效。 SELECT INTO的其它参数说明请参见参数说明。
-
示例 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 --建表并插入数据。
gaussdb=# CREATE TABLE tbl_person (
id integer,
name varchar(20),
gender varchar(5) CHECK(gender = '男' or gender = '女')
);
gaussdb=# INSERT INTO tbl_person VALUES (1, 'Bob', '男'),(2, 'Anne', '女'),(3, 'Jack', '男'),(4, 'Danny', '男'),(5, 'Alice', '女'),(6, 'Susan', '女');
--将person表中所有男生的信息加入到新表中
gaussdb=# SELECT * INTO tbl_man FROM tbl_person WHERE gender = '男';
--查询tbl_man数据。
gaussdb=# SELECT * FROM tbl_man;
id | name | gender
----+-------+-----
1 | Bob | 男
3 | Jack | 男
4 | Danny | 男
(3 rows)
--删除表。
gaussdb=# DROP TABLE tbl_person, tbl_man;
-
语法格式 [ WITH [ RECURSIVE ] with_query [, ...] ]
SELECT [ ALL | DISTINCT [ ON ( expression [, ...] ) ] ]
{ * | {expression [ [ AS ] output_name ]} [, ...] }
INTO [ [ GLOBAL | LOCAL ] [ TEMPORARY | TEMP ] | UNLOGGED ] [ TABLE ] new_table
[ FROM from_item [, ...] ]
[ WHERE condition ]
[ GROUP BY expression [, ...] ]
[ HAVING condition [, ...] ]
[ WINDOW {window_name AS ( window_definition )} [, ...] ]
[ { UNION | INTERSECT | EXCEPT | MINUS } [ ALL | DISTINCT ] select ]
[ ORDER BY {expression [ [ ASC | DESC | USING operator ] | nlssort_expression_clause ] [ NULLS { FIRST | LAST } ]} [, ...] ]
[ LIMIT { count | ALL } ]
[ OFFSET start [ ROW | ROWS ] ]
[ FETCH { FIRST | NEXT } [ count ] { ROW | ROWS } ONLY ]
[ {FOR { UPDATE | SHARE } [ OF table_name [, ...] ] [ NOWAIT |WAIT N]} [...] ];