2011年3月30日 | 分类: 软件 | 标签: , , , , ,

        最近用Symantec Backup Exec 2010做Exchange 2007备份,备份都完全没有问题,而且很成功,但是在还原时始终无法还原成功,选择源时可以展开Mailbox Database并可以看到里面备份的邮箱,但是在做还原测试时,始终提示如下错误:

        完成状态: 失败
       最终错误: 0xe000848c – 无法挂接到资源。请确保选择的所有资源都存在且联机,然后重试。如果服务器或资源已不存在,则请从选择项列表中将其删除。编辑选择项列表属性,单击“所选细节视图”选项卡,然后删除资源。
       最终出错类别: 资源出错

       有关此错误的其它信息,请参考相应的链接 V-79-57344-33932

       通过Google搜索查询,最终确定问题所在,现总结如下,以供参考:

        1. 要想成功恢复,必须要确保Backup Exec的登录帐户具有Exchange管理员权限,相信这个地球人都知道。

        2. 要确保这个登录帐户在Exchange中有邮箱。

        3. 这个登录帐户的邮箱一定不能隐藏,我的错误就在于将这个邮箱隐藏掉了。

        以下只是有人也这么说的:

       4. 备份时不能打开AOF。

        5. 要在Exchange2007和Backup Server上都安装MAPI/CDO。

       我觉得就重点注意第2、3点就可以了,问题基本就能解决。

Written by Nile Jiang
无猖狂以自彰,当阴沉以自深。
没有评论 (6,059 views)

在Exchange服务器中有时为了安全需要为某些邮件组设置发送权限,即只有个别人的邮箱可以向里面发送邮件。在EMC中,我们只要双击打开某个邮件组,点击“邮件流设置->邮件传递限制”,选择“仅限以下列表中的发件人”,然后添加要赋予权限的邮箱或邮件组即可。这个操作也可以通过Power Shell来操作完成,在Exchange中,操作邮件组的命令是set-distributionGroup命令,通过它的参数,我们几乎可以设置一个邮件组的所有属性,而针对设置邮件传递限制,命令如下:

如果要设置某个人有发送权限,示例如下:

set-distributiongroup -Identity group@usefulshare.com  -AcceptMessagesOnlyFrom test1@usefulshare.com

如果要设置某个组的成员有发送权限,示例如下:

set-distributiongroup -Identity group@usefulshare.com -AcceptMessagesOnlyFromDLMembers test@usefulshare.com

如果要取消个人或组的发送权限,即恢复成默认的所有发件人都有发送权限,示例如下:

set-distributiongroup -Identity group@usefulshare.com  -AcceptMessagesOnlyFrom $null

set-distributiongroup -Identity group@usefulshare.com -AcceptMessagesOnlyFromDLMembers $null

如果是单独操作一两个邮件组,我们只要在EMC中操作就可以了,但是如果要同时操作很多的话,我们就可以通过这个命令写Power Shell脚本来批量执行了,意义还是不小的。

set-distributiongroup命令的所有参数可参考http://technet.microsoft.com/en-us/library/bb124955(EXCHG.80).aspx

Written by Nile Jiang
无猖狂以自彰,当阴沉以自深。
没有评论 (5,119 views)

作为一个系统管理员,需要应付各种疑难杂症,我们一般可能不会犯错,但是我们要时刻准备好解决同事或领导犯错所带来的问题。比如说一个领导错将一封重要邮件发给了公司大部分员工,或者因为某个人电脑中毒而发了一封有毒的电子邮件给很多员工,这时就需要我们发挥作用及时的在服务器上从这些人的邮箱中删除这封邮件(准确的说应该叫移除)——在用户还没有把这封邮件存到本地PST数据文件的情况下。我们可以使用Exchange提供的export-mailbox命令来完成此工作,步骤如下:

1. export-mailbox命令要在Exchange Management Shell(Exchange 命令行工具)下运行,它是将邮件从源邮箱移到目标邮箱,所以这里务必需要运行EMS的用户要有源邮箱和目标邮箱的完全管理权限。设置邮箱的完全管理权限可以通过在EMC中在邮箱账户上单击鼠标右键选择“管理完全访问权限”,添加运行EMS的账户。或者通过以下命令来进行单个邮箱或多个邮箱的管理权限设置:

get-mailbox nilejiang | Add-MailboxPermission -User 管理员账号 -accessRights fullaccess

get-mailbox -OrganizationalUnit “OU路径” |  Add-MailboxPermission -User 管理员账号 -accessRights fullaccess

Add-MailboxPermission命令详解:http://technet.microsoft.com/en-us/library/bb124097(EXCHG.80).aspx

2. 赋予权限之后,我们就可以使用export-mailbox命令来转移邮件,方法如下:

Export-Mailbox -Identity nile@usefulshare.com -TargetMailbox mailadmin@usefulshare.com -TargetFolder test -SubjectKeywords “Virus message” -DeleteContent

Get-Mailbox -OrganizationalUnit “OU路径” | Export-Mailbox -TargetMailbox mailadmin@usefulshare.com -TargetFolder test -SubjectKeywords “Virus message” -DeleteContent
export-mailbox命令的详细参数可参照:http://technet.microsoft.com/zh-cn/library/aa998579(EXCHG.140).aspx

命令运行后会提示移动成功,并在admin的邮箱下创建test文件夹,里面的Recovered Data下即有移动过来的邮件,并且在源邮箱中删除该邮件。如果命令执行失败,则会出现红字报错。如果提示 MAPI或某个未指定的服务提供程序,则是因为对源邮箱或目标邮箱没有完全管理权限导致的。

3. 直接删除发送到某个邮箱里的某封邮件,如:

Export-Mailbox -identity nile@usefulshare.com -Senderkeywords “jiang@usefulshare.com” -SubjectKeywords “要删除邮件的主题” -DeleteContent -confirm:$false

4. 移除帐户A对帐户B的完全管理权限:

get-mailbox nile@usefulshare.com | Remove-MailboxPermission -User jiang@usefulshare.com -InheritanceType All -accessRights fullaccess -confirm:$false

扩展一下,使用此命令当然也就可以在不Disable Mailbox的情况下在服务器上的EMS中删除邮箱中的所有邮件,命令如下:

[PS] C:\WINDOWS\system32>Export-Mailbox -Identity test@usefulshare.com -SubjectKeywords * -DeleteContent

Written by Nile Jiang
无猖狂以自彰,当阴沉以自深。
没有评论 (6,703 views)
2011年3月28日 | 分类: Linux | 标签: , , , , ,

环境简介

dc:10.10.0.3(win2008R2),domain:test.cn;

tacacs+(server):10.10.0.4(ubuntu),user:root;switch:10.10.0.1;

apt-get update

apt-get install gcc

cd /

mkdir temp

cd temp

wget http://www.pro-bono-publico.de/projects/src/DEVEL.tar.bz2

#(人家修改过的可以跟AD 集成的tacacs+包)

wget http://search.cpan.org/CPAN/authors/id/G/GB/GBARR/perl-ldap-0.39.tar.gz

#需要安装perl-ldap,按默认提示安装

tar zxvf perl-ldap-0.39.tar.gz      

cd perl-ldap-0.39

perl Makefile.PL

make

make test

make install

cd ..

bzip2 -dc DEVEL.tar.bz2 | tar xvfp -    #解压下载好的包

cd PROJECTS

make

make install

cp tac_plus/doc/tac_plus.cfg-ads /usr/local/etc/tac_plus.cfg

#复制配置文件到指定目录

vi /usr/local/etc/tac_plus.cfg

#根据需要更改tac_plus.cfg,如下:

#!/usr/local/bin/tac_plus

id = spawnd {

        listen = { port = 49 }

        spawn = {

                instances min = 1

                instances max = 10

        }

        background = yes

}

id = tac_plus {

         access log = /var/log/tac_plus/access/%Y%m%d.log

         accounting log = /var/log/tac_plus/acct/%Y%m%d.log

        mavis module = external {

                setenv LDAP_SERVER_TYPE = “microsoft”

                setenv LDAP_HOSTS = “10.10.0.3:3268 TestDC-tacacs:3268″

                setenv LDAP_BASE = “dc=test,dc=cn”

                setenv LDAP_USER = “tacacs@test.cn”

                setenv LDAP_PASSWD = “abcd.1234″

                setenv REQUIRE_TACACS_GROUP_PREFIX = 1

                exec = /usr/local/lib/mavis/mavis_tacplus_ldap.pl

        }

        login backend = mavis

        user backend = mavis

        pap backend = mavis

        host = world {

                address = ::/0

                prompt = “Welcome\n”

                enable 15 = clear cisco    #switch enable password 为cisco

                key = cisco

        }

        group = admin {

                default service = permit

                service = shell {

                        default command = permit

                        default attribute = permit

                        set priv-lvl = 15

                }

        }

        group = guest {

                default service = permit

        #       enable = deny

                service = shell {

                        default command = permit

                        default attribute = permit

                        set priv-lvl = 9

                }

        }

}     

:wq

#保存退出

#(我们需要在AD中建立用户和组,上边配置文件中的 tacacs用户用来查询AD。配置文件中还设定了2个组,一个是admin,一个是guest,设置不同的权限,我们需要再AD中设置相应的组,来对应这两个组。默认的前缀为tacacs,即在AD 中建立tacacsadmin组对应tacacs+中的admin组,tacacsguest组对应tacacs+中的guest组,使用mavis中的TACACS_GROUP_PREFIX参数可以修改此前缀。setenv REQUIRE_TACACS_GROUP_PREFIX = 1 的意思是只有属于有tacacs前缀的组的用户才能登陆了交换机。testa属于tacacsguest,testc属于tacacsadmin)

/usr/local/lib/mavis/mavis_tacplus_ads.pl < /dev/null

#测试mavis,需要perl-ldap,我们已经安装

/usr/local/bin/tac_plus -P /usr/local/etc/tac_plus.cfg

#测试tac_plus.cfg有没有错误

/usr/local/bin/mavistest -d -1 /usr/local/etc/tac_plus.cfg tac_plus TAC_PLUS testa

#测试与AD的通信

cp tac_plus/doc/etc_init.d_tac_plus /etc/init.d/tac_plus

#复制tac_plus的脚本到/etc/init.d

/etc/init.d/tac_plus start

or

/usr/local/bin/tac_plus /usr/local/etc/tac_plus.cfg

#启动tac_plus

交换机配置:

aaa new-model
aaa authentication login default group tacacs+ enable
aaa authentication enable default group tacacs+ enable
aaa authorization exec default group tacacs+ if-authenticated

aaa authorization commands 9 default group tacacs+ if-authenticated
aaa authorization commands 15 default group tacacs+ if-authenticated
aaa authorization network default group tacacs+ if-authenticated
aaa accounting exec default start-stop group tacacs+

aaa accounting commands 9 default start-stop group tacacs+
aaa accounting commands 15 default start-stop group tacacs+
aaa accounting system default start-stop group tacacs+

aaa accounting network default stop-only group tacacs+
aaa session-id common
tacacs-server host 10.10.0.1 single-connection
tacacs-server directed-request

tacacs-server key 7 cisco

#双向加密(type 7) : 命令service password-encryption自动对配置中的密码加密。

Written by an6097
没有评论 (14,871 views)
2011年3月28日 | 分类: Linux | 标签: , , , , ,

        前边提过使用deb包安装bandwidthd,现在来说一下自己编译安装bandwidthd和postgresql,使用linux系统的朋友都可以用这种方式来安装。

环境说明:

hostname=BK3,安装时用户为netuser,domain=localdomain;

1.准备

1.1安装apache2并支持php

1.1.1安装所需要的包

apt-get install apache2

apt-get install php5

apt-get install php5-pgsql

apt-get install php5-gd

1.1.2重启apache2

/etc/init.d/apache2 restart

1.1.3测试

在/var/www下建立php文件

vi /var/www/info.php

输入 <?php phpinfo();?>

保存退出wq

在浏览器里访问http://ip/info.php

1.2安装其他所需软件

apt-get install gcc

apt-get install flex (lex)

apt-get install bison (yacc)

1.3编译并安装bandwidthd所需要的库

安装zlib

安装libpng

安装libgd

安装libpcap

加以下参数

./configure –prefix=/usr/

2.安装配置postgresql

2.1安装所需要的包

apt-get install zlib1g

apt-get install libreadline5-dev

2.2为postgresql创建账户

useradd postgres

给账户建立主目录

mkdir /home/postgres

将账户的主目录设为刚建立的文件夹

usermod -d /home/postgres

设置账户使用bash(否则su posgres后,只有$)

usermod -s /bin/bash postgres

2.3编译安装(必须将pgsql安装在/usr/local/pgsql下,编译bandwidthd时,它只会到此处查找pgsql,如果找不到编译后就不支持pgsql)

tar zxvf postgresql-8.4.3.tar.gz

./configure –prefix=/usr/local/pgsql

make && make install

2.4配置

2.4.1修改环境变量

在/etc/profile中加入下列内容:

PATH=/usr/local/pgsql/bin:$PATH

export PATH

MANPATH=/usr/local/pgsql/man:$MANPATH

export MANPATH

LD_LIBRARYPATH=/usr/local/pgsql/lib:$LD_LIBRARYPATH

export LD_LIBRARYPATH

执行. /etc/profile使修改的环境变量立即生效,说明.和/之间有空格

2.4.2创建数据库目录并赋予权限

mkdir /usr/local/pgsql/data

mkdir /usr/local/pgsql/log

touch /usr/local/pgsql/log/syslog.log

chown postgres /usr/local/pgsql/data

chown postgres /usr/local/pgsql/log

2.4.3以postgres身份激活数据库

su postgres

initdb -D /usr/local/pgsql/data           #绑定数据目录

结果会在data下生成配置文件

2.4.4修改配置文件

返回netuser,

exit

修改pg_hba.conf,解决认证失败的问题,使php程序可以连接数据库,

按照以下内容更改

host all 127.0.0.1/32    trust

local all all           trust

host all all ::1/128    trust

修改postgresql.conf,修改数据库侦听范围,按照以下内容修改

listen_addresses = ‘*’

2.5启动数据库

su postgres    #默认是用postgres 用户来启动的

/usr/local/pgsql/bin/postgres -D /usr/local/pgsql/data

或者

/usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data -l /usr/local/log/syslog.log start

#参考:

pg_ctl start   [-w] [-D DATADIR] [-s] [-l FILENAME] [-o "OPTIONS"]

pg_ctl stop    [-W] [-D DATADIR] [-s] [-m SHUTDOWN-MODE]

pg_ctl restart [-w] [-D DATADIR] [-s] [-m SHUTDOWN-MODE] [-o "OPTIONS"]

pg_ctl reload [-D DATADIR] [-s]

pg_ctl status [-D DATADIR]

给postgresql添加用户:createuser netuser  

#ubuntu登录时建立的账户

创建数据库:createdb mydb

2.6测试数据库

退回到netuser

exit

输入以下命令行:

psql mydb

#显示:mydb=#,说明连接成功,且此账户是数据库管理员。

使用exit退出数据库

3. 安装bandwidth

tar zxvf bandwidthd-2.0.1.gz

cd bandwidthd-2.0.1

./configure –prefix=/usr

make

make install

4. 配置bandwidthd

4.1使用schema.postgresql 创建连接并生成文件

在bandwidthd-2.0.1文件夹下输入以下命令行:

psql mydb netuser < schema.postgresql    #经过测试,这个不执行也可以

在bandwidthd.conf中添加参数

pgsql_connect_string “user = netuser dbname = mydb host = localhost”

sensor_id “netuser.BK3.localdomain”      

graph false

recover_cdf false

5.启动bandwidthd

/usr/bandwidth/bandwidth

6. Web Server Setup:

cd /tmp    #进入临时文件夹

cd /bandwidthd-2.0.1+cvs20090917    #进入bandwidthd文件夹,此文件夹是在安 #装bandwidthd-pgsql时产生的,如果没有可以从bandwidthd-2.0.1+cvs20090917包 #中获得。

sudo mv phphtdocs /var/www/monitor    #将phphtdocs文件夹移动到/var/www/ #下并改名为monitor,此文件夹中的php程序是用来读取数据库中的数据使用的。

cd /var/www/monitor    #进入monitor文件夹

sudo rm index.php    #删除主页,此页不是我们需要的页面

sudo mv sensors.php index.php    #将sensors.php文件夹改名为index.php,此页是#我们需要的主页,或者可以使用源码中的phphtdocs文件夹,不需要这两步。

sudo vi config.conf    #修改配置文件

修改pgsql_connect_string “user = netuser dbname = mydb”一行,

以下是bandwidthd中README中关于网站设置的描述:

也可以使用上一篇提到的方式来配置php程序

1. Copy the contents of phphtdocs into your web tree some where.

2. Edit config.conf to set your db connect string

You should now be able to access the web application and see you graphs. All graphing

is done by graph.php, all parameters are passed to it in it’s url. You can create

custom urls to pull custom graphs from your own index pages, or use the canned

reporting system.

In addition, you should schedule bd_pgsql_purge.sh to run every so often. I recomend

running it weekly. This script outputs sql statements that aggregate the older

data points in your database in order to reduce the amount of data that needs to

be slogged through in order to generate yearly, monthly, and weekly graphs.

至此,安装配置完成,可以访问此网站来查看bandwidthd搜集的数据

http://ip/monitor

Written by an6097
没有评论 (4,660 views)
2011年3月28日 | 分类: Linux | 标签: , , , , ,

        前段时间领导让搞一下bandwidthd来检测网络流量情况,而且要求把数据存到数据库里,我在网上找了半天资料,关于把bandwidthd的数据存到postgresql中的很少,自己研究了半天才搞明白,这一篇是利用ubuntu的deb包来安装,另外我还会发一篇自己编译安装的方式。

环境说明:

hostname BK4,domain localdomain,安装时账户netuser,密码abcd.1234,IP地址用IP来代替;

详细步骤

系统安装完成后使用netuser登录计算机

sudo passwd root   #给root用户设置密码

设置密码为abcd.1234

su root    #切换到root账户

apt-get install apache2    #安装apache

apt-get install php5    #安装php语言支持

apt-get install php5-pgsql    #支持php语言连接postgresql数据库

apt-get install php5-gd    #支持php语言从数据库中读取图片

/etc/init.d/apache2 restart    #重启apache2

cd /var/www    #进入apache2目录

vi info.php    #新建info.php文件

输入<?php phpinfo();?>    #在文件中输入

wq    #保存退出

在浏览器里访问http://ip/info.php   #查看apache是否支持php

apt-get install postgresql    #安装postgresql数据库

su postgres    #转换到postgres账户,此账户为postgresql数据库管理员,数据库服务默认是由此账户启动的。

createuser netuser    #将netuser设置为数据库管理员

提示Shall the new role be allowed to create more new roles? (y/n) 选择y

createuser root    #步骤意义同上

exit    #退回到root用户

exit    #退回到netuser用户

createdb mydb    #使用netuser创建数据库 mydb

psql mydb    #使用客户端工具psql连接数据库mydb

#显示:mydb=#,说明连接成功,且此账户是数据库管理员

exit    #退出数据库

#修改pg_hba.conf,解决认证失败的问题,使php程序可以连接数据库,

#按照以下内容更改

host all 127.0.0.1/32    trust

local all all            trust

host all all ::1/128    trust

#修改postgresql.conf,修改数据库侦听范围,按照以下内容修改

listen_addresses = ‘*’

sudo apt-get install bandwidthd-pgsql    #安装支持postgresql数据库的bandwidthd

#安装过程中会有窗口提示,在CRT下安装的时候注意模式,否则会乱码,网卡选择默认,网段选择默认,数据库不配置。

sudo vi /etc/bandwidthd/bandwidthd.conf    #编译bandwidthd配置文件

照以下内容编辑相关部分

pgsql_connect_string “user = netuser dbname = mydb host = localhost”

sensor_id “netuser.BK4.localdomain”       #传感器名称,在php网页中会选择

graph false    #不生成静态网页

recover_cdf false   

promiscuous true    #默认值,包里把这个改成false了,应该启用网卡的混合模式

wq    #保存退出

sudo /etc/init.d/bandwidthd restart    #重启bandwidthd服务

cd /tmp    #进入临时文件夹

cd /bandwidthd-2.0.1+cvs20090917    #进入bandwidthd文件夹,此文件夹是在安装bandwidthd-pgsql时产生的,如果没有可以从bandwidthd-2.0.1+cvs20090917包 中获得。

sudo mv phphtdocs /var/www/monitor    #将phphtdocs文件夹移动到/var/www/下并改名为monitor,此文件夹中的php程序是用来读取数据库中的数据使用的,文件夹名称可任意

cd /var/www/monitor    #进入monitor文件夹

sudo rm index.php    #删除主页,此页不是我们需要的页面

sudo mv sensors.php index.php    #将sensors.php文件夹改名为index.php,此页是我们需要的主页,或者可以使用源码中的phphtdocs文件夹,不需要这两步。

sudo vi config.conf    #修改配置文件

修改pgsql_connect_string “user = netuser dbname = mydb”一行,

至此,安装配置完成,可以访问此网站来查看bandwidthd搜集的数据

http://ip/monitor

Written by an6097
没有评论 (3,980 views)
2011年3月27日 | 分类: DB | 标签: , , , , , ,

如前面文章所述,已经想办法将DHCP数据自动导入了SQL Server数据库,也实现了在SQL Server中查询AD数据,下面将是如何将两个数据整合到一起的问题了,其实在这里更重要的是讲个思路,具体实施因环境而变通。在导出的dhcp数据中,我们获得了IP地址,子网掩码,MAC地址和计算机名,在这里IP地址和计算机名是唯一的,而跟AD中用户属性能建立起联系的就只能是计算机名了,所以我们要用公司制度来规范计算机名的使用。说下我使用过的情况,一个是以公司员工编号xxxx来命名计算机名,因为员工编号有唯一性,所以不用担心计算机重名,对于一个人有多台机器的可以在后面加-01,-02;二是直接用域用户名来命名,即邮箱地址@前的部分,如有多台机器也是在后面加-01,-02。针对第一种情况,因为AD中没有这个数据,所以我们就要把这个数据添加到用户在AD中某个属性上,例如这个employeeID,或者直接能在AD 管理中心看见的ipPhone等等,然后在SQL Server数据库中读出这个用户属性的数据,再通过dhcp数据表的计算机名列.前的数据做join,以实现dhcp数据和AD用户的对应。针对第二种情况,就比较简单了,我们可以直接通过计算机名列.前的数据和用户的sAMAccountName列为两个表做join,这样也就实现了ip地址和用户的对应。

将AD和DHCP数据整合后就可以在数据库中创建视图,然后利用C#等语言开发查询界面来查询公司员的IP,MAC,计算机名,以及在AD中写入的任何信息,如果公司也部署了如NPS,NTop,Tacacs,BindWidthD等,那么我们也就可以实现员工,IP,NPS认证日志,IP流量,IP访问站点的相关信息整合及查询,这对于公司的IT来说还是比较有意义的。

Written by Nile Jiang
无猖狂以自彰,当阴沉以自深。
没有评论 (4,092 views)
2011年3月27日 | 分类: DB | 标签: , , , , , , ,

经过前文描述,我们已经能够实现自动将DHCP数据导入SQL Server,本文将介绍如何通过SQL Server 来查询AD中的数据,步骤如下:

1. 为数据库建立到AD的连接,SQL Server Management Studio,新建一个查询,执行如下语句:

        sp_addlinkedserver ‘ADSI’, ‘Active Directory Service Interfaces’, ‘ADSDSOObject’, ‘adsdatasource

2. 执行成功后,即可在SQL Server中进行AD数据的查询,查询AD用户的示例如下:

    SELECT     distinguishedName, whenCreated, whenChanged, sAMAccountName AS accountName, sn AS lastName, givenName AS firstName, displayName, mail,
                      telephoneNumber, title, department, manager, ipPhone, badPwdCount, userPrincipalName
FROM         OPENQUERY(ADSI,
                      ‘SELECT distinguishedName, whenCreated, whenChanged, sAMAccountName, sn, givenName, displayName, mail, telephoneNumber, title, department, manager, ipPhone,
badPwdCount, userPrincipalName  FROM ”LDAP://DC=test,DC=com” WHERE objectCategory = ”Person” AND objectClass = ”user”’)

查询AD中组的示例如下:

SELECT  whenCreated, whenChanged, info, sAMAccountName, displayName, distinguishedName as dn, Name, Mail
FROM    OPENQUERY(ADSI,
‘SELECT whenCreated, whenChanged, info, sAMAccountName, displayName, distinguishedName, Name, Mail
FROM ”LDAP://DC=test,DC=com” WHERE objectClass = ”group”’)

一般可以将以上查询写成视图,然后通过查询视图来查询AD数据。

3. 通过上面语句我们是查询AD中所有的用户和组,但是如果AD中数据比较多的话将会存在问题,如果是SQL Server 2005的话,默认只能显示查询结果中的前1000行数据,如果是SQL Server 2008的话默认只能显示前901行数据,否则执行后将会提示消息:“无法从链接服务器 “ADSI” 的 OLE DB 访问接口”ADSDSOObject”提取行。”,遇到此问题可以通过以下方法来解决。

      (1) 在AD中修改MaxPagesize来修改数据显示的数量,我没有试过,具体方法可参见微软文档:http://support.microsoft.com/default.aspx?scid=kb;en-us;315071&sd=tech 

      (2) 以上查询中的ldap路径可以修改成指定OU或Container来查询想要的数据,如LDAP://cn=Users,DC=test,DC=com, 这样就要求我们的AD中用户最好是按公司部门分成不同OU,这样一般来讲一个OU下的用户超过1000的可能性就比较小了。我们为每一个OU创建一个视图,然后再将这些视图合成一个,这样查询数据就基本不会有什么问题了,示例如下:

CREATE VIEW [dbo].[财务部]
AS
SELECT     distinguishedName, whenCreated, whenChanged, sAMAccountName AS accountName, sn AS lastName, givenName AS firstName, displayName, mail,
                      telephoneNumber, title, department, manager, ipPhone, badPwdCount
FROM         OPENQUERY(ADSI,
                      ‘SELECT distinguishedName, whenCreated, whenChanged, sAMAccountName, sn, givenName, displayName, mail, telephoneNumber, title, department, manager, ipPhone,
badPwdCount  FROM ”LDAP://ou=财务部,DC=test,DC=com” WHERE objectCategory = ”Person” AND objectClass = ”user”’)
 

      (3) 这个就是思路了,我们可以在查询中指定具体的查询条件,只查询想要的结果。

通过以上描述,我们就可以实现在SQL Server中查询AD数据了,下一步就可以考虑整合AD用户数据和DHCP数据了。

Written by Nile Jiang
无猖狂以自彰,当阴沉以自深。
没有评论 (7,327 views)
2011年3月27日 | 分类: DB | 标签: , , , , , ,

如前文所述已经实现自动把DHCP数据导出到text文本,本文将介绍如何自动把text文本内容导入到SQL Server数据库。SQL Server里面有导入和导出数据工具,可以一次性将平面文件源text文本导入到数据库,也可以在导入设置中选择生成SSIS包。为了实现当执行导入数据时有新数据进行插入,以IP地址为依据,如果有数据更改则进行更新,我选择生成一个SSIS包并在SQL Server作业中调用定期执行的方式来实现。步骤如下:

1. 先运行导入和导出数据工具导入一次dhcp数据以生成相应的dhcp数据表。

2. 制作自动从dhcp数据文件导入数据的SSIS包,具体做法可参照 文章http://blog.csdn.net/zjcxc/archive/2006/09/10/1202876.aspx的思路来做,在本例中是以IP地址作为依据,具体如下:

       (1).          准备测试环境

– 1. 在数据库中创建下面的对象

USE tempdb

GO

CREATE TABLE dbo.tb(

    id int PRIMARY KEY,

    name nvarchar(128))

GO

– 2. 准备两个文本文件, 放在d:\test 目录下, 文件的内容如下

t1.txt

id  name

1   张三

2   李四

t2.txt

id  name

1   张三君

3   李林

4   阿联酋

(2).          创建新的 Integration Services 项目(创建SSIS包)

Ø       在“开始”菜单中,依次指向“所有程序”、“Microsoft SQL Server 2005”,再单击 SQL Server Business Intelligence Development Studio。

Ø       在“文件”菜单中,指向“新建”,再单击“项目”,以创建一个新的 Integration Services 项目。

Ø       在“新建项目”对话框的“模板”窗格中,选择“Integration Services 项目”。

Ø       在“名称”框中,将默认名称更改为 SSIS Tutorial。或者,清除“创建解决方案的目录”复选框。

Ø       接受默认位置,或单击“浏览”,以浏览并找到要使用的文件夹。

Ø       在“项目位置”对话框中,单击文件夹,再单击“打开”。

Ø       单击“确定”。

Ø       默认情况下,将创建一个名为 “新建包.dtsx“ 的空包,并将该包添加到项目中。

Ø       在解决方案资源管理器工具栏中,右键单击 Package.dtsx,再单击“重命名”,将默认包重命名为 Lesson 1.dtsx。

Ø       当系统提示重命名包对象时,单击“是”。

(3).          为SSIS包添加数据源(导入数据的源和目标数据源)

Ø       首先添加导入数据的源

Ø       右键单击“连接管理器”区域中的任意位置,再单击“新建平面文件连接”。

Ø       在“平面文件连接管理器编辑器”对话框的“连接管理器名称”字段中,键入 Source。

Ø       单击“浏览”。

Ø       在“打开”对话框中,浏览并找到“d:\test\t1.txt”文件。

Ø       “常规”选项中,勾选“在第1个数据行中显示列名称”。

Ø       “高级”选项中,选择“id”列,将数据类型设置为“four-byte single integer[DT_I4]”。

Ø       “高级”选项中,选择“name”列,将数据类型设置为“Unicode string[DT_WSTR]”。

Ø       然后,你可以在“预览”中查看数据是否正确。

Ø       然后添加接收数据的目的数据源

Ø       右键单击连接管理器区域中的任意位置,再单击“新建OLE DB 连接”。

Ø       在“配置OLE DB 连接管理器”对话框中,单击“新建”。

Ø       在“服务器名称”中,输入localhost。

Ø       将localhost 指定为服务器名称时,连接管理器将连接到本地计算机上Microsoft SQL Server 2005 的默认实例。若要使用SQL Server 2005 的远程实例,请将localhost 替换为要连接到的服务器的名称。

Ø       在“登录到服务器”组中,确认选择了“使用Windows 身份验证”。

Ø       在“连接到数据库”组的“选择或输入数据库名称”框中,键入或选择tempdb。

Ø       单击“测试连接”,验证指定的连接设置是否有效。

Ø       单击“确定”。

Ø       单击“确定”。

Ø       在“配置OLE DB 连接管理器”对话框的“数据连接”窗格中,确认选择了localhost.tempdb。

Ø       单击“确定”。

(4).          为SSIS包添加数据流任务

Ø       单击“控制流”选项卡。

Ø       在“工具箱”中,展开“控制流项”,并将一个数据流任务拖到“控制流”选项卡的设计图面上。

Ø       在“控制流”设计图面中,右键单击新添加的数据流任务,再单击“重命名”,将名称更改为Import Data。

(5).          在数据流任务中设置数据流源

Ø       打开“数据流”设计器,方法是双击Import Data 数据流任务或单击“数据流”选项卡。

Ø       在“工具箱”中,展开“数据流源”,然后将“平面文件源”拖动到“数据流”选项卡的设计图面上。

Ø       在“数据流”设计图面上,右键单击新添加的“平面文件源”,单击“重命名”,然后将该名称更改为Source Data。

Ø       双击此平面文件源,打开“平面文件源编辑器”对话框。

Ø       在“平面文件连接管理器”框中,键入或选择Source。

Ø       单击“列”并验证列名是否正确。

Ø       单击“确定”。

(6).          在数据流任务中添加查找处理组件

Ø       在“工具箱”中,展开“数据流转换”,然后将“查找”拖动到“数据流”选项卡的设计图面上。将“查找”直接放置在Source Data 源的下面。

Ø       单击Source Data 平面文件源,并将绿色箭头拖动到新添加的“查找”转换中,以连接这两个组件。

Ø       在“数据流”设计图面上,右键单击新添加的“查找”转换,单击“重命名”,然后将该名称更改为Lookup id。

Ø       双击Lookup id 转换。

Ø       在“查找转换编辑器”对话框的“OLE DB 连接管理器”框中,确保显示localhost.tempdb。

Ø       在“使用表或视图”框中,键入或选择[dbo].[tb]。

Ø       单击“列”选项卡。

Ø       在“可用输入列”面板中,将id 拖放到“可用查找列”面板的id 上。

Ø       单击“确定”。

(7).          在数据流任务中添加插入数据处理需要的目标数据源

Ø       在“工具箱”中,展开“数据流目标”,并将“OLE DB 目标”拖到“数据流”选项卡的设计图面上。将OLE DB 目标直接放置在“Lookup id”转换的下面。

Ø       单击“Lookup id”转换,并将红色箭头拖到新添加的“OLE DB 目标”上,以便将两个组件连接在一起。

Ø       在出现的“配置错误输出”对话框中,“错误”列中选择“重定向行”

Ø       单击“确定”。

Ø       在“数据流”设计图面上,右键单击新添加的“OLE DB 目标”组件,单击“重命名”,然后将名称更改为Insert data。

Ø       双击Insert data。

Ø       在“OLE DB 目标编辑器”对话框中,确保已在“OLE DB 连接管理器”框中选中localhost.tempdb。

Ø       在“表或视图的名称”框中,键入或选择[dbo].[tb]。

Ø       单击“映射”。

Ø       验证id, name 输入列是否已正确映射到目标列。如果映射了同名列,则说明映射正确。

Ø       单击“确定”。

(8).          在数据流任务中添加更新数据处理需要的OLE DB命令组件

Ø       在“工具箱”中,展开“数据流组件转换”,并将“OLE DB 命令”拖到“数据流”选项卡的设计图面上。将OLE DB 目标直接放置在“Lookup id”转换的下面。

Ø       单击“Lookup id”转换,并将绿色箭头拖到新添加的“OLE DB 命令”上,以便将两个组件连接在一起。

Ø       在“数据流”设计图面上,右键单击新添加的“OLE DB命令”组件,单击“重命名”,然后将名称更改为Update data。

Ø       双击Update data。

Ø       在“Update Data 高级编辑器”对话框中,“连接管理”选项的“连接管理器”列中,选中localhost.tempdb。

Ø       在“组件属性”选项中,“自定义属性”的“SQLCommand”属性中输入:

UPDATE dbo.tb SET name = ? WHERE id = ?

Ø       在“列映射”选项中,设置“输入列”,将name映射到param_0,将id映射到param_1。注:param_0对应UPDAT语句中的第1个?,而param_1对应UPDATE语句中的第2个?,这是固定的。

Ø       单击“确定”。

(9).          测试

Ø       按“F5”执行SSIS包

Ø       执行结束(所有的组件都变为绿色),你会看到数据流向“Inset Data”的有两条数据

Ø       双击“连接管理器”中的Source,重新设置文件名为D:\test\d2.txt。

Ø       单击“确定”

Ø       按“Ctrl+Shift+F5”,重新启动SSIS

Ø       执行结束(所有的组件都变为绿色),你会看到数据流向“Inset Data”的有两条数据,流向“Update Data”的有1条数据

Ø       最后,在数据库中查询tempdb.dbo.tb,验证数据导入的正确性

3. 编辑好SSIS包后,点击文件->将xxx.dtsx的副本另存为将此SSIS包保存到dhcp数据所在的数据库服务器中,指定目录并命名SSIS包。

4. 登录到dhcp数据所在的SQL Server数据库服务器,打开SQL Server代理->作业,新建作业,新建步骤,在类型下选择”SQL Server Integration Services包”,选择在上步中所部署的SQL Server服务器,并选择刚才所部署的SSIS包。

5. 新建计划以执行此SSIS包,可以根据际环境定义执行时间,如每隔15分钟执行一次。

6. 最后确定后直接在此作业点击右键选择“作业开始步骤”来执行此步骤并确认是否成功。

通过以上步骤即成功实现自动导入text文本数据到SQL Server 数据库并实现及时更新,但是以上方法未实现删除功能,即新的dhcp数据中没有的数据,它无法在SQL Server数据库中也做相应的删除,目前本人还不会,待实现后再做相应的更新。


Written by Nile Jiang
无猖狂以自彰,当阴沉以自深。
没有评论 (6,178 views)
2011年3月25日 | 分类: 软件 | 标签: , , ,

QQ截图后点击保存时没有选择保存类型的选项,保存后的文件没有保存类型,用其他程序如画图保存图片正常,解决方法:

用QQ截图后保存时在文件名处直接输入文件扩展名如QQ截图未命名.jpg,保存,保存一次后再用QQ截图保存时即可选择保存的图片类型。

方法虽然简单,但是很有效。

Written by Nile Jiang
无猖狂以自彰,当阴沉以自深。
没有评论 (5,705 views)
第 20 页,共 27 页« 最新...10...1819202122...最旧 »