存档

‘2.数据库’ 分类的存档

MySQL修改库名

2009年12月10日 代码罐头 4 条评论

如果是MyISAM的话.只要修改DATA目录下面的那个库名的文件夹的名字就OK了
如果是INNODB的话.其实是无法修改库名的.网上瞎咧咧的什么RENAME DATABASE或者ALTER DATABASE都是不行的
一种方法是比较保守的.直接把老库的内容mysqldump到新库里面
还有一种类似上面方法.先alter table 的存储引擎到MyISAM,然后改了库目录的名字,然后再改回来INNODB.
最后一种方法还是比较好的.这边详细写一下.
假设源库名是’srcdb’,目标库名是’trgdb’
首先创建目标库
create database trgdb;
获取所有源库的表名
use information_schema;
select table_name from TABLES where TABLE_SCHEMA=’srcdb’;
然后按照以下命令一个个修改
rename table srcdb.[tablename] to trgdb.[tablename];
一个个执行下来之后表就转到新的库里面了.

分类: MySQL 标签:

Sql Server2005 作业下DateAdd函数使用注意

2009年11月23日 Johnny Woo 2 条评论

如下的语句

Declare @Date varchar(10);
set @Date=CONVERT(varchar(10),DATEADD("d",-1,GETDATE()),121);

在SQL SERVER查询分析器内执行正确通过
但是写入SQL作业后,报错
“为 dateadd 指定的参数 1 无效”
根据报错分析到是在dateadd的”d”参数这里有问题
看了下网上的资料.
都说第一个参数是字符串型,内容是”d”或者”y”之类的选项
始终不得其解.后来查阅DATEDIFF的时候到了MSDN上
顺便看下官方的说明
结果发现第一项其实不需要用双引号
datepart | 缩写
year | yy, yyyy
将以上语句替换成

Declare @Date varchar(10);
set @Date=CONVERT(varchar(10),DATEADD(d,-1,GETDATE()),121);

作业执行通过.
可能在查询分析器内做了更多的容错工作.所以此函数可通过,但是作业的实现是稍有差别的.

PS:
其实上面语句还可以用

Declare @Date varchar(10);
set @Date=CONVERT(varchar(10),GETDATE()-1,121);

来代替
执行效率没试过,可能相差无几.

教训:
烂文档不如无文档.网上的文档果然不能轻信.还是去官方看比较稳妥.

分类: MS Sql Server 标签:

Sql语句优化注意

2009年10月27日 Johnny Woo 3 条评论

1.尽量不要对列名进行函数处理.而是针对后面的值进行处理
例如where col1 = -5的效率比where -col1=5的效率要高
因为后面的条件对列值进行了计算.这样的条件下优化器无法使用索引
而是要针对所有值进行计算之后才能再比较

2.尽量使用和数剧列一样的值进行操作
如果col1是数值型
那么例如where col1 = 2和where col1= ’2′
则前者效率更高
因为比较字符和数值型的时候
引擎需要把两者都转化成双精度然后进行比较
这样col1上的索引就失去作用了

3.减少函数的使用
例如where col1 >= ’2009-10-26′ and col1 <= ’2009-10-27′
和where datediff(day,col1,getdate())=0
后者因为用到函数处理.所以col1上的索引又无法使用了

4.尽量不要用OR
一般对于OR的条件
优化器一般会使用全表扫描

分类: MS Sql Server, MySQL 标签:

Sql Server一些转移数据相关内容

2009年10月13日 Johnny Woo 没有评论

jobs的东西保存在msdb里面
link server的东西保存在master里面
但是master每个服务器有不同的加密key
所以导入的link server的远程用户验证的密码转移之后就不行了.

分类: MS Sql Server 标签:

恢复sql server的master库

2009年10月12日 Johnny Woo 没有评论

首先进入单用户模式
sqlservr.exe -m

恢复的顺序
master->msdb->model

运行sqlcmd
1>RESTORE DATABASE [master] FROM
DISK = N’G:\data\master.bak’ WITH FILE = 1,
NOUNLOAD, REPLACE, STATS = 10
2>GO

注意,sql server的版本要一致

分类: MS Sql Server 标签:

mysql同步出错问题

2009年10月12日 ready 1 条评论

mysql>show slave status\G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: xxxxxxxx
                  Master_User: xxxxxxxx
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000036
          Read_Master_Log_Pos: 11719407
               Relay_Log_File: localhost-relay-bin.000338
                Relay_Log_Pos: 911985373
        Relay_Master_Log_File: mysql-bin.000035
             Slave_IO_Running: Yes
            Slave_SQL_Running: No
              Replicate_Do_DB: xxxxxxxx
          Replicate_Ignore_DB:
           Replicate_Do_Table:
       Replicate_Ignore_Table:
      Replicate_Wild_Do_Table:
  Replicate_Wild_Ignore_Table:
                   Last_Errno: 1594
                   Last_Error: Relay log read failure: Could not parse relay log event entry. The possible reasons are: the master’s binary log is corrupted (you can check this by running ‘mysqlbinlog’ on the binary log), the slave’s relay log is corrupted (you can check this by running ‘mysqlbinlog’ on the relay log), a network problem, or a bug in the master’s or slave’s MySQL code. If you want to check the master’s binary log or slave’s relay log, you will be able to know their names by issuing ‘SHOW SLAVE STATUS’ on this slave.
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 911985228
              Relay_Log_Space: 1085463840
              Until_Condition: None
               Until_Log_File:
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File:
           Master_SSL_CA_Path:
              Master_SSL_Cert:
            Master_SSL_Cipher:
               Master_SSL_Key:
        Seconds_Behind_Master: NULL
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error:
               Last_SQL_Errno: 1594
               Last_SQL_Error: Relay log read failure: Could not parse relay log event entry. The possible reasons are: the master’s binary log is corrupted (you can check this by running ‘mysqlbinlog’ on the binary log), the slave’s relay log is corrupted (you can check this by running ‘mysqlbinlog’ on the relay log), a network problem, or a bug in the master’s or slave’s MySQL code. If you want to check the master’s binary log or slave’s relay log, you will be able to know their names by issuing ‘SHOW SLAVE STATUS’ on this slave.
1 row in set (0.00 sec)

注意上面的黑色字体。

执行

mysql>stop slave;
mysql>change master to master_host=’xxxxx’, master_user=’xxxx’,master_password=’xxxxxx’,master_port=3306,master_log_file=’mysql-bin.000036‘,master_log_pos=911985228;
mysql>start slave;

分类: MySQL 标签:

[转载]windows 2003 x64下安装x86 Sql 2005报错解决

2009年10月10日 Johnny Woo 1 条评论

无法在com+目录中安装和配置程序集 错误:-2146233087

无法在com+目录中安装和配置程序集c:\program files\Microsoft SQL Server\90\DTS\tasks\microsoft.sqlserver.MSMQTASK.DLL.
错误:-2146233087

sql server 安装时“无法在COM+目录中安装和配置程序”的解决办法2008-05-17 13:08无法在COM+目录中安装和配置程序集,C:\program files\microsoft SQL Server\90

\NotificationServices\9.0.242\Bin\microsoft.sqlserver,notificationservices.dll。错误:-

2146233087
错误消息:Unknown error 0×80131501
错误说明:事务管理器可用。(异常来自HRESULT:0x8004D01B)

【解决办法】
这时候可以暂停安装,不要点击中止、忽略,也不要点击取消
按以下步骤
1.删除注册表中的键:
\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MSDTC
\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSDTC
\HKEY_CLASSES_ROOT\CID
2、使用cmd执行 停止MSDTC服务:net stop msdtc
3、使用cmd执行 卸载MSDTC服务:msdtc -uninstall
4、使用cmd执行 重新安装MSDTC服务:msdtc -install

分类: MS Sql Server 标签:

快递搭建企业级邮件系统iRedMail+Mysql+Postfix+php

2009年9月2日 Michael Field 4 条评论

一 软件环境
最近负责一个公司网站和邮件系统的搭建,以前自己一直没有仔细的研究过邮件系统的从零开始搭建工作,趁现在工作之余也同时将文档整理一次;
主要针对快捷高效搭建,简单实用为主,基本够一个人数50-100的小型公司使用。

操作系统:CentOS release 5.3 (Final) x86_64
数据库:mysql Ver 14.12 Distrib 5.0.45
php:php 5.2 up
邮件系统:postfix 2.5.6 + iredmail 0.4.0
webmail:RoundCube 1.0.2

iRedMail 0.4.0 下载地址:戳这里

二 安装过程
因许多软件涉及到yum安装,这里我给出国内一个非常快的Centos镜像,请戳这里下载
1. 数据库和邮件系统安装
mysql 安装和postfix 安装 全部采取yum安装

———————————————-
$ yum install -y mysql mysql-server mysql-devel
$ yum install -y postfix

2.php安装

———————————————-
$ yum install -y php php-ldap php-gd php-imap php-mysql php-pear php-mbstring

3.iredmail 安装
下载解压 iRedMail-0.4.0.tar.bz2
安装指令:

———————————————-
$ cd /path/to/iRedMail-x.y.z/
$ cd pkgs/
$ sh get_all.sh
$ cd ../
$ sh iRedMail.sh

安装过程详细介绍请参看:戳这里
注:
a:安装之前请先行设定mysql的root帐号和密码;空密码不被接受;
b:其中数据库只需选择mysql即可;
c:webprogrem选择RoundCube即可,其他默认;
d:请记住设定的mail admin的帐号和密码。

三 配置过程
因为iRedMail的高度整合,使得配置过程异常的简单。甚至可以不需要对postfix进行多余设定;
注意修改以下基本配置:iRedmail安装过程中已经增加的这部分设定,请在配置文件的最末尾处修改

1. myorigin
myorigin参数指明发件人所在的域名。如果你的用户的邮件地址为user@domain.com,则该参数指定@后面的域名。缺省地,postfix使用本地主机名作为myorigin,但是建议你最好使用你的域名,因为这样更具有可读性。比如:安装postfix的主机为 mail.domain.com则我们可以这样指定myorigin:

myorigin = domain.com
当然我们也可以引用其他参数,如:
myorigin = $mydomain

2. mydestination
mydestination参数指定postfix接收邮件时收件人的域名,换句话说,也就
是你的postfix系统要接收什么样的邮件。比如:你的用户的邮件地址为user@domain.com, 也就是你的域为domain.com, 则你就需要接收所有收件人为user_name@domain.com的邮件。与myorigin一样,缺省地,postfix使用本地主机名作为 mydestination。如:

mydestination = $mydomain
mydestination = domain.com

3. notify_classes
在postfix系统中,必须指定一个postfix系统管理员的别名指向一个用户,
只有这样,在用户遇到问题时才有报告的对象,postfix也才能将系统的问题报告给管理员。notify_classes参数就是用来指定向postfix管理员报告错误时的信息级别。共有以下几种级别:

bounce:将不可以投递的邮件的拷贝发送给postfix管理员。出于个人隐私的缘故,该邮件的拷贝不包含信头。

2bounce:将两次不可投递的邮件拷贝发送给postfix管理员。

delay:将邮件的投递延迟信息发送给管理员,仅仅包含信头。

policy:将由于UCE规则限制而被拒绝的用户请求发送给postfix管理员,包含整个SMTP会话的内容。

protocol:将协议的错误信息或用户企图执行不支持的命令的记录发送给postfix管理员。同样包含整个SMTP会话的内容。

resource:将由于资源错误而不可投递的错误信息发送给postfix管理员,比如:队列文件写错误等等。

software:将由于软件错误而导致不可投递的错误信息发送给postfix管理员。

缺省值为:

notify_classes = resource, software

4.myhostname
myhostname 参数指定运行postfix邮件系统的主机的主机名。缺省地,该值被设定为本地机器名。你也可以指定该值,需要注意的是,要指定完整的主机名。如:

myhostname = mail.domain.com

5.mydomain
mydomain参数指定你的域名,缺省地,postfix将myhostname的第一部分删除而作为mydomain的值。你也可以自己指定该值,如:

mydomain = domain.com

6.mynetworks
mynetworks 参数指定你所在的网络的网络地址,postfix系统根据其值来区别用户是远程的还是本地的,如果是本地网络用户则允许其访问。你可以用标准的A、B、C类网络地址,也可以用CIDR(无类域间路由)地址来表示,如:

192.168.1.0/24
192.168.1.0/26

7.inet_interfaces
inet_interfaces 参数指定postfix系统监听的网络接口。缺省地,postfix监听
所有的网络接口。如果你的postfix运行在一个虚拟的ip地址上,则必须指定其监听的地址。如:

inet_interfaces = all
inet_interface = 192.168.1.1

关于postfix的配置详细介绍可参看戳这里
需要注意的是dovecat配置在main.cf中的和master.cf的端口一致;否则会导致邮件发送失败;

———————————————-
#main.cf
content_filter = smtp-amavis:[127.0.0.1]:10024
#master.cf
127.0.0.1:10024 inet n – – – – smtpd
-o content_filter=
-o local_recipient_maps=
-o relay_recipient_maps=
-o smtpd_restriction_classes=
-o smtpd_delay_reject=no
-o smtpd_client_restrictions=permit_mynetworks,reject
-o smtpd_helo_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=permit_mynetworks,reject
-o mynetworks_style=host
-o mynetworks=127.0.0.0/8
-o strict_rfc821_envelopes=yes
-o smtpd_error_sleep_time=0
-o smtpd_soft_error_limit=1001
-o smtpd_hard_error_limit=1000
-o smtpd_client_connection_count_limit=0
-o smtpd_client_connection_rate_limit=0
-o receive_override_options=no_header_body_checks,no_unknown_recipient_checks

以上设定完成后,确认启动postfix、policyd、dovecot、httpd、mysqld;

四、测试过程
1. 访问:http://your_server/mail/
webmail
以上设定正确,请登录测试发送邮件是否正常;

2. 增加邮件用户和邮箱容量大小配额设定
a.首先登录mysql;
b.依次执行以下指令:

———————————————-
mysql> use vmail;
Database changed
mysql> INSERT INTO mailbox (username, password, name, maildir, quota, domain, active)
-> VALUES (‘testuser@hiadmin.com’, ‘$1$W.UWoG.0$Bnq8mcbsi1UhFVpiJ2jvY0′, ‘testuser’, ‘hiamdin.com/testuser/’, ’2048′, ‘hiadmin.com’, ’1′);
Query OK, 1 row affected (0.00 sec)
注:
#在mailbox生成用户帐号、密码、以及邮箱容量quota 2048为2GB
#其中password字段值,可以使用 openssl passwd -1 testuser生成;

mysql> INSERT INTO alias (address, goto, domain, active)
-> VALUES (‘testuser@hiadmin.com’, ‘testuser@hiadmin.com’, ‘hiadmin.com’, ’1′);
Query OK, 1 row affected (0.00 sec)
注:
#alias 中生成别名;

c.也可以用iRedmail的tools 脚本;

———————————————-
$cd /path/to/iRedMail-0.4.0/tools #该目录下有个create_mail_user_MySQL.sh的脚本,可以为你生成增加用户的sql语句;
#执行脚本前实现生成userlist.txt
$echo testuser >userlist.txt #每行一个用户名即可
$sh create_mail_user_MySQL.sh userlist.txt #生成output.sql
#登录到mysql,在vmail库中执行
mysql> source /path/to/output.sql

d.设定自己域名的mx记录,再登录RoundCube测试能否收发邮件!

[收藏]Server 'myserver' is not configured for RPC

2009年7月17日 admin 没有评论

Server ‘myserver’ is not configured for RPC

Problem: On a Microsoft SQL Server 2005 installation with a linked server configured to “myserver” (which happens to be 2000), execution of a remote stored procedure (EXEC myserver.mydatabase.dbo.mysproc) fails with error:

Msg 7411, Level 16, State 1, Line 1
Server ‘psp6new’ is not configured for RPC.
Solution: Problem is most likely that RPC is not configured for your linked server. That is not a default option, after all. You can see what settings are configured with exec sp_helpserver.

If ‘rpc,rpc out’ is not in your results, then the the linked server isn’t configured for RPC. To do so:

exec sp_serveroption @server=’myserver’, @optname=’rpc’, @optvalue=’true’
exec sp_serveroption @server=’myserver’, @optname=’rpc out’, @optvalue=’true’

分类: MS Sql Server 标签:

[收藏]MSSQL数据库变为单用户问题解决

2009年7月17日 Johnny Woo 2 条评论
下载: code.txt
  1. USE master;
  2. GO
  3. DECLARE @SQL VARCHAR(MAX);
  4. SET @SQL=''
  5. SELECT @SQL=@SQL+'; KILL '+RTRIM(SPID)
  6. FROM master..sysprocesses
  7. WHERE dbid=DB_ID('WebMedia7');
  8.  
  9. EXEC(@SQL);
  10.  
  11. GO
  12.  
  13. ALTER DATABASE WebMedia7 SET MULTIUSER;
分类: MS Sql Server 标签: