DM7采用多趟扫描、代价估算的优化策略,支持查询计划的HINT功能,可供经验丰富的DBA对特定查询进行优化改进,进一步提高查询的效率和灵活性。
DM7提供查询计划的重用,可以减少重复分析 *** 作,有效提升语句的执行效率。DM7采用参数化常量方法,使得常量值不同的查询语句,同样可以重用查询计划。
DM7提供查询结果集缓存策略,在服务器端实现结果集缓存,可以在提升查询速度的同时,保证缓存结果的实时性和正确性。
DM7采用更加有效的异步检查点机制,相对原有检查点长时间占用缓冲区的策略相比,逻辑更加简单,速度更快,对整体系统运行影响更小。
DM7采用多版本并发控制技术,使得查询与更新 *** 作间互不干扰,有效提高了高并发应用场景中的执行效率。
DM7中实现了数据字典缓存技术,执行期间不必封锁整个数据字典,可以有效降低DDL *** 作对整体系统并发执行的影响。
DM7为具有多个处理器 (CPU) 的计算机提供了并行查询,以优化查询执行和索引 *** 作。并行查询其优势就是可以通过多个线程来处理查询作业,从而提高查询的效率。
DM7数据压缩采用智能压缩策略,自动选择最合适的压缩算法进行数据压缩,可以显著提升数据的压缩比,进一步减少系统的空间资源开销。
DM7同时支持行存储引擎与列存储引擎,可实现事务内对行存储表与列存储表的同时访问,可同时适用于联机事务和分析处理。
DM7提供 OLAP 函数,用于支持复杂的分析 *** 作,侧重对决策人员和高层管理人员的决策支持,可根据分析人员的要求快速、灵活地进行大数据量的复杂查询处理,并且以直观易懂的形式将查询结果提供给决策人员,以便他们准确掌握企业的经营状况,了解被服务对象的需求,制定正确的方案。
DM7采用完全对等无共享(share-nothing)的MPP架构,支持SQL并行处理,可自动化分区数据和并行查询,无I/O冲突。DM7 MPP为新一代数据仓库所需的大规模数据和复杂查询提供了先进的软件级解决方案,具有业界先进的架构和高度的可靠性。
把sql2000的sql脚本导出来(要包含你的数据),然后修改这个脚本的语法使其符合mysql,最后在mysql命令行下导入脚本就可以了。
复制数据库 *** 作可以导出数据,但不是sql文件。
这个问题本来就很难解决,因为每个数据库都有自己的管理系统。
参考:
第一种是安装mysql ODBC,利用sql server的导出功能,选择mysql数据源,进行数据的直接导出,这种方法很简便,但是针对实际应用有很多弊端,最主要体现就是数据类型问题,首先,sql server数据库中
的ntext,image等数据类型的数据无法直接写入到mysql数据库中,据说只要稍加改动就可以,可惜偶这只菜鸟还没想到如何改动,其次,因为偶在mysql中的数据库设计中将时间都设成int型(保存的是时间戳),所以在数据导过来后,就会出现冲突,再次,这种方法生成的mysql数据表的字段类型都不很合适,所以此种方法我觉得不能提倡。
第二种是利用php或asp脚本来实现数据的导入功能,这种方法需要编写程序,但灵活性大, *** 作也不是那么困难,一切都尽在你的掌握之中,现简单介绍一下该方法
前提条件是你的mysql环境已经搭建好了,先建好目标数据库,再将所有的表结构用sql语句生成,现在万事具备,只缺数据了。
可以通过下面的php脚本来实现sql server中mydb数据库的user表中数据向mysql中mydb数据库导入
$cnx = odbc_connect('web', 'admin', '123456');//'web'是sqlserver中mydb的数据源名,'admin'是访问mydb的用户名,'123456'是访问mydb的密码
$cur= odbc_exec( $cnx, 'select from user' );//打开sql server中mydb数据库的user表
$num_row=0;
$conn=mysql_pconnect("localhost","root","123456");// 连接mysql
@mysql_select_db('mydb',$conn) or
die("无法连接到数据库,请与管理员联系!");//打开mysql的mydb数据库
while( odbc_fetch_row( $cur )) //从sql server的mydb库中的user表逐条取出数据,如果对数据进行选择,可在前面的select语句中加上条件判断
{
$num_row++;
$field1 = odbc_result( $cur, 1 ); // 这里的参数i(1,2,3)指的是记录集中的第i个域,你可以有所选择地进行选取,fieldi得到对应域的值,然后你可以对fieldi进行 *** 作
$field2 = odbc_result( $cur, 2 );
$field3 = odbc_result( $cur, 3 );
$field4 = odbc_result( $cur, 4 );
$field5 = odbc_result( $cur, 5 );
$field6 = odbc_result( $cur, 6 );
$field5 = timetoint($field5); //这里是对sql server中的datetime类型的字段进行相应转换处理,转换成我所需要的int型
$querystring = "insert into user
(id,name,username,password,recdate)
values('$field1','$field2','$field3','$field4','$field5')" ;
mysql_query($querystring,$conn);
}
function timetoint($str){
$arr1=split(" ",$str);
$datestr=$arr1[0];
$timestr=$arr1[1];
$arr_date=split("-",$datestr);
$arr_time=split(":",$timestr);
$year=$arr_date[0];
$month=$arr_date[1];
$day=$arr_date[2];
$hour=$arr_time[0];
$minute=$arr_time[1];
$second=$arr_time[2];
$time_int=mktime($hour,$minute,$second,$month,$day,$year);
return $time_int;
}
>
将该段脚本存成sqlphp,在服务器上执行,就可以将服务器上sql server中mydb数据库的user表中的数据导入到mysql中mydb数据库的user表中去。其他表的 *** 作与此雷同,就不赘述了。
下面再介绍一下asp脚本实现sql server中mydb数据库的数据向mysql中mydb数据库导入
<%
set conn=servercreateobject("adodbconnection")
connopen 'web', 'admin', '123456' // 'web'是sqlserver中mydb的数据源名,
'admin'是访问mydb的用户名,'123456'是访问mydb的密码
set rs=servercreateobject("adodbrecordset")
sql="select ID,name,username,password,datediff(s,'1970-01-01 00:00:00',
recdate)-83600,reid,filename,fileContentType,filevalue from senddate"
//这条sql语句实现了将datetime类型的recdate字段转化成unix时间戳的int型
rsopen sql,conn,1,3
set conn1=servercreateobject("adodbconnection")
conn1open "myoa","root","q1-d6=7"
i=1
do while not rseof
field1 = rs(0)
field2 = rs(1)
field3 = rs(2)
field4 = rs(3)
field5 = rs(4)
sql1 = "insert into user(ID,name,username,password,recdate)
values("&field1&",'"&field2&"','"&field3&"','"&field4&"',"&field5&")"
conn1execute sql1
rsmovenext
i=i+1
loop
rsclose
set rs=nothing
connclose
set conn=nothing
conn1close
set conn1=nothing
%>
以上两个是分别采用php脚本和asp脚本对user表的数据进行由sql server到mysql的导入其间我采用2种回避的方法来避免ntext,image类型数据的传递,一种是将ntext字段改为nvarchar(4000),因为实际情况,原始数据中该字段的数据长度都未超过4000个字,所以并没有出现数据截断,另一个手段是将image类型数据取出来写到文件中,以文件形式保存,将文件路径存到数据库中,方法见下:
function makeattach(fileContentType,filevalue,i)
select case fileContentType
case "application/msword"
ext="doc"
case "application/vndms-excel"
ext="exl"
case "application/vndms-powerpoint"
ext="pps"
case "application/x-rar-compressed"
ext="rar"
case "application/x-zip-compressed"
ext="zip"
case "image/gif"
ext="gif"
case "image/pjpeg"
ext="jpg"
case "text/plain"
ext="txt"
case else
ext="x"
end select
if ext<>"x" then
set fso=servercreateobject("FileSystemObject")
fName="attech"&i&""&ext
Dir="d:attach"
If fsoFileExists(Dir & fName) Then fsodeletefile Dir & fName
If fName<>"" AND NOT fsoFileExists(Dir & fName) Then
Set strm1=ServerCreateObject("ADODBStream")
strm1Open
strm1Type=1 'Binary
strm1Write filevalue
strm1SaveToFile Dir & fName,2
Set strm1=Nothing
end if
makeattach=fName
end if
end function
这个函数有3个输入参数,第一个是文件的contentType,第二个是文件的二进制数值,第三个是个可以区别文件名的变量,先根据contentType确定所存文件的后缀名,然后就是将二进制数值保存成指定文件名的文件,并将文件名作为输出参数返回,将返回的参数作为数据写到mysql的数据库中保存。
~
关注
达梦数据库常见报错及解决办法 原创
2021-09-13 16:53:28

果味怪叔叔~ 
码龄3年
关注
在达梦数据库的日常使用中我们可能会遇到很多问题,今天我将自己近期常遇到的错误进行总结汇总。
1、连接数据库报错:网络通信异常
解决方法:
数据库连接报网络通信异常原因通常只有两个,数据库服务启动异常或者数据库服务器网络通信异常
1 登录数据库服务器检查数据库进程是否存在ps –ef|grep dmserver
2 检查数据库服务器网络通信ping数据库服务器地址
3 检查数据库服务器数据库端口号通信是否正常telnet数据库服务器ip数据库端口号
2、数据库启动报错:dmserver startup failed, code = -104 [Invalid INI file]
解决方法:
数据库正常启动需要有数据文件,该类报错一般存在如下两方面原因:
1)数据文件不存在;
2)启动数据库的用户没有读写数据文件的权限。
3、数据库连接报错:用户名或密码错误
解决方法:
此类错误只需输入正确的密码即可。
如果忘记密码,以管理员登录数据库后修改该用户的密码:
alter user USERNAME identified by “PASSWD”
前面的USERNAME是用户名,后面的PASSWD是密码。
需要注意用户名不区分大小写,密码区分大小写。
4、登录数据库时报错“用户已被锁”
解决方法:
使用SYSDBA登录到数据库后,鼠标右键在对应“登录”名上单击“解锁”,此时“登录名”上的小锁符号消失;
或使用SYSDBA登录后手动调用存储过程call SP_UNLOCK_LOGIN(‘登录名‘)解锁;
通常是用户多次尝试登录但密码错误导致,有时候应用系统配置了数据库连接池,应用启动时初始化连接池会多次连接数据库,如用户名密码不对,则很快就会锁住该用户。
5、执行update,insert,delete语句完成后程序或其他数据库连接查不到改变后的数据
解决方法:
造成此类现象的原因单条sql或者sql脚本执行完上述语句后没有进行commit *** 作导致。
数据库的执行单元是事务,事务如果没有commit或者rollback,仍处于未完成状态,根据事物ACID特性中的隔离性,其他数据库连接无法看到未完成的数据库事务对数据的改变
6、数据库语句长时间不能执行完成,类似卡住的状态
解决方法:
1)对于select等查询语句,需要对sql语句进行分析优化,提升查询效率
2)update,insert,delete语句执行慢可能的原因为数据库阻塞导致,需要查找出导致阻塞的语句,并对语句进行处理
7、执行语句报错“字符串截断”
解决方法:
修改的数据,超过了数据库中字符类型(VARCHAR,CHAR)定义的长度,如VARCHAR(64),插入的数据字节长度超过64就会报错
8、执行语句报错“数据溢出”
解决方法:
修改的数据,超过了数据库中数值类型(int,number,decimal)定义的长度,如decimal(6,2),插入1000000,插入的数据超过定义的范围就会报错。
9、执行语句报错 “不能修改或删除聚集索引的列”或“试图删除聚集主键”
解决方法:
若想对有聚聚索引的列进行修改,可以重建表,或者重新在别的列上建立一个聚集索引。该列上的索引就变成非聚集了,就可以修改了。
很多时候是因为创建表时指定的主键被自动创建为聚集索引了,可以修改ini参数,将PK_WITH_CLUSTER设为0,则默认创建主键时为非聚集型。
在创建表的时候可以设置,方法如下,用一下sql语句。
create table tableName(
id int identity(1,1) primary key,
data varchar(50))
解释:其中identity(1,1)代表自增,第一个1代表从1开始计数,第二个1代表每次增长1。
扩展资料:
SQL 全名是结构化查询语言[1](Structured Query Language),是用于数据库中的标准数据查询语言,IBM 公司最早使用在其开发的数据库系统中。1986年10月,美国国家标准学会(ANSI) 对 SQL 进行规范后,以此作为关系式数据库管理系统的标准语言 (ANSI X3 135-1986),1987年得到国际标准组织的支持下成为国际标准。不过各种通行的数据库系统在其实践过程中都对 SQL 规范作了某些编改和扩充。所以,实际上不同数据库系统之间的SQL不能完全相互通用。
参考资料:
百科-SQL语言
达梦是一家国产数据库,根据它的介绍,感觉还不错。不过实际使用暂时未知,它号称是国产第一,但是又有其他数据库说是中国老大,这个没法评估,还需要实际测测才知道。不过看过论坛的评论,貌似它兼容oracle比较好
看不到问题详细描述。是用户被锁,还是表被锁?
登录失败(密码输入错误)次数过多是,就会出现用户被锁的情况,这时应该使用 sysdba 账户登陆,在左侧的导航栏目录,找到用户节点,点开 对应用户,通过右键(打开功能菜单),选择解锁该用户即可。如此 *** 作后,即可继续使用原用户 和它正确的密码登录了。
表被锁,执行语句的时候,会提示锁超时之类的。通过 V$LOCK 定位到阻塞(就是阻塞之后,报错之前 —— 才可以查到)。需要预先打开两个窗口,在一个窗口中,写好 select from v$lock where blocked=1; 这个语句,等待执行。在另一个窗口中,执行报错的语句,执行之后(还没有报错),立即去窗口1中执行那个语句。就一定能够查询到记录(被阻塞的事务相关的信息),然后通过这个信息(有 trx_id)就可以去 v$trx 以及 v$session 中,获取到 我们要执行的这个sql 是被谁阻塞的了。可以通过 sp_close_session 杀掉阻塞源头的会话,也可以找到执行阻塞源头事务的人(没有提交)让他们提交,就不会造成阻塞了。或者干等着,看阻塞源头的事务什么时候提交。
以上就是关于达梦数据库的高性能全部的内容,包括:达梦数据库的高性能、将Sql Server中的数据导入到Mysql数据库中、达梦数据库varchar改为number报错等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)