默认分类,运维管理
数据库管理、维护、故障处理等

GBase 8s数据库主键约束、唯一约束和唯一索引的区别

主键约束(PRIMARY KEY)

1) 主键用于唯一地标识表中的每一条记录,可以定义一列或多列为主键,一个表上仅只能有一个主键;
2) 不建议更新主键;
3) 主键列上没有任何两行具有相同值(即重复值),且不允许空(NULL);
4) 主健可作外健,唯一索引不可;

唯一性约束(UNIQUE)

1) 唯一性约束用来限制不受主键约束的列上的数据的唯一性,用于作为访问某行的可选手段,一个表上可以放置多个唯一性约束;
2) 只要唯一就可以更新;
3) 表中任意两行在指定列上都不允许有相同的值,但允许空(NULL);






阅读全文»

GBase 8s 数据库中count(字段) ,count(主键) ,count(1)和count(*)的区别

首先要弄清楚 count() 的语义。count() 是一个聚合函数,对于返回的结果集,一行行地判断,如果 count 函数的参数不是 NULL,累计值就加 1,否则不加。最后返回累计值。
所以,count(*)、count(1)和count(主键) 都表示返回满足条件的结果集的总行数;而 count(字段),则表示返回满足条件的数据行里面,参数 "字段" 不为 NULL 的总个数。

以测试表为例,表内加载了10万行记录,其中允许null值的字段name存在3个null值;

create table tabcount 
  (
    id integer,
    name varchar(40),
    age integer not null ,
    primary key (id) 
  );

阅读全文»

统信UOS20(1021a)安装GBase 8s数据库问题记录

统信UOS20操作系统(1021a) AMD64 版本安装GBase 8s V8.8 3.0.0_1版数据库问题记录如下:

1, libjvm.so preloadLibrary(/tmp/install.dir.33990/Linux/resource/jre/jre/lib/amd64/libjava.so): libnsl.so.1: 无法打开共享对象文件: 没有那个文件或目录

解决方法及步骤:
安装libnsl

yum install libnsl -y

2, One or more prerequisite system libraries are not installed on your computer. Install libncurses.so.5 and then restart the installation program.

解决方法及步骤:
1) 安装ncurses-devel

yum install ncurses-devel

2) 在/usr/lib64目录下创建链接文件,执行

cd /usr/lib64
ln -s libncurses.so.6.1 libncurses.so.5
ln -s libtinfo.so.6.1 libtinfo.so.5

GBase 8s 使用sqltrace跟踪sql性能

SQLTrace用于跟踪执行sql的性能,可用于定位性能较差的sql,从而进行优化。

Example
打开sqltrace跟踪15000条sql,所需内存:15000*4k=60MB

dbaccess sysadmin - <<!
EXECUTE FUNCTION task("set sql tracing on","15000","4","high","global");
!

查看执行耗时较长sql:

dbaccess sysmaster -<<!
unload to sql.unl 
select sql_maxtime,sql_avgtime,sql_statement 
from syssqltrace order by sql_maxtime desc;
!

查看当前路径下生成的sql.unl文件


阅读全文»

GBase 8s 设置数据文件自动扩展

根据onstat -d 输出查看需要扩展的数据文件号。

示例:chunk号为8的数据文件打开自动扩展

dbaccess sysadmin -<<!
EXECUTE FUNCTION task ("modify chunk extendable on", 8);
!

示例:chunk号为8的数据文件关闭自动扩展

dbaccess sysadmin -<<!
EXECUTE FUNCTION task ("modify chunk extendable off", 8);
!

GBase 8s 使用dblink访问远端数据库实例

使用场景:

gbase01实例需要访问gbase02实例中的数据。
sql语法:

select * from dbname@gbase02:tabname;

方法一、配置信任

1、配置目标服务器/etc/hosts.equiv信任
如node1(192.168.17.101)上的数据库实例(gbase01) 访问node2(192.168.17.102)上的数据库实例(gbase02)

2、在node1数据库实例gbase01的sqlhosts文件中增加gbase02的实例信息:

echo "gbase02         onsoctcp        192.168.17.102      9088">>$GBASEDBTSQLHOSTS


阅读全文»

GBase 8s常见锁错误原因及处理办法

-243 Could not position within a table table-name.

错误原因:不能在表的数据行上加锁,该行数据已被锁
示例:
session1

dbaccess testdb -                    
drop table if exists t;
create table t(col1 int,col2 char(100));
insert into t select tabid,tabname from systables;        
begin;
delete from t where col1=1;        


阅读全文»

Windows下Python3通过DbtPy连接到GBase 8s数据库

示例使用的操作系统:Win 7 64bit
软件需求:Python 3.7.9

1,安装CSDK,设置环境变量

可从以下地址下载:

https://gbasedbt.com/odbc/GBase8s_3.0-Win64-ODBC-Driver.zip

免安装CSDK版本。
解压,生成的gbase8s-odbc-driver放置于D:\目录下。
在我的电脑->系统属性->高级->环境变量 中,增加环境变量GBASEDBTDIR 指向D:\gbase8s-odbc-driver,Path中增加%GBASEDBTDIR%\bin;




阅读全文»