韧毅's profile澹水湖边PhotosBlogListsMore Tools Help

Blog


    November 15

    压缩日志及数据库文件大小

    /*--特别注意
    请按步骤进行,未进行前面的步骤,请不要做后面的步骤
    否则可能损坏你的数据库.

    一般不建议做第4,6两步
    第4步不安全,有可能损坏数据库或丢失数据
    第6步如果日志达到上限,则以后的数据库处理会失败,在清理日志后才能恢复.
    --*/
    --下面的所有库名都指你要处理的数据库的库名
    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 = '库名'
    b.删除日志文件
    c.再附加
    EXEC sp_attach_single_file_db @dbname = '库名',
       @physname = 'c:\Program Files\Microsoft SQL Server\MSSQL\Data\库名.mdf'
    5.为了以后能自动收缩,做如下设置:
    企业管理器--服务器--右键数据库--属性--选项--选择"自动收缩"
    --SQL语句设置方式:
    EXEC sp_dboption '库名', 'autoshrink', 'TRUE'
    6.如果想以后不让它日志增长得太大
    企业管理器--服务器--右键数据库--属性--事务日志
    --将文件增长限制为xM(x是你允许的最大数据文件大小)
    --SQL语句的设置方式:
    alter database 库名 modify file(name=逻辑文件名,maxsize=20)

    windows系统日志 插入SQL表里 无需软件(转)

    把WINDOWS研究个透 发现了这个好东西
    eventquery.vbs /S "guanjm" /FO "table"
    -nh -l application >D:\application.txt
    这样输出到文本
    以下格式
    Eventquery.vbs列出一个或多个事件日志中的事件和事件属性。
    语法
    eventquery[.vbs] [/s Computer [/u Domain\User [/p Password]]] [/fi FilterName] [/fo {TABLE|LIST|CSV}] [/r EventRange [/nh] [/v] [/l [APPLICATION] [SYSTEM] [SECURITY] ["DNS server"] [UserDefinedLog] [DirectoryLogName] [*] ]
    参数
    /s Computer
    指定远程计算机名称或 IP 地址(不能使用反斜杠)。默认值是本地计算机。
    /u Domain\User
    运行具有由 User 或 Domain\User 指定的用户的帐户权限的脚本。默认值是当前登录发布命令的计算机的用户权限。
    /p Password
    指定用户帐户的密码,该用户帐户在 /u 参数中指定。
    /fi FilterName
    指定要包括在查询中的事件的类型,或指定要从查询中排除的事件的类型。要查找具有任一值的事件,可通过使用运算符 or 在单个语法语句中结合使用“类型”和 ID。下列是有效筛选器名、运算符和值。名称 运算符 值
    日期时间 eq, ne, ge, le, gt, lt mm/dd/yy(yyyy), hh:mm:ssAM(/PM)
    类型 eq, ne, or {ERROR|INFORMATION|WARNING|SUCCESSAUDIT|FAILUREAUDIT}
    ID eq, ne, or, ge, le, gt, lt 任何有效的正整数。
    用户 eq, ne 任何有效字符串。
    计算机 eq, ne 任何有效字符串。
    源 eq, ne 任何有效字符串。
    分类 eq, ne 任何有效字符串
    /fo {TABLE|LIST|CSV}
    指定输出所用的格式。有效值为 table、list 和 csv。
    /r EventRange
    指定要列出的事件的范围。 值 说明
    N 列出 N 个最新的事件。
    -N 列出 N 个最旧的事件。
    N1-N2 列出从 N1 到 N2 的事件。
    /nh
    取消输出结果中的列标题。仅适用于 table 和 csv 格式。
    /v
    指定显示在输出结果中的详细事件信息。
    /l [APPLICATION] [SYSTEM] [SECURITY] ["DNS server"] [UserDefinedLog] [DirectoryLogName] [*] ]
    指定要监视的日志。有效值为 Application、System、Security、"DNS server"、用户自定义日志以及 Directory 日志。只有在由 /s 参数指定的计算机上运行 DNS 服务的情况下,才可以使用 "DNS server"。要指定多个要监视的日志,请重新使用 /l 参数。可以使用通配符 (*),并且是默认值。
    /?
    在命令提示符显示帮助。
    注释
    要运行此脚本,必须正在运行 Cscript。如果尚未将默认 Windows Script Host 设置为 Cscript,请键入:
    cscript //h:cscript //s //nologo
    范例
    下面的范例显示如何使用 eventquery 命令:
    eventquery /l system
    eventquery /l mylog
    eventquery /l application /l system
    eventquery /s srvmain /u maindom\hiropln /p p@ssW23 /v /l *
    eventquery /r 10 /l application /nh
    eventquery /r -10 /fo LIST /l security
    eventquery /r 5-10 /l "DNS server"
    eventquery /fi "Type eq Error" /l application
    eventquery /fi "Datetime eq 06/25/00,03:15:00AM/06/25/00,03:15:00PM" /l application
    eventquery /fi "Datetime gt 08/03/00,06:20:00PM" /fi "id gt 700" /fi "Type eq warning" /l system eventquery /fi "ID eq 1000 OR ID ge 4500" eventquery /fi "Type eq error OR Type eq INFORMATION" eventquery /fi "ID eq 250 OR Type eq ERROR"
     
     
    November 12

    劳而固穷

    刚看了日本NHK拍的一部记录片,也是劳而固穷,说的是日本的贫困阶层,
    所谓的“穷忙族”,拼命工作,拼命工作,拼命工作,但是还是摆脱不了现在的境地
    其实这个在中国何尝没有,我们的父母,他们努力的工作,希望有个好的结果
    然而事实总是与愿望相反的,还是穷困着
    被教育,医疗,整个社会折磨着
    只是我们的媒体总是形式大好越来越好的宣传着
    很少有人真正关注着这个群体
    而做为他们后代的我们,也会继续被整个大环境折磨
    “少年智则国智,
    少年富则国富,
    少年强则国强,
    少年独立则国独立,
    少年自由则国自由,
    少年进步则国进步,
    少年胜于欧洲,
    则国胜于欧洲,
    少年雄于地球,
    则国雄于地球。”
    梁启超如是说
     
    NHK的记录片看了不少,觉得还比较客观,当然我好久没有看中国产的历史记录片了
    不能说他们造假,只是觉得真相被掩盖了太多,
    就如在香港科技大学演讲的一位教授回答的:“假的不一定有,但是真的可以被掩盖”
    现在没有事情在论坛上老是能看到一帮人,吵吵着要回到老毛时代
    说老毛时代的中国简直就是世界上最好的社会了
    但是我们说现实不好的时候,
    他们又跳出来说:你看现在多好,换成以前你就没有了
    脑子混乱到这个程度也挺佩服他们的
    看看gfw和论坛上删帖的频率,你就知道中国是需要再开放点,再自由点
     
    写的好乱,对于文字的驾驭能力有待提高
     
    November 11

    Happy Bachelor's Day!!

    不知道什么时候起,11月11号变成了光棍节
    因为到现在也没有女朋友,所以我也是光棍节的适宜人群了
    没有什么太多感觉,光棍就光棍吧
    虽然很多时候会感觉孤独,没有人说话
    但是至少还有一点好处,自由
     
    这两天冷空气来了,降温了
    同时天也变干燥了,脸上开始脏起来
    昨天去派出所换身份证,数码照上的我,脸色发黑
    看上去不是那么健康的样子
    的确,现在脸上痘痘多了出来,比夏天还多
    估计是这张脸不适应这边的气候,虽然在南京5年多了
    除了痘痘还有些皮炎一样的症状
    每次气候转变的时候就这个样子
    怎么办,怎么办
     
    November 08

    我是个流氓,请不要相信我

    一直自认为自己是个好男人,
    也一直在朋友,同学面前吹嘘自己是个好男人,
    但是什么才是好男人的标准呢?
    我不知道!
    那我怎么知道我是个好男人?
    我也不知道!
    那什么是流氓?
    我不知道!
    那我怎么确定自己不是流氓?
    我也不知道!
     
    恩,还是做个流氓好,听说好男人都活的很累
    November 02

    发现自己QQ空间里面一篇将近一年前转的文章

    人的一生,有三件事情不能等
    发表时间:2005年11月21日 22时19分
    [%repeat_0 match="/data/option"%] [%_repeat_0%]
    [%=@title%] [%=@count%]票 [[%=@percent%]%]

    提交
            第一是“贫穷”
    贫穷不能等,因为一但时间久了,你将习惯贫穷,到时不但无法突破自我,甚至会抹杀了自己的梦想,而庸庸碌碌的过一辈子。。。。。。
            第二是“梦想”
    梦想不能等,因为人生不同的阶段,会有不同的历练和想法,试想一个问题:如果你20岁时的梦想,在60岁的时候才得以实现,那会是什么样的一个情况???
        譬如说你20岁时的梦想是希望能买到一辆法拉利的跑车,然后到德国的无限速公路狂飙。你一直努力工作,好不容易到60岁了,总算买得起跑车了,但要实现年轻时的梦想,恐怕也是心有余而力不足吧。。。。。。
            第三是“家人”
    家人不能等,或许我们还年轻,未来有很多的时间可以让我们摸索、打拼,但是家人吗?他们还有时间等我们成功吗???还有时间等我们赚到钱,让他们过好日子,让他们以我们为荣???
        树欲静而风不止,子欲养而亲不待。。。。。。这是很多人的痛,也是很多人一辈子的遗憾。

    人的上半生:要不犹豫;

    人的下半生:要不后悔;

    活在当下,把握每次的机会,因为机会稍纵即逝,为自己的生命找到出路! 最近在经济日报看到一篇由郑丹瑞写的文章,值得分享,内容如下。
    急事,慢慢的说;
    大事,清楚的说;
    小事,幽默的说;
    没把握的事,谨慎的说;
    没发生的事,不要胡说;
    做不到的事,别乱说;
    伤害人的事,不能说;
    讨厌的事,对事不对人的说;
    开心的事,看埸合说;
    伤心的事,不要见人就说;
    别人的事,小心的说;
    自己的事,听听自己的心怎么说;
    现在的事,做了再说;
    未来的事,未来再说。
    有缘人,共勉之!
     
    我做到了吗
     

    一些SQL语句

    1. 如何取得一个数据表的所有列名

    方法如下:先从SYSTEMOBJECT系统表中取得数据表的SYSTEMID,然后再SYSCOLUMN表中取得该数据表的所有列名。
    SQL语句如下:
    declare @objid int,@objname char(40
    )
    set @objname = 'tablename'

    select @objid = id from sysobjects where id = object_id(@objname)
    select 'Column_name' = name from syscolumns where id = @objid order by
     colid

    是不是太简单了? 呵呵 不过经常用阿.

    2
    . 通过SQL语句来更改用户的密码

    修改别人的,需要sysadmin role 
    EXEC sp_password NULL'newpassword''User'


    如果帐号为SA执行EXEC sp_password 
    NULL'newpassword', sa 

    3
    . 怎么判断出一个表的哪些字段不允许为空?

    select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where IS_NULLABLE='NO' and TABLE_NAME=
    tablename 

    4
    . 如何在数据库里找到含有相同字段的表?
    a. 查已知列名的情况
    SELECT b.name as TableName,a.name as
     columnname 
    From syscolumns a INNER JOIN
     sysobjects b 
    ON a.id=
    b.id 
    AND b.type='U'
     
    AND a.name='你的字段名字'
     

    b. 未知列名查所有在不同表出现过的列名
    Select o.name As tablename,s1.name As
     columnname 
    From
     syscolumns s1, sysobjects o 
    Where s1.id =
     o.id 
     
    And o.type = 'U'
     
     
    And Exists
     ( 
     
    Select 1 From
     syscolumns s2 
     
    Where s1.name =
     s2.name 
     
    And s1.id <>
     s2.id 
     )

    5
    . 查询第xxx行数据

    假设id是主键: 
    select *
     
    from (select top xxx * from
     yourtable) aa 
    where not exists(select 1 from (select top xxx-1 * from yourtable) bb where aa.id=
    bb.id)
     
    如果使用游标也是可以的 
    fetch absolute [number] from [cursor_name]
     
    行数为绝对行数
       
       6.如果表中某一列为Indentity列,必须加入如下一句话才能向其中手动添加值,同时别忘了关掉
       
    SET IDENTITY_INSERT TestName ON 
      SET IDENTITY_INSERT TestName OFF
     
       7.SQL Server日期计算
          a. 一个月的第一天
             SELECT DATEADD(mm,  DATEDIFF(mm,0,getdate()),  0)  
          b. 本周的星期一
             SELECT  DATEADD(wk,  DATEDIFF(wk,0,getdate()),  0)
          c. 一年的第一天
             SELECT  DATEADD(yy,  DATEDIFF(yy,0,getdate()),  0)  
          d. 季度的第一天
             SELECT  DATEADD(qq,  DATEDIFF(qq,0,getdate()),  0)  
          e. 上个月的最后一天
             SELECT  dateadd(ms,-3,DATEADD(mm,  DATEDIFF(mm,0,getdate()),  0))  
          f. 去年的最后一天
             SELECT  dateadd(ms,-3,DATEADD(yy,  DATEDIFF(yy,0,getdate()),  0))
          g. 本月的最后一天
             SELECT  dateadd(ms,-3,DATEADD(mm,  DATEDIFF(m,0,getdate())+1,  0))  
          h. 本月的第一个星期一
             SELECT DATEADD(wk,  DATEDIFF(wk,0, dateadd(dd,6-datepart(day,getdate()),getdate())),  0)      
           i. 本年的最后一天
             SELECT  dateadd(ms,-3,DATEADD(yy,  DATEDIFF(yy,0,getdate())+1,  0))。