2013年12月 的存档
2013十二月16

增加新列赋值问题

sql server 评论关闭

指定了默认值
若增加了 not null限制,则自动将所有的新列值赋予默认值。
或者不加 not null限制,但指定 with values修饰,也会自动将所有的新列值赋予默认值。
只有指定了默认值,既没有not null,有没有with values时,才只将新insert的列赋值。
参考:column_definition

USE tempdb;
GO
--Safety Check
IF OBJECT_ID('dbo.test','U') IS NOT NULL
    DROP TABLE dbo.test;
GO

--Create the test table
CREATE TABLE dbo.test ( Col1 INT );
GO

--Insert some test data
INSERT INTO dbo.test ( Col1 )
SELECT 1 UNION ALL
SELECT 2 UNION ALL
SELECT 3 UNION ALL
SELECT 4 UNION ALL
SELECT 5;
GO

--Add a new, NOT NULL column with default constraint
--Use with WITH VALUES clause to also populate the columns
ALTER TABLE dbo.test
    ADD col2 INT NOT NULL DEFAULT(0),
    col3 INT  DEFAULT(0) WITH VALUES,
    col4 INT DEFAULT(0)
    ;
GO

SELECT *
FROM test
2013十二月15

域名解析数据库

sql server 评论关闭

需求:数据库服务器经常变动,每次管理的时候都要更改IP,特别在管理人员比较多的时候,大家都在改IP,比较复杂一些。
解决:做一个域名,解析到服务器IP,大家访问数据库时用域名而不是IP访问。这样,在服务器IP更改时,只需将域名解析更改一下,就全部都更改了。
注:sqlserver会获取域名解析后的IP,当作IP访问,只是多增加了一道解析操作。

2013十二月13

查询谁删除了表数据

sql server 评论关闭
SELECT  AllocUnitName,
[Transaction SID], SUSER_NAME([Transaction SID]) Who,
Operation,[Transaction Id],[Transaction SID],
[Transaction Name],[Begin Time],[End Time],[SPID],Description
FROM fn_dblog(NULL, NULL) 
WHERE Operation = 'LOP_DELETE_ROWS'
AND AllocUnitName NOT LIKE 'sys.%' AND AllocUnitName NOT LIKE 'Unknown Alloc Unit%'
 
2013十二月12

linux软件为什么需要编译安装

linux 评论关闭

linux下软件是开源的,若要自己自定义改些东西,就需要编译,否则copy即可。

服务器CPU事实已经被Intel垄断了,就那么几种型号,编来编去生成的机器码是一样的。Intel宣传自己的编译工具Intel C++ Compiler 比GCC编译出来性能要提升10%-20%,这就是一广告,生产环境很少用人用它,何况它还要收费

性能真不是问题,比如 strip 命令可以大大减小可执行文件的size,但是我装过几千遍软件,都没有见有人在安装脚本里面使用。

软件需要编译安装的真实理由有如下3点:

  1. 软件在编译期间需要配置,比如说nginx,需要在编译的时候指定包含哪些module,php,apache 也是一样。

    同样的是数据库,mysql 通过编译安装,因为要定制存储引擎(是否支持innodb .. ),而sqlite却绝少有人编译,都是直接下载二进制文件来用。

  2. 软件需要统一安装路径,每个team都会自己的安装目录约定,有些喜欢装在 /opt/下面,有些喜欢装在 /usr/local/ ,编译安装可以方便的指定这些路径(configure –prefix=xxx )
  3. 需要最新的版本,软件仓库的版本一般都比较低,这个理由其实不充分,生产环境倾向保守,不追求最新版本,但是对于geek来说,这可能是最重要的原因

弄明白原因之后,就很容易判断编译还是下载:

  • nginx/apache/php/mysql 编译安装
  • python/ruby/java 直接下载
2013十二月11

SQLServer job日志丢失

sql server 评论关闭

查看job日志,发现只有当天的部分,其它的没有了。
原因是默认job日志记录是1000条,修改下即可。
SQLServer代理-属性-历史记录中调整,或者使用如下sql

USE [msdb]
GO
EXEC msdb.dbo.sp_set_sqlagent_properties @jobhistory_max_rows=10000
GO
2013十二月6

检查超过7天未备份的db

sql server 评论关闭
SELECT
dbs.[name] AS DatabaseName
FROM    master.sys.databases dbs
where dbs.database_id <> 2
AND dbs.[name] NOT IN
	(	SELECT
		bus.database_name as 'name'
		FROM msdb.dbo.backupset bus
		INNER JOIN msdb.dbo.backupmediafamily bume ON bus.media_set_id = bume.media_set_id
		WHERE
		dbs.database_id <> 2
		AND dbs.is_in_standby = 0
		AND dbs.source_database_id IS NULL
		AND dbs.[state] <> 1
		AND bus.backup_finish_date >= DATEADD(d, -7, GETDATE())

	)