达梦云文档-单机部署
1、安装最好在当前用户安装,好多都是被官方手册误导“新建用户组 dinstall,新建用户 dmdba”安装,会带来后续权限的问题。
2、使用
1、修改用户资源限制
//执行以下命令,修改 dmdba 用户资源限制:
vim /etc/security/limits.conf
//文件末尾添加如下内容:(没创建用户的,前面不要dmdba)
dmdba soft core unlimited
dmdba hard core unlimited
dmdba soft nofile 65536
dmdba hard nofile 65536
dmdba soft nproc 65536
dmdba hard nproc 65536
dmdba soft stack 65536
dmdba hard stack 65536
2、安装
运行安装程序安装
3、添加用户环境变量
//执行以下命令,修改 dmdba 用户环境变量:
vi /home/dmdba/.bash_profile
//文件末尾添加如下内容:
export DM_HOME=/dm8
export PATH=$PATH:$DM_HOME/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$DM_HOME/bin
4、防火墙设置
运行环境应该对特定客户端开放数据库监听端口,并修改 DM 数据库默认的 5236 监听端口。
./coufugure
./configure --prefix=/usr/local/unixODBC
./configure --prefix=/usr/local/unixODBC --includedir=/usr/include --libdir=/usr/lib --bindir=/usr/bin --sysconfdir=/etc --build=i686-pc-linux
./configure --prefix=/usr/local/unixODBC --enable-gui=no --host=arm-linux
make
sudo make install
isql -v dm #查看结果详细信息
isql -v dm SYSDBA SYSDBA
odbcinst -j #查看当前实际的odbc.ini、odbcinst.ini位置
odbc_config --odbcini #查看odbc配置文件中指定的ini文件位置
odbc_config --odbcinstini
export ODBCINI=/usr/local/etc/odbc.ini #指定ini文件位置
export ODBCSYSINI=/usr/local/etc
/etc/ld.so.config中加入libodbc.so目录、libdodbc.so #找到库,v10中LD_LIBRARY失效
1、isql出现Could not SQLConnect
isql -v 查看具体的信息为:Unable to connect to data source
原因有三个:第一个是odbcinst.ini和odbc.ini中数据库驱动的名字不一致(行首、行尾不能有空格)
第二个就是 odbcinst -j 和 odbc_config --odbcini 中的位置不一致
第三个就是没有找到 libodbc.so,需设置库路径
第四个 odbc.ini、odbcinst.ini 文件需要777权限
解决方法:1、库驱动名称一致;
2、设置环境变量ODBCINI、ODBCSYSINI;
3、ld.so.config中加入 libodbc.so 库目录
Linux下ODBC安装配置
1、运行 ODBCConfig 程序(在 /usr/bin 下)
2、添加驱动
Name:数据库驱动的名称
Description:数据库驱动的描述
Driver :数据库驱动程序的完整路径
Setup :数据库驱动安装程序的完整路径
下面是常见数据库的驱动程序的文件名称:
数据库 数据库驱动程序 数据库驱动安装程序
TXT libodbctxt.so libodbctxtS.so
NNTP libnn.so libodbcnnS.so
MiniSQL libodbcmini.so libodbcminiS.so
PostgreSQL libodbcpsql.so libodbcpsqlS.so
MySQL 注释 libodbcmyS.so
Sybase/MS SQL 注释 libtdsS.so
Oracle 注释 liboraodbcS.so
达梦 libdodbc.so 无
3、创建 DSN
DSN 分为 User DSN 、System DSN、File DSN 三种。一般用 System DSN 。
4、使用 DataManager 程序浏览数据库
运行 DataManager 程序之后就可以查看 Drivers 、 System DSN 和 User DSN 这几项内容,,在浏览数据库的时候,可以在右面的 SQL 栏中输入 SQL 语句,然后点击人形按钮就可以运行 SQL 语句,运行结果会在 Results 一栏中显示出来,具体情况可以见下图:
5、isql验证
《达梦云文档》配置ODBC
中标麒麟+QT+达梦数据库
odbcinst -j
isql DSN [UID [PWD]] [options]
DSN:数据源名称
UID:用户ID
PWD:用户密码
Options: -v
isql DM7
1、Can’t open lib ‘/dm7/bin/libdodbc.so’ : file not found的解决
(1)LD_LIBRARY_PATH
上面的例子中多是修改/etc/profile、~/.bash_profile、~.bash等,这也确实起作用,但也有例外,在某国产操作系统v10上,LD_LIBRARY_PATH在/etc/profile、~/.bash_profile里的配置会在进入~.bash后给清空了,若在~.bash里设置LD_LIBRARY_PATH则双击运行程序找不到lidodbc.so。(只清空了LD_LIBRARY_PATH,PATH没清,两个最原始的都有个":",导致添加新路径只能在前面加)
(2)ld.so.conf
最保险的方法是:将路径加入到 ld.so.conf
vim /etc/ld.so.conf
//在其中直接加入路径,注意路径前不要加include
/home/ppp/dm8/bin
//生效
sudo ldconfig /etc/ld.so.conf
suo ldconfig
(3)在/usr/lib或/usr/local/lib中创建链接
//后面的链到前面
ln -s /home/ppp/dm8/bin/libodbc.so /usr/bin/libodbc.so
//pro文件中加入sql模块
QT += sql
//加入头文件
#include
#include
//连接查询
qDebug()<<QSqlDatabase::drivers();
QSqlDatabase m_db = QSqlDatabase::addDatabase("QODBC");
m_db.setHostName("192.168.1.111");
m_db.setPort(5236);
m_db.setDatabaseName("DM");
m_db.setUserName("SYSDBM");
m_db.setPassword("dma123");
if (m_db.open())
{
qDebug() << "DM connect success!";
}
else
{
qDebug() << "DM connect failed!" << m_db.lastError().text();
return 0;
}
QString sql = "select * from “mod”.“test” "; //mod是模式名,test是表名
QSqlQuery query(sql);
while(query.next())
{
//逐列获取数据
QString col1 = query.value(0).toString();//query.value("NAME").toString();
QString col2 = query.value(1).toString();
int col3 = query.value(2).toInt();
}
m_db.close(); //关闭连接
如何在QT中编译数据库驱动
解决:自己编译ocbc模块
下载源码:https://download.qt.io/archive/qt/5.12/
1、找到自己对应的qt版本下载源码。
2、进入odbc源码目录:./qtbase/src/plugins/sqldrivers/odbc,编译odbc驱动
~/Qt5.9.7/5.9.7/gcc_64/bin/qmake "INCLUDEPATH+=/usr/local/unixODBC/include" "LIBS+=-L/usr/local/unixODBC/lib -lodbc" odbc.pro
make
3、复制 libqsqlodbc.so 到Qt文件夹
cd …/plugins/sqldrivers/
cp libqsqlodbc.so ~/Qt5.9.7/5.9.7/gcc_64/plugins/sqldrivers
4、嵌入式
将生成libqsqlodbc.so库文件,拷贝到ARM板子里。还需要拷贝/usr/local/unixODBC-arm/bin目录下面的libodbcinst.so、libodbcinst.so.2、libodbcinst.so.2.0.0、libodbc.so、libodbc.so.2、libodbc.so.2.0.0 六个文件到ARM板里。
1、总条数
select count(1) 、select count(*) 、select count(字段)的区别、及性能
select count(*) from test.TABLE_2;
2、分页
3、子查询
4、所有表
select * from all_tables;
select * from all_tables where tablespace_name='GGTABLES';
select * from all_tables where owner=`TEST';
5、表的所有字段(列名)
select * from all_tab_columns;
select * from all_tab_columns where owner='test' and table_name='TABLE_2';
6、数据库所有对象
数据库表syscolumns 各个字段含义
系统对象表 Sysobjects 和 SysColumns 表的一些知识
达梦数据库获取主外键约束信息
all_tables、 all_tab_columns、 all_constraints、
dba_constraints、dba_cons_columns、
SYSDBA.SYSTABLES B,
SYSDBA.SYSCONSTRAINTS A,
SYSDBA.SYSINDEXES C,
SYSDBA.SYSINDEXKEYS D,
SYSDBA.SYSCOLUMNS E,
SYSDBA.SYSSCHEMAS U
select * from sys.sysobjects;
7、查询所有自增列
达梦查询所有表、所有字段、主键、自增
//设置可修改自增
set IDENTITY_INSERT TEST.TABLE_2 ON;
--查询所有自增列
select * from sys.syscolumns a where a.INFO2 & 0x01 = 0x01;
select * from sys.syscolumns where INFO2=1; --查出自增列名、ID
select * from sys.sysobjects where ID="234" --根据ID查出表名
--下面是综合的
select b.table_name,a.name COL_NAME from SYS.SYSCOLUMNS a,all_tables b,sys.sysobjects c where a.INFO2 & 0x01 = 0x01 and a.id=c.id and c.name= b.table_name
select b.table_name,a.name COL_NAME from SYS.SYSCOLUMNS a,all_tables b,sys.sysobjects c where a.INFO2 & 0x01 = 0x01 and a.id=c.id and c.name= b.table_name and TABLESPACE_NAME='GGTABLES'
8、查询主键唯一性
达梦数据库表字段主键、唯一性、非空设置与反设置
9、查询约束
select * from all_constraints where table_name='TABLE_2'; --查看某张表所有约束
select * from dba_cons_columns where CONSTRAINT_NAME='CONS134219250' --查此约束对应的表名、列名
SELECT * FROM ALL_CONSTRAINTS WHERE CONSTRAINT_TYPE='P'; --查看所有主键约束
SELECT DISTINCT CONSTRAINT_TYPE FROM ALL_CONSTRAINTS; --所有约束种类
CONSTRAINT_TYPE取值:
C:检验约束
P:主键约束
U:唯一性约束
R:外键约束
V:未知(编者注)
10、创建约束
达梦数据库的约束操作
1、备份表
2、备份表空间(需开启归档)
3、远程备份
逻辑备份(dexp/dimp)介绍
--1、sql语句创建表的同时添加外键约束
CREATE TABLE tb_UserAndRole --用户角色表
(
ID INT PRIMARY KEY IDENTITY(1,1),
UserID INT NOT NULL,--用户ID
RoleID INT NOT NULL,--角色ID
foreign key(UserID) references tb_Users(ID)--tb_Users表的ID作为tb_UserAndRole表的外键
)
--2、添加外键约束(关联字段要用括号括起来)
-- ALTER TABLE 从表
-- ADD CONSTRAINT 约束名 FOREIGN KEY (关联字段) references 主表(关联字段);
--例如:
ALTER TABLE tb_UserAndRole
ADD CONSTRAINT FK__tb_UandR_Role FOREIGN KEY (RoleID) references tb_Role(ID);
create table bloboperation(id int, data blob);
insert into bloboperation values(1, 0x01020304FFFFFFFF0000000CAACB0000);
insert into bloboperation values(3, 'hellworld');
insert into bloboperation values(4, 0); --0被当作字符串处理
mysql> select id,hex(data),length(data) from bloboperation;
+------+----------------------------------+--------------+
| id | hex(data) | length(data) |
+------+----------------------------------+--------------+
| 1 | 01020304FFFFFFFF0000000CAACB0000 | 16 |
| 2 | 01020304FFFFFFFF0000000CAACB0000 | 16 |
| 3 | 68656C6C776F726C64 | 9 |
| 4 | 30 | 1 |
+------+----------------------------------+--------------+
--Blob类型字段的处理常用到的函数hex()、substring()、concat()、conv()
用sql语句写入含blob类型字段的数据
不安装达梦,使用库连接
QxOrm使用教程
Ubuntu 17.1 + Qt5.10 源码编译ODBC库