03_mycat通过debug日志来分析sql的完整执行逻辑

03_mycat通过debug日志来分析sql的完整执行逻辑
03_mycat通过debug日志来分析sql的完整执行逻辑

1,执行select * from travelrecord ,分析Debug日志,说明整个执行逻辑,包括连接获取,连接同步信息,数据合并,数据返回,连接释放

1.1清空debug信息

[root@wgq_idc_squid_1_11 logs]# cat /dev/null > mycat.log

[root@wgq_idc_squid_1_11 logs]# ll

修改日志为debug:

vim log4j.xml

获取日志:

[root@wgq_idc_squid_1_11 logs]# cp mycat.log 1.log

[root@wgq_idc_squid_1_11 logs]# vim 1.log

1.1连接获取

01/24 21:59:12.850 DEBUG [$_NIOREACTOR-3-RW] (EnchachePool.java:76) -SQLRouteCache miss cache ,key:TESTDBselect * from travelrecord

01/24 21:59:12.851 DEBUG [$_NIOREACTOR-3-RW] (EnchachePool.java:59) -SQLRouteCache add cache ,key:TESTDBselect * from travelrecord value:select * from travelrecord, route={

1 -> dn1{SELECT *

FROM travelrecord

LIMIT 100}

2 -> dn2{SELECT *

FROM travelrecord

LIMIT 100}

3 -> dn3{SELECT *

FROM travelrecord

LIMIT 100}

}

01/24 21:59:12.852 DEBUG [$_NIOREACTOR-3-RW] (NonBlockingSession.java:113) -ServerConnection [id=4, schema=TESTDB, host=127.0.0.1, user=test,txIsolation=3, autocommit=true, schema=TESTDB]select * from travelrecord, route={

1 -> dn1{SELECT *

FROM travelrecord

LIMIT 100}

2 -> dn2{SELECT *

FROM travelrecord

LIMIT 100}

3 -> dn3{SELECT *

FROM travelrecord

LIMIT 100}

} rrs

1.2连接同步信息:

01/24 21:59:12.852 DEBUG [$_NIOREACTOR-3-RW] (MySQLConnection.java:445) -con need syn ,total syn cmd 2 commands SET names latin1;SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;schema change:false con:MySQLConnection [id=11, lastTime=1453643952852, user=root, schema=db1, old shema=db1, borrowed=true, fromSlaveDB=true, threadId=3425, charset=latin1, txIsolation=0, autocommit=true, attachment=dn1{SELECT *

FROM travelrecord

LIMIT 100}, respHandler=org.opencloudb.mysql.nio.handler.MultiNodeQueryHandler@30a6aae0,

host=127.0.0.1, port=3327, statusSync=null, writeQueue=0, modifiedSQLExecuted=false]

1.3数据合并

01/24 21:59:12.856 DEBUG [BusinessExecutor6] (DataMergeService.java:296) -prepare mpp merge result for select * from travelrecord

01/24 21:59:12.856 DEBUG [BusinessExecutor6] (MultiNodeQueryHandler.java:324) -last packet id:11

01/24 21:59:21.910 DEBUG [Timer1] (SQLJob.java:85) -con query sql:show slave status to con:MySQLConnection [id=14, lastTime=1453643961910, user=root, schema=db1, old shema=db1, borrowed=true, fromSlaveDB=false, threadId=22, charset=latin1, txIsolation=3,

autocommit=true, attachment=null, respHandler=null, host=127.0.0.1, port=3317, statusSync=null, writeQueue=0, modifiedSQLExecuted=false]

01/24 21:59:21.910 DEBUG [Timer1] (SQLJob.java:85) -con query sql:show slave status to con:MySQLConnection [id=27, lastTime=1453643961910, user=root, schema=db1, old shema=db1, borrowed=true, fromSlaveDB=false, threadId=3442, charset=latin1, txIsolation=3, autocommit=true, attachment=null, respHandler=null, host=127.0.0.1, port=3327, statusSync=null, writeQueue=0, modifiedSQLExecuted=false]

……………..

1.4数据返回

01/24 21:59:12.854 DEBUG [$_NIOREACTOR-3-RW] (MultiNodeQueryHandler.java:171) -received ok response ,executeResponse:false from MySQLConnection [id=11, lastTime=1453643952835, user=root, schema=db1, old shema=db1, borrowed=true, fromSlaveDB=true, threadId=3425, charset=latin1, txIsolation=0, autocommit=true, attachment=dn1{SELECT *

FROM travelrecord

LIMIT 100}, respHandler=org.opencloudb.mysql.nio.handler.MultiNodeQueryHandler@30a6aae0, host=127.0.0.1, port=3327, statusSync=org.opencloudb.mysql.nio.MySQLConnection$StatusSync@6d43df48, writeQueue=0, modifiedSQLExecuted=false]

01/24 21:59:12.855 DEBUG [$_NIOREACTOR-3-RW] (MultiNodeQueryHandler.java:171) -received ok response ,executeResponse:false from MySQLConnection [id=11, lastTime=1453643952835, user=root, schema=db1, old shema=db1, borrowed=true, fromSlaveDB=true, threadId=3425, charset=latin1, txIsolation=3, autocommit=true, attachment=dn1{SELECT *

FROM travelrecord

LIMIT 100}, respHandler=org.opencloudb.mysql.nio.handler.MultiNodeQueryHandler@30a6aae0, host=127.0.0.1, port=3327, statusSync=org.opencloudb.mysql.nio.MySQLConnection$StatusSync@6d43df48, writeQueue=0, modifiedSQLExecuted=false]

1.5连接释放:

01/24 21:59:21.911 DEBUG [$_NIOREACTOR-2-RW] (PhysicalDatasource.java:403) -release channel MySQLConnection [id=14, lastTime=1453643961901, user=root, schema=db1, old shema=db1, borrowed=true, fromSlaveDB=false, threadId=22, charset=latin1, txIsolation=3, autocommit=true, attachment=null, respHandler=null, host=127.0.0.1, port=3317, statusSync=null, writeQueue=0, modifiedSQLExecuted=false]

01/24 21:59:21.911 DEBUG [$_NIOREACTOR-1-RW] (PhysicalDatasource.java:403) -release

channel MySQLConnection [id=27, lastTime=1453643961901, user=root, schema=db1, old shema=db1, borrowed=true, fromSlaveDB=false, threadId=3442, charset=latin1, txIsolation=3, autocommit=true, attachment=null, respHandler=null, host=127.0.0.1, port=3327, statusSync=null, writeQueue=0, modifiedSQLExecuted=false]

01/24 21:59:21.911 DEBUG [$_NIOREACTOR-2-RW] (PhysicalDatasource.java:403) -release channel MySQLConnection [id=16, lastTime=1453643961901, user=root, schema=db1, old shema=db1, borrowed=true, fromSlaveDB=true, threadId=3431, charset=utf8, txIsolation=0, autocommit=true, attachment=null, respHandler=null, host=127.0.0.1, port=3327, statusSync=null, writeQueue=0, modifiedSQLExecuted=false]

2,新增一个分片表T_VOTE (ID,PROVINCE),PROVINCE用hash分片,并用reload命令方式重载生效,截图和文字说明整个过程。

2.1配置hash分片

Schema.xml文件,dataNode有dn21、dn22;dataHost有m1、m2,如下2.1.jpg所示:

Rule.xml :

??

reload更新配置文件:

mysql> reload @@config;

ERROR 1064 (HY000): com.alibaba.druid.sql.parser.ParserException: syntax error, error in :'reload @@config',expect IDENTIFIER, actual IDENTIFIER reload

mysql>

问题好奇怪,虽然有报错信息,但是后台生效了,建表explain可以看到新的dn21和dn22 ,如下所示:

建表:

2.2 录入初始化数据验证数据分片:

总共录入了4条记录,去查看数据,2条记录在dn21分片上也就是mysql的3317实例上面,2条记录在dn22分片也就是mysql的3327实例上,如下所示:

Dn21分片3317mysql端口:

Dn22分片3327mysql端口:

3,该字符集为latin后的显示

3.1 Mysql服务器字符集为latin:

后台debug信息显示为charset=latin1了:

01/25 02:47:19.128 DEBUG [$_NIOREACTOR-1-RW] (MySQLConnection.java:445) -con need syn ,total syn cmd 1 commands SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;schema change:false con:MySQLConnection [id=32, lastTime=1453661239128, user=root, schema=db3, old shema=db3, borrowed=true, fromSlaveDB=false, threadId=23, charset=latin1, txIsolation=0, autocommit=true, attachment=dn22{SELECT *

FROM T_VOTE

LIMIT 100}, respHandler=org.opencloudb.mysql.nio.handler.MultiNodeQueryHandler@5485687f, host=10.254.1.11, port=3327, statusSync=null, writeQueue=0, modifiedSQLExecuted=false]

3.2 登录mycat的客户端设置成gbk:

1/25 02:50:26.348 DEBUG [$_NIOREACTOR-1-RW] (EnchachePool.java:76) -SQLRouteCache miss cache ,key:TESTDBselect * from T_VOTE where PROVINCE="beijing"

01/25 02:50:26.392 DEBUG [$_NIOREACTOR-1-RW] (EnchachePool.java:59) -SQLRouteCache add cache ,key:TESTDBselect * from T_VOTE where PROVINCE="beijing" value:select * from T_VOTE where PROVINCE="beijing", route={

1 -> dn22{SELECT *

FROM T_VOTE

WHERE PROVINCE = 'beijing'

LIMIT 100}

}

01/25 02:50:26.393 DEBUG [$_NIOREACTOR-1-RW] (NonBlockingSession.java:113) -ServerConnection [id=1, schema=TESTDB, host=127.0.0.1, user=test,txIsolation=3, autocommit=true, schema=TESTDB]select * from T_VOTE where PROVINCE="beijing", route={

1 -> dn22{SELECT *

FROM T_VOTE

WHERE PROVINCE = 'beijing'

LIMIT 100}

} rrs

01/25 02:50:26.393 DEBUG [$_NIOREACTOR-1-RW] (PhysicalDBPool.java:452) -select read source hostM2 for dataHost:m2

01/25 02:50:26.396 DEBUG [$_NIOREACTOR-3-RW] (NonBlockingSession.java:229) -release connection MySQLConnection [id=11, lastTime=1453661426394, user=root, schema=db3, old shema=db3, borrowed=true, fromSlaveDB=false, threadId=16, charset=gbk, txIsolation=3, autocommit=true, attachment=dn22{SELECT *

FROM T_VOTE

WHERE PROVINCE = 'beijing'

LIMIT 100}, respHandler=SingleNodeHandler [node=dn22{SELECT *

FROM T_VOTE

WHERE PROVINCE = 'beijing'

LIMIT 100}, packetId=5], host=10.254.1.11, port=3327, statusSync=org.opencloudb.mysql.nio.MySQLConnection$StatusSync@54a7f2c7, writeQueue=0, modifiedSQLExecuted=false]

01/25 02:50:26.396 DEBUG [$_NIOREACTOR-3-RW] (PhysicalDatasource.java:403) -release channel MySQLConnection [id=11, lastTime=1453661426394, user=root, schema=db3, old shema=db3, borrowed=true, fromSlaveDB=false, threadId=16, charset=gbk, txIsolation=3, autocommit=true, attachment=null, respHandler=null, host=10.254.1.11, port=3327, statusSync=null, writeQueue=0, modifiedSQLExecuted=false]

01/25 02:50:32.191 DEBUG [Timer0] (SQLJob.java:85) -con query sql:select user() to con:MySQLConnection [id=2, lastTime=1453661432191, user=root, schema=db3, old shema=db3, borrowed=true, fromSlaveDB=false, threadId=23, charset=latin1, txIsolation=0, autocommit=true, attachment=null, respHandler=null, host=10.254.1.11, port=3317, statusSync=null, writeQueue=0, modifiedSQLExecuted=false].

看到了charset=gbk,返回的数据和mysql数据库设置的字符集关系不大,和登录mycat客户端设置的字符集有关。

3.3设置成为utf8后

01/25 02:54:20.399 DEBUG [$_NIOREACTOR-1-RW] (EnchachePool.java:76) -SQLRouteCache miss cache ,key:TESTDBselect * from T_VOTE where PROVINCE="shanghai"

01/25 02:54:20.400 DEBUG [$_NIOREACTOR-1-RW] (EnchachePool.java:59) -SQLRouteCache add cache ,key:TESTDBselect * from T_VOTE where PROVINCE="shanghai" value:select * from T_VOTE where PROVINCE="shanghai", route={

1 -> dn22{SELECT *

FROM T_VOTE

WHERE PROVINCE = 'shanghai'

LIMIT 100}

}

01/25 02:54:20.401 DEBUG [$_NIOREACTOR-1-RW] (NonBlockingSession.java:113) -ServerConnection [id=1, schema=TESTDB, host=127.0.0.1, user=test,txIsolation=3, autocommit=true, schema=TESTDB]select * from T_VOTE where PROVINCE="shanghai", route={

1 -> dn22{SELECT *

FROM T_VOTE

WHERE PROVINCE = 'shanghai'

LIMIT 100}

} rrs

01/25 02:54:20.401 DEBUG [$_NIOREACTOR-1-RW] (PhysicalDBPool.java:452) -select read source hostM2 for dataHost:m2

01/25 02:54:20.403 DEBUG [$_NIOREACTOR-3-RW] (NonBlockingSession.java:229) -release connection MySQLConnection [id=11, lastTime=1453661660386, user=root, schema=db3, old shema=db3, borrowed=true, fromSlaveDB=false, threadId=16, charset=utf8, txIsolation=3, autocommit=true, attachment=dn22{SELECT *

FROM T_VOTE

WHERE PROVINCE = 'shanghai'

LIMIT 100}, respHandler=SingleNodeHandler [node=dn22{SELECT *

FROM T_VOTE

WHERE PROVINCE = 'shanghai'

LIMIT 100}, packetId=5], host=10.254.1.11, port=3327, statusSync=org.opencloudb.mysql.nio.MySQLConnection$StatusSync@5017d906, writeQueue=0, modifiedSQLExecuted=false]

01/25 02:54:20.403 DEBUG [$_NIOREACTOR-3-RW] (PhysicalDatasource.java:403) -release channel MySQLConnection [id=11, lastTime=1453661660386, user=root, schema=db3, old shema=db3, borrowed=true, fromSlaveDB=false, threadId=16, charset=utf8, txIsolation=3, autocommit=true, attachment=null, respHandler=null, host=10.254.1.11, port=3327, statusSync=null, writeQueue=0, modifiedSQLExecuted=false]

看到debug信息中,返回的信息是utf8,所以客户端登录的字符集是啥,返回的数据就是啥字符集的。

3.3 改成latin?

Mysql数据库都是latin,登录mycat客户端也是latin,不用测试,肯定是latin

总结:mycat登录的所有字符集,数据处理返回结果都跟着登录设置的字符集走。

日志删除恢复数据库

删除数据库日志文件 设置数据库为紧急模式 ?停掉SQL Server服务; ?把应用数据库的数据文件XXX_Data.mdf移走; ?重新建立一个同名的数据库XXX; ?停掉SQL服务; ?把原来的数据文件再覆盖回来; ?运行以下语句,把该数据库设置为紧急模式; 运行“Use Master Go sp_configure 'allow updates', 1 reconfigure with override Go” 执行结果: DBCC 执行完毕。如果DBCC 输出了错误信息,请与系统管理员联系。 已将配置选项'allow updates' 从0 改为1。请运行RECONFIGURE 语句以安装。 接着运行“update sysdatabases set status = 32768 where name = 'XXX'” 执行结果: (所影响的行数为1 行) ?重启SQL Server服务; ?运行以下语句,把应用数据库设置为Single User模式; 运行“sp_dboption 'XXX', 'single user', 'true'” 执行结果: 命令已成功完成。 ?做DBCC CHECKDB;

运行“DBCC CHECKDB('XXX')” 执行结果: 'XXX' 的DBCC 结果。 'sysobjects' 的DBCC 结果。 对象'sysobjects' 有273 行,这些行位于5 页中。 'sysindexes' 的DBCC 结果。 对象'sysindexes' 有202 行,这些行位于7 页中。 'syscolumns' 的DBCC 结果。 ……… ?运行以下语句把系统表的修改选项关掉; 运行“sp_resetstatus "XXX" go sp_configure 'allow updates', 0 reconfigure with override Go” 执行结果: 在sysdatabases 中更新数据库'XXX' 的条目之前,模式= 0,状态= 28(状态suspect_bit = 0), 没有更新sysdatabases 中的任何行,因为已正确地重置了模式和状态。没有错误,未进行任何更改。 DBCC 执行完毕。如果DBCC 输出了错误信息,请与系统管理员联系。 已将配置选项'allow updates' 从1 改为0。请运行RECONFIGURE 语句以安装。 ?重新建立另外一个数据库XXX.Lost; DTS导出向导 ?运行DTS导出向导; ?复制源选择EmergencyMode的数据库XXX,导入到XXX.Lost;

SQL中的case-when,if-else实例

create database EXAM go create table student (stuName varchar(10)not null, stuNO int primary key not null, stuSex char(2)check(stuSex='男'or stuSex='女'), stuAge int, stuSeat int, stuAddress varchar(40) ) GO insert into student values('张秋丽','25301','女','21','1','北京海淀'), ('李文才','25302','男','25','2','天津'), ('张三','25303','男','22','3','北京海淀'), ('红尘','25304','女','21','4','湖南长沙'), ('段林希','25305','女','20','5','江西赣州'), ('魏晨','25306','男','23','6','河北石家庄'), ('郑爽','25307','女','20','7',''), ('张杰','25308','男','21','8',''), ('王洁','25309','女','23','9','湖南怀化'), ('刘欣','253010','女','21','10','北京') create table exam (ExamNO int primary key, stuNO int not null, WrittenExam int, LabExam int ) GO insert into exam values(01,250301,86,89), (02,250302,67,78), (03,250303,76,80), (04,250304,79,56), (05,250305,56,63), (06,250306,67,60), (07,250307,90,83), (08,250308,80,79), (09,250309,92,90), (10,250310,55,58)

解决SQL数据库日志已满的问题

解决SQL数据库日志已满的问题 1、右键数据库→属性→选项→故障还原模型→设为简单→确定; 2、右键数据库→所有任务→收缩数据库→确定; 3、右键数据库→属性→选项→故障还原模型→设为大容量日志记录→确定。 二、复杂方法 1、清空日志 DUMP TRANSACTION库名WITH NO_LOG 2、截断事务日志 BACKUP LOG数据库名WITH NO_LOG 3、收缩数据库文件(如果不压缩,数据库的文件不会减小) 企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件 --选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了。 --选择数据文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了 也可以用SQL语句来完成 --收缩数据库 DBCC SHRINKDATABASE(客户资料) --收缩指定数据文件,1是文件号,可以通过这个语句查询到:select * from sysfiles DBCC SHRINKFILE(1) 4、为了最大化的缩小日志文件(如果是sql 7.0,这步只能在查询分析器中进行) a.分离数据库 企业管理器--服务器--数据库--右键--分离数据库 b.在我的电脑中删除LOG文件 c.附加数据库 企业管理器--服务器--数据库--右键--附加数据库 此法将生成新的LOG,大小只有500多K 或用代码: 下面的示例分离pubs,然后将pubs 中的一个文件附加到当前服务器。 a.分离 EXEC sp_detach_db @dbname = 'pubs' b.删除日志文件 c.再附加 EXEC sp_attach_single_file_db @dbname = 'pubs',@physname = 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\pubs.mdf' 5、为了以后能自动收缩,做如下设置 企业管理器--服务器--右键数据库--属性--选项--选择"自动收缩" --SQL语句设置方式: EXEC sp_dboption '数据库名', 'autoshrink', 'TRUE' 6、如果想以后不让它日志增长得太大 企业管理器--服务器--右键数据库--属性--事务日志 --将文件增长限制为xM(x是你允许的最大数据文件大小) --SQL语句的设置方式: alter database 数据库名modify file(name=逻辑文件名,maxsize=20)

SQL Server 数据库清除日志的方法

SQL Server 数据库清除日志的方法 方法一: 1、打开查询分析器,输入命令 BACKUP LOG database_name WITH NO_LOG 2、再打开企业管理器--右键要压缩的数据库--所有任务--收缩数据库--收缩文件--选择日志文件--在收缩方式里选择收缩至xxm,这里会给出一个允许收缩到的最小m数,直接输入这个数,确定就可以了。 方法二: 设置检查点,自动截断日志 一般情况下,SQL数据库的收缩并不能很大程度上减小数据库大小,其主要作用是收缩日志大小,应当定期进行此操作以免数据库日志过大 1、设置数据库模式为简单模式:打开SQL企业管理器,在控制台根目录中依次点开Microsoft SQL Server-->SQL Server组-->双击打开你的服务器-->双击打开数据库目录-->选择你的数据库名称(如用户数据库cwbase1)-->然后点击右键选择属性-->选择选项-->在故障还原的模式中选择“简单”,然后按确定保存 2、在当前数据库上点右键,看所有任务中的收缩数据库,一般里面的默认设置不用调整,直接点确定 3、收缩数据库完成后,建议将您的数据库属性重新设置为标准模式,操作方法同第一点,因为日志在一些异常情况下往往是恢复数据库的重要依据 方法三:通过SQL收缩日志 把代码复制到查询分析器里,然后修改其中的3个参数(数据库名,日志文件名,和目标日志文件的大小),运行即可 SET NOCOUNT ON DECLARE @LogicalFileNamesysname, @MaxMinutes INT, @NewSize INT USE tablename -- 要操作的数据库名 SELECT @LogicalFileName = 'tablename_log', -- 日志文件名 @MaxMinutes = 10, -- Limit on time allowed to wrap log. @NewSize = 1 -- 你想设定的日志文件的大小(M) -- Setup / initialize DECLARE @OriginalSizeint SELECT @OriginalSize = size FROM sysfiles WHERE name = @LogicalFileName SELECT 'Original Size of ' + db_name() + ' LOG is ' + CONVERT(VARCHAR(30),@OriginalSize) + ' 8K pages or ' + CONVERT(VARCHAR(30),(@OriginalSize*8/1024)) + 'MB' FROM sysfiles WHERE name = @LogicalFileName CREATE TABLE DummyTrans (DummyColumn char (8000) not null) DECLARE @Counter INT,

SQL Server 2008 SQL2012 SQL2014 收缩日志 清空删除大日志文件

SQL Server 2008 SQL2012 SQL2014 收缩日志清空删除大日志文件 SQL2008 SQL2012 SQL2014 的收缩日志 由于SQL2008对文件和日志管理进行了优化,所以以下语句在SQL2005中可以运行但在SQL2008中已经被取消:(SQL2005) BackupLog DNName with no_log go dumptransaction DNName with no_log go USE DNName DBCC SHRINKFILE (2) Go -------------------------------------------------------------- (SQL2008): 在SQL2008中清除日志就必须在简单模式下进行,等清除动作完毕再调回到完全模式。 方案一:完全命令模式 USE[master] GO ALTER DATABASE DNName SET RECOVERY SIMPLE WITH NO_WAIT GO ALTER DATABASE DNName SET RECOVERY SIMPLE --简单模式 GO USE DNName GO DBCC SHRINKFILE (N'DNName_Log' , 11, TRUNCATEONLY) GO USE[master] GO ALTER DATABASE DNName SET RECOVERY FULL WITH NO_WAIT GO ALTER DATABASE DNName SET RECOVERY FULL --还原为完全模式 GO 方案二:部分命令模式+ 任务-收缩-文件(单个数据库) ALTER DATABASE DNName SET RECOVERY SIMPLE --简单模式 GO 右键-任务-收缩-文件-确定下来数据库的日志只保留了1M

最新数据库日志清除语句

数据库日志清除语句 当数据库的日志文件太大,磁盘没有空间不能做单据时,我们可以用下面的方法直接清除日志: 2008版本以下的数据库执行以下整个语句: --标准 use数据库名称 go backup log数据库名称with no_log dbcc shrinkfile(2) --实例 use DSCSYS go backup log DSCSYS with no_log dbcc shrinkfile(2) 说明: 不论是公司数据库还是公用数据库,只要把数据库名称全部替换了即可。 2008版本以上的数据库执行以下整个语句: --标准 USE[master] GO ALTER DATABASE DNName SET RECOVERY SIMPLE WITH NO_WAIT GO ALTER DATABASE DNName SET RECOVERY SIMPLE GO USE DNName GO DBCC SHRINKFILE(N'FILEName_Log', 11,TRUNCATEONLY) GO USE[master] GO ALTER DATABASE DNName SET RECOVERY FULL WITH NO_WAIT GO ALTER DATABASE DNName SET RECOVERY FULL GO

--实例 USE[master] GO ALTER DATABASE DEMO90SET RECOVERY SIMPLE WITH NO_WAIT GO ALTER DATABASE DEMO90SET RECOVERY SIMPLE GO USE DEMO90 GO DBCC SHRINKFILE(N'outside_Log', 11,TRUNCATEONLY) GO USE[master] GO ALTER DATABASE DEMO90SET RECOVERY FULL WITH NO_WAIT GO ALTER DATABASE DEMO90SET RECOVERY FULL GO 说明: 1.标准示例中的DNName及实例中的DEMO90表示的是数据库名称,就是下图看到的名字

项目开发中常用到的SQL语句

项目开发中常用到的SQL语句1、循环示例 循环示例代码: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 DECLARE @i int DECLARE @name varchar(10) DECLARE @password varchar(10) Set @i = 1000 WHILE @i < 1200 BEGIN Set @i =@i +1 SET @name = RIGHT('0000' + CAST(@i AS varchar(10)),4) set @password = @name select @name insert into dbo.LocomotiveTeminalBase (li_ID,t_ID,lt_IDNumber,lt_MiM,lt_FuWQIP,lt_FuWQDKH,lt_CreatedBy) values('d82575c0-2d21-4c47-a406-7771d7d2c80a','fb5d9a7b-9cd6-4a55-9e90-881706eaf @name,@password,'192.168.1.187','2000','9015c234-e185-4e15-96c6-f53426dd6690') END 2、数据库缓存依赖中用到的SQL语句代码示例: ? 1 2 3 4 5 6 7 8 --查看状态 Select DATABASEpRoPERTYEX('soft_LocomotiveRM_DB','IsBrokerEnabled') --启用broker ALTER DATABASE soft_LocomotiveRM_DB SET NEW_BROKER WITH ROLLBACK IMMEDIATE ALTER DATABASE soft_LocomotiveRM_DB SET ENABLE_BROKER --添加用户

清除数据和清除日志

清除数据和清除日志 一.清除出去的数据 本功能支持工作流运行数据(工作流运行过程中产生的实例、日志信息)的清除,清除出去的数据,以后如果需要还可以通过还原工作流数据功能恢复到系统中。 操作说明 1.系统管理员Admin登录后,在"系统管理"主界面,选择【系统】菜单中的【数据清除】-【清除工作流数据】,点击进入清除工作流功能界面。 2.在数据清除界面, 根据'起止年度'确定 需要操作的账套库 后,可以选择按日期 范围或按单据类型进 行清除:

3.清除方式选择'按日期范围',可以进一步在'时间条件'中选择具体的日期范围。选择后将清除该账套库中终审时间在指定日期范围内的所有单据类型的工作流数据。 4.清除方式选择'按单据',可以进一步在'单据条件'中选择具体单据及其过滤条件。设置后将清除该账套库中指定单据类型的满足条件的工作流数据。 5.'选择单据类型'左侧显示本账套库中存在工作流数据的单据类型,从左侧选中需要清除工作流数据的单据类型,点击选择到右侧; 6.选定各个单据类型还可以在'设置单据条件'中设置更加明细的过滤条件。 7.点击〖下一步〗按钮,还会显示将要清除的工作流数据的信息列表以再次确认。 8.确认无误后,点击〖清除〗,在弹出框中选择备份文件存放路径,〖确定〗后将把所选的工作流数据备份到指定路径,并删除账套库内相应数据。 注意: 只有系统管理员Admin可执行工作流数据的清除。 选择好需要清除的工作流数据范围以后,在确认列表底部将显示出将清除数据的数据量大小。

二.清除日志 本功能支持各种日志类数据的清除,包括业务功能操作日志、数据操作日志、系统管理操作日志。清除出去的数据,以后如果需要还可以通过还原日志功能恢复到系统中。 操作说明 1.管理员登录后,在"系统管理"主界面,选择【系统】菜单中的【数据清除】-【清除日志】,点击进入清除日志功能界面。如图 2.在数据清除界面,左侧选 择不同的历史数据类型,右侧选择需要卸出数据的账套、年度,以及数据的日期范围,录入或选择备份文件存放路径后,点击〖清除〗按钮,将把所选的账套历史数据备份到指定路径,并删除账套内相应数据,同时提示用户保管好备份文件。 3.历史数据类型说明 4.数据操作日志:各类业务数据的操作日志,包括单据、档案的操作日志、业务参数变更日志等; 5.业务系统上机日志:各类业务功能操作的日志,包括登录门户、

几种清除MSSQL日志方法

方法一、 1 / 4

2 / 4 方法二、

MS SQL清除日志的命令 如何清除sql server 日志? 设置数据库为简单模式,自动收缩 1.打开查询分析器,输入命令 backup log databasename with no_log 2.再打开企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件--选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M 数,直接输入这个数,确定就可以了。 dbcc shrinkfile (databasename_log,truncateonly) 方法三、 1: 删除LOG 第1步:分离数据库企业管理器->服务器->数据库->右键->分离数据库 第2步:删除LOG文件 第3布:附加数据库企业管理器->服务器->数据库->右键->附加数据库 此法生成新的LOG,大小只有500多K 再将此数据库设置自动收缩 方法四、 EXEC sp_detach_db @dbname = 'pubs' EXEC sp_attach_single_file_db @dbname = 'pubs', @physname = 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\pubs.mdf' 方法五、 Use Database_Name Backup Log Database_Name With No_log dbcc shrinkfile (Database_Name_Log,truncateonly) Go 方法六、 直接在查询分析那里执行backup log databasename with no_log 然后回到企业管理器把数据库收缩一下(可能需另外设置属性) 3 / 4

DB2常用SQL语句集

DB2常用SQL语句集 1、查看表结构: describe table tablename describe select * from tablename 2、列出系统数据库目录的内容: list database directory 3、查看数据库配置文件的内容: get database configuration for DBNAME 4、启动数据库: restart database DBNAME 5、关闭表的日志 alter table TBLNAME active not logged inially 6、重命名表 rename TBLNAME1 to TBLNAME2 7、取当前时间 select current time stamp from sysibm.sysdummy1 8、创建别名 create alias ALIASNAME for PRONAME(table、view、alias、nickname) 9、查询前几条记录 select * from TBLNAME fetch first N rows 10、联接数据库 db2 connect to DB user db2 using PWD 11、绑定存储过程命令 db2 bind BND.bnd 12、整理优化表 db2 reorgchk on table TBLNAME db2 reorg table TBLNAME db2 runstats on table TBNAME with distribution and indexes all 13、导出表 db2 export to TBL.txt of del select * from TBLNAME db2 export to TBL.ixf of ixf select * from TBLNAME 以指定分隔符‘|’下载数据: db2 "export to cmmcode.txt of del modified by coldel| select * from cmmcode”14、导入表 db2 import from TBL.txt of del insert into TBLNAME db2 import from TBL.txt of del commitcount 5000 insert into TBLNAME db2 import from TBL.ixf of ixf commitcount 5000 insert into TBLNAME db2 import from TBL.ixf of ixf commitcount 5000 insert_update into TBLNAME db2 import from TBL.ixf of ixf commitcount 5000 replace into TBLNAME db2 import from TBL.ixf of ixf commitcount 5000 create into TBLNAME (仅IXF) db2 import from TBL.ixf of ixf commitcount 5000 replace_create into TBLNAME (仅 IXF) 以指定分隔符“|”加载:

数据库日志满的删除方法

解决SQL数据库日志已满的问题 2009年03月21日星期六上午 11:53 一、简单方法 1、右键数据库→属性→选项→故障还原模型→设为简单→确定; 2、右键数据库→所有任务→收缩数据库→确定; 3、右键数据库→属性→选项→故障还原模型→设为大容量日志记录→确定。 二、复杂方法 1、清空日志 DUMP TRANSACTION 库名WITH NO_LOG 2、截断事务日志 BACKUP LOG 数据库名WITH NO_LOG 3、收缩数据库文件(如果不压缩,数据库的文件不会减小) 企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件 --选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了 --选择数据文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了 也可以用SQL语句来完成 --收缩数据库 DBCC SHRINKDATABASE(客户资料) --收缩指定数据文件,1是文件号,可以通过这个语句查询到:select * from sysfiles DBCC SHRINKFILE(1) 4、为了最大化的缩小日志文件(如果是sql 7.0,这步只能在查询分析器中进行) a.分离数据库 企业管理器--服务器--数据库--右键--分离数据库 b.在我的电脑中删除LOG文件 c.附加数据库 企业管理器--服务器--数据库--右键--附加数据库 此法将生成新的LOG,大小只有500多K 或用代码: 下面的示例分离 pubs,然后将 pubs 中的一个文件附加到当前服务器。 a.分离 EXEC sp_detach_db @dbname = 'pubs' b.删除日志文件 c.再附加 EXEC sp_attach_single_file_db @dbname = 'pubs',@physname = 'c:\Program Files\Microsoft SQL

清除sql2000日志文件

sql 2000 事务日志的介绍及收缩 1、事务日志简介 作为大型的关系型数据库,最重要的事情之一就是数据库完整性,也就是说数据必须是正确的,不能因为一些不可知的突发事件(如突然掉电)损坏数据。为了避免这种情况,SQL数据库采用了两步写入磁盘的办法,第一步先写我做了什么,比如开了一个进货单,这一步完成后,再执行第二步,把这个进货单的内容写入数据库,这两步都成功了,才算完成,有一步有问题,这个单据都不会记到数据库中。这样,您的事务操作(对数据库的修改操作,查询不记事务)的每一步都要记录进日志文件,如果您不注意经常截断事务日志的话,随着时间的增长,事务日志会很快的增长,最后要比您的数据量大的多。可以经常看到,数据库文件只有几十兆,而日志文件却几千兆的情况。 2、截断事务日志 事务日志分成两部分,一部分是不活动的,也就是说这部分的操作都已经成功的写入数据库了,而另一部分是活动的,也就是说,这部分日志,只是确认执行了上述第一步,还没有确信已经写入数据库的部分。我们需要截断的就是不活动的部分。这部分可以如下方法截断:Backup Log ‘数据库名’with truncate_only 警告:在运行上述截断日志之后,强烈建议进行数据库完全备份。 3、缩小文件大小 使用上述第2步就把不活动的日志删除了,但是文件并没有变小,只是把原先旧日志占用的空间释放了,又可以向里面记入新的日志了。要想把物理文件也变小(比如已经几千兆了),请使用如下命令:DBCC Shrinkdatabase (数据库名) 运行上述命令后就可以把日志文件缩小了(一般都缩为1M左右) 4、把数据文件或日志文件的增长不受限制 如果您做不到经常维护数据库,不能经常的截断日志,日志文件就会逐渐变大,一旦大到您设置的大小限制,日志就再也不能写入了,您对数据库的所有改变操作也就无法进行了,这时候您就需要用上面的方法把日志文件截断。不过,您可以把文件的大小设置大一些或不受限制,请在企业管理器中设置数据库属性即可。也可以运行下述命令:alter database 数据库名modify file (name = 逻辑文件名,Maxsize =

sql循环语句的写法

sql循环语句的写法 SQL循环语句 declare @i int set @i=1 while @i<30 begin insert into test (userid) values(@i) set @i=@i+1 end --------------- while 条件 begin 执行操作 set @i=@i+1 end WHILE 设置重复执行SQL 语句或语句块的条件。只要指定的条件为真,就重复执行语句。可以使用BREAK 和CONTINUE 关键字在循环内部控制WHILE 循环中语句的执行。语法WHILE Boolean_expression { sql_statement | statement_block } [ BREAK ] { sql_statement | statement_block } [ CONTINUE ] 参数

Boolean_expression 返回TRUE 或FALSE 的表达式。如果布尔表达式中含有SELECT 语句,必须用圆括号将SELECT 语句括起来。{sql_statement | statement_block} Transact-SQL 语句或用语句块定义的语句分组。若要定义语句块,请使用控制流关键字BEGIN 和END。BREAK 导致从最内层的WHILE 循环中退出。将执行出现在END 关键字后面的任何语句,END 关键字为循环结束标记。CONTINUE 使WHILE 循环重新开始执行,忽略CONTINUE 关键字后的任何语句。注释 如果嵌套了两个或多个WHILE 循环,内层的BREAK 将导致退出到下一个外层循环。首先运行内层循环结束之后的所有语句,然后下一个外层循环重新开始执行。示例 A. 在嵌套的IF...ELSE 和WHILE 中使用BREAK 和CONTINUE 在下例中,如果平均价格少于$30,WHILE 循环就将价格加倍,然后选择最高价。如果最高价少于或等于$50,WHILE 循环重新启动并再次将价格加倍。该循环不断地将价格加倍直到最高价格超过$50,然后退出WHILE 循环并打印一条消息。USE pubs GO WHILE (SELECT A VG(price) FROM titles) < $30 BEGIN

实验10 T-SQL语言编程基础

实验十 T-SQL语言编程基础 姓名:学号: 专业:网络工程班级: 同组人:无实验日期:2012-4-19【实验目的与要求】 1.熟练掌握变量的定义和赋值。 2.熟练掌握各种运算符。 3.熟练掌握流程控制语句,尤其是条件语句和循环语句。【实验内容与步骤】 10.1. 变量的定义与输出 1.变量的定义和赋值 1) 局部变量的声明: DECLARE @variable_name DataType 例如: declare @stuname varchar(20)--声明一个存放学员姓名的变量stuname. declare @stuseat int--声明一个存放学员座位号的变量stuseat 2) 局部变量的赋值: 局部变量的赋值有两种方法: a) 使用Set语句 Set @variable_name=value b) 使用Select语句 Select @variable_name=value 实验: 运行以下程序段,理解变量的使用。

--局部变量的赋值与使用 declare @customer_name varchar(20)--声明变量用来存放客户名称 set @ customer_name ='家电市场'--使用SET语句给变量赋值 select* from xss where客户名称=@customer_name --通过局部变理向sql语句传递数据 请给出运行结果: 练习: 创建一名为 Product_name的局部变量,并在SELECT语句中使用该变量查找“冰箱”的”价格”和”库存量”。 给出相应的语句 declare @Product_name varchar(20) set @Product_name ='冰箱' select价格,库存量 from CP where产品名称= @Product_name 请给出运行测试结果:

实验7_T-SQL语言编程基础[1]1

实验七T-SQL语言编程基础 【实验目的与要求】 1.熟练掌握变量的定义和赋值。 2.熟练掌握各种运算符。 3.熟练掌握流程控制语句,尤其是条件语句和循环语句。 【实验内容与步骤】 一、准备实验数据 CPXS数据库包含如下三个表: CP(产品编号,产品名称,价格,库存量); XSS(客户编号,客户名称,地区,负责人,电话); CPXSB(产品编号,客户编号,销售日期,数量,销售额); 三个表结构如图2.1~图2.3所示,请在企业管理器中完成表的创建。 图2.1CP表结构

图2.2XSS表结构 图2.3CPXSB表结构 2.1数据写入操作 在企业管理器中输入如图2.4~图2.6的CP表、XSS表和CPXSB表的样本数据。 图2.4CP表的样本数据

图2.5XSS表的样本数据 图2.6CPXSB表的样本数据 10.1.变量的定义与输出 1.变量的定义和赋值 1)局部变量的声明: DECLARE@variable_name DataType 例如: declare@stuname varchar(20)--声明一个存放学员姓名的变量stuname. declare@stuseat int--声明一个存放学员座位号的变量stuseat 2)局部变量的赋值: 局部变量的赋值有两种方法: a)使用Set语句 Set@variable_name=value b)使用Select语句 Select@variable_name=value 实验: 运行以下程序段,理解变量的使用。 --局部变量的赋值与使用 declare@customer_name varchar(20)--声明变量用来存放客户名称set@customer_name='家电市场'--使用SET语句给变量赋值select* from xss where客户名称=@customer_name--通过局部变理向sql语句传递数据请给出运行结果:

删除 SQL Server 的实例

删除SQL Server 的特定实例 若要删除SQL Server 的特定实例,请按照下列步骤操作: 1.找到并删除%drive%:\Program Files\Microsoft SQL Server\MSSQL\Binn 文件 夹,其中%drive%是要删除的SQL Server 实例的位置。 2.找到以下注册表项: o HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer 注意:如果要删除默认实例,则必须删除除Client项以外的所有项。 o HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server 必须使用Regedt32.exe 来编辑要删除的实例的InstalledInstances 值。默认实例的显示名称为MSSQLSERVER,而命名实例的显示名称则为给该 实例指定的名称。 注意:不能使用Regedit.exe 编辑该值;您必须使用Regedt32.exe。 注意:如果这是SQL Server 2000 的群集实例,请为群集中的每个节点重复执行这些步骤。 删除SQL Server 的所有已知实例 若要删除SQL Server 的所有已知实例,请按照下列步骤操作: 1.找到并删除%drive%:\Program Files\Microsoft SQL Server\MSSQL\Binn 文件 夹。 2.找到并删除以下注册表项: o HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer o HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server 3.找到并删除以下注册表项: o HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MSSQL Server o HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SQLSER VERAGENT o HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MSSQL ServerADHelper 4.步骤3 中的三个注册表项对应于Microsoft SQL Server 2000 的默认实例。命名实例 对应的注册表项与步骤 3 中列出的注册表项类似,但后面带有$instance_name,因

SQL循环语句的写法

SQL循环语句的写法 SQL循环语句 declare @i int set @i=1 while @i<30 begin insert into test (userid) values(@i) set @i=@i+1 end --------------- while 条件 begin 执行操作 set @i=@i+1 end WHILE 设置重复执行 SQL 语句或语句块的条件。只要指定的条件为真,就重复执行语句。可以使用 BREAK 和 CONTINUE 关键字在循环内部控制 WHILE 循环中语句的执行。 语法 WHILE Boolean_expression { sql_statement | statement_block } [ BREAK ] { sql_statement | statement_block } [ CONTINUE ] 参数 Boolean_expression 返回 TRUE 或 FALSE 的表达式。如果布尔表达式中含有 SELECT 语句,必须用圆括号将 SELECT 语句括起来。 {sql_statement | statement_block} Transact-SQL 语句或用语句块定义的语句分组。若要定义语句块,请使用控制流关键字 BEGIN 和 END。 BREAK

导致从最内层的 WHILE 循环中退出。将执行出现在 END 关键字后面的任何语句,END 关键字为循环结束标记。 CONTINUE 使 WHILE 循环重新开始执行,忽略 CONTINUE 关键字后的任何语句。 注释 如果嵌套了两个或多个 WHILE 循环,内层的 BREAK 将导致退出到下一个外层循环。首先运行内层循环结束之后的所有语句,然后下一个外层循环重新开始执行。 示例 A. 在嵌套的 IF...ELSE 和 WHILE 中使用 BREAK 和 CONTINUE 在下例中,如果平均价格少于 $30,WHILE 循环就将价格加倍,然后选择最高价。如果最高价少于或等于 $50,WHILE 循环重新启动并再次将价格加倍。该循环不断地将价格加倍直到最高价格超过 $50,然后退出 WHILE 循环并打印一条消息。 USE pubs GO WHILE (SELECT AVG(price) FROM titles) < $30 BEGIN UPDATE titles SET price = price * 2 SELECT MAX(price) FROM titles IF (SELECT MAX(price) FROM titles) > $50 BREAK ELSE CONTINUE END PRINT 'Too much for the market to bear' B. 在带有游标的过程中使用 WHILE 以下的 WHILE 结构是名为 count_all_rows 过程中的一部分。下例中,该 WHILE 结构测试用于游标的函数 @@FETCH_STATUS 的返回值。因为 @@FETCH_STATUS 可能返回–2、-1 或 0,所以,所有的情况都应进行测试。如果某一行在开始执行此存储过程以后从游标结果中删除,将跳过该行。成功提取(0) 后将执行 BEGIN...END 循环内部的 SELECT 语句。 USE pubs DECLARE tnames_cursor CURSOR FOR SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES

清除SQLServer数据库日志(SqlServer2005)

今天把服务器上的论坛数据库附加到本地,附加过程中就觉得不对劲,速度奇慢,附加完一看,日志文件整整占了23G。必须清除掉,不然太占空间了。上网找了个清除日志的方法。我在清除过程中用了第1,2,3,5步骤,顺利将日志文件BBS_log.ldf从23G变为了1M。 我执行如下: 1.清空日志 DUMP TRANSACTION 库名 WITH NO_LOG 2.截断事务日志: BACKUP LOG 数据库名 WITH NO_LOG 3.收缩数据库文件(如果不压缩,数据库的文件不会减小) 右键数据库->任务->收缩->数据库->确定 4.将数据库设为自动收缩 右键数据库->属性->选项->自动->自动收缩设为True 原文如下: --压缩日志及数据库文件大小 1.清空日志 DUMP TRANSACTION 库名 WITH NO_LOG 2.截断事务日志: BACKUP LOG 数据库名 WITH NO_LOG 3.收缩数据库文件(如果不压缩,数据库的文件不会减小 企业管理器--右键你要压缩的数据库--所有任务--收缩数据库--收缩文件 --选择日志文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了 --选择数据文件--在收缩方式里选择收缩至XXM,这里会给出一个允许收缩到的最小M数,直接输入这个数,确定就可以了 也可以用SQL语句来完成 --收缩数据库 DBCC SHRINKDATABASE(客户资料) --收缩指定数据文件,1是文件号,可以通过这个语句查询到:select * from sysfiles DBCC SHRINKFILE(1) 4.为了最大化的缩小日志文件(如果是sql 7.0,这步只能在查询分析器中进行) a.分离数据库:

大数据的库基本SQL语句大全

数据库基本SQL语句大全 数据库基本----SQL语句大全 一、基础 1、说明:创建数据库 Create DATABASE database-name 2、说明:删除数据库 drop database dbname 3、说明:备份sql server --- 创建备份数据的device USE master EXEC sp_addumpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1.d at' --- 开始备份 BACKUP DATABASE pubs TO testBack 4、说明:创建新表 create table tabname(col1 type1 [not null] [primary key],col2 typ e2 [not null],..) 根据已有的表创建新表: A:create table tab_new like tab_old (使用旧表创建新表) B:create table tab_new as select col1,col2…from tab_old defini tion only 5、说明:删除新表 drop table tabname 6、说明:增加一个列 Alter table tabname add column col type 注:列增加后将不能删除。DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度。 7、说明:添加主键:Alter table tabname add primary key(col) 说明:删除主键:Alter table tabname drop primary key(col) 8、说明:创建索引:create [unique] index idxname on tabname(col….) 删除索引:drop index idxname 注:索引是不可更改的,想更改必须删除重新建。 9、说明:创建视图:create view viewname as select statement

相关文档
最新文档