在创建SinoDB数据库时需要注意以下几点:
一、建库注意事项:
1. 选择合适的数据库名称
-
数据库名称对于数据库服务器实例必须是唯一的
-
最多128个字符;
-
合法的名字包括:
字母:A 至 Z, a 至 z
数字:0 至 9
下划线 (_)
2. 确定数据库日志模式
数据库日志用来记录内存中逻辑日志缓存区中的事务信息,然后刷新逻辑日志缓冲区至磁盘上的逻辑日志文件中。我们需要为数据库选择合适的日志模式。有以下4种类型的日志模式:
①No Logging
-
UPDATE、 INSERT、 DELETE 记录不会写入逻辑日志;
-
DDL操作与数据库管理活动仍然会写入逻辑日志;
-
不支持事务。
②Unbuffered Logging
- 所有语句都会写入逻辑日志,并且通过COMMIT WORK语句随后刷新到磁盘上;
- 由于每一次提交事务都会导致缓冲区被刷新到磁盘上,所以增加了磁盘I/O。
③Buffered Logging
- 所有语句都会写入逻辑日志,逻辑日志缓冲区变满时,内存中的逻辑日志才会被刷新到磁盘中的逻辑日志中。
- 优点是减少执行的磁盘I/O数量,提高数据库性能。
- 缺点是万一系统崩溃,逻辑日志缓冲内的所有信息都无法写入磁盘中,会造成数据丢失。
④MODE ANSI
- MODE ANSI 数据库总是使用unbuffered logging且日志不能被禁用。
- 所有 SQL 语句都暗含在事务中,所以可以不用写BEGIN WORK;
- 所有者命名是强制性的(必须完整写informix.table);
- MODE ANSI 数据库的缺省隔离级别是repeatable read,会影响并行访问数据的性能;
- 缺省表和同义词特权不会授予用户 PUBLIC;
- 将数据库设置为 ANSI模式后,就不能再转换为其他模式。
3. 数据库所在的dbspace
当创建一个数据库时,需要为数据库指定一个 dbspace。这个 dbspace 也是数据库中其他表的缺省 dbspace。 如果没有指定数据库dbspace,数据库则默认建在root dbspace中,将不利于数据库的管理,也会影响数据库实例的性能。
4. 数据库使用的字符集
在建库之前,需要确定数据库所采用的字符集。SinoDB数据库默认的字符集为en_US.8859-1。在创建数据库之前,先通过环境变量设置数据库字符集,再进行建库操作:
export DB_LOCALE=en_US.8859-1
export CLIENT_LOCALE=en_US.8859-1
二、建库示例:
- 在 dbspace db_dbs 中创建一个no logging数据库
create database db in db_dbs;
- 在 dbspace db_dbs 中创建unbuffered logging数据库
create database db in db_dbs with log;
- 在 dbspace db_dbs 中创建buffered logging数据库
create database db in db_dbs with buffered log;
- 在 dbspace db_dbs 中创建MODE ANSI数据库
create database db in db_dbs with log mode ansi;
三、更改数据库的日志模式
可以使用 ondblog 或 ontape 来添加或更改日志记录。然后使用 ON-Bar 或 ontape 来备份数据。
1. ontape更改数据库日志模式
- 将数据库db转为no logging模式,创建0级备份
ontape –s –L 0 –N db
- 将数据库db转为unbuffered logging模式,创建0级备份
ontape –s –L 0 –U db
- 将数据库db转为buffered logging模式,创建0级备份
ontape –s –L 0 –B db
*将数据库db转为MODE ANSI模式,创建0级备份
ontape –s –L 0 –A db
2. ondblog更改数据库日志模式
使用ondblog更改数据库模式,需要在0级备份后才生效。
- 将数据库db转为no logging模式
ondblog nolog db
- 将数据库db转为unbuffered logging模式
ondblog unbuf db
- 将数据库db转为buffered logging模式
ondblog buf db
*将数据库db转为MODE ANSI模式
ondblog ansi db
四、sysmaster表:sysdatabases与sysdbslocale
1. sysdatabase
sysdatabases 表会为每一个创建的数据库保存一行信息,可以该表来查看数据库的日志模式,是否大小写敏感等信息。
[informix@vm84145 ~]$ dbaccess sysmaster -
Database selected.
> select * from sysmaster:sysdatabases;
name sysmaster
partnum 1048580
owner informix
created 01/31/2023
is_logging 1
is_buff_log 0
is_ansi 0
is_nls 0
is_case_insens 0
flags -12279
name testdb02
partnum 9437197
owner informix
created 03/27/2023
is_logging 1
is_buff_log 0
is_ansi 0
is_nls 0
is_case_insens 0
flags -12287
name sysuser
partnum 1048951
owner informix
created 02/14/2022
is_logging 1
is_buff_log 0
is_ansi 0
is_nls 0
is_case_insens 0
flags -12255
name sysadmin
partnum 1048694
owner informix
created 02/14/2022
is_logging 1
is_buff_log 0
is_ansi 0
is_nls 0
is_case_insens 0
flags -12255
name testdb
partnum 9437696
owner informix
created 06/16/2022
is_logging 1
is_buff_log 1
is_ansi 0
is_nls 0
is_case_insens 0
flags -12285
name testdb3
partnum 9437449
owner informix
created 10/18/2022
is_logging 1
is_buff_log 0
is_ansi 0
is_nls 0
is_case_insens 0
flags -12287
name sysutils
partnum 1049126
owner informix
created 01/31/2023
is_logging 1
is_buff_log 0
is_ansi 0
is_nls 0
is_case_insens 0
flags -12255
2. sysdbslocale
sysdbslocale 表保存每个数据库的字符集信息。
> select * from sysdbslocale;
dbs_dbsname sysmaster
dbs_collate en_US.819
dbs_dbsname testdb02
dbs_collate zh_CN.57372
dbs_dbsname sysuser
dbs_collate en_US.819
dbs_dbsname sysadmin
dbs_collate en_US.819
dbs_dbsname testdb
dbs_collate zh_CN.57372
dbs_dbsname testdb3
dbs_collate en_US.819
dbs_dbsname sysutils
dbs_collate en_US.819