这是SQL设计存在的问题,只有在系统的内存不够使用时,才处理SQL多余的内存;目前解决的方法就是,在企业管理器的数据库属性中,将SQL使用内存的最大数加以限制。具体:你的Server名字=〉右键=〉属性=〉内存=〉减小最大内存数量,即可。
/******* 导出到excel
EXEC master..xp_cmdshell 'bcp SettleDB.dbo.shanghu out c:\temp1.xls -c -q -S"GNETDATA/GNETDATA" -U"sa" -P""'
/*********** 导入Excel
SELECT *
FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
'Data Source="c:\test.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...xactions
/*动态文件名
declare @fn varchar(20),@s varchar(1000)
set @fn = 'c:\test.xls'
set @s ='''Microsoft.Jet.OLEDB.4.0'',
''Data Source="'+@fn+'";User ID=Admin;Password=;Extended properties=Excel 5.0'''
set @s = 'SELECT * FROM OpenDataSource ('+@s+')...sheet1$'
exec(@s)
*/
SELECT cast(cast(科目编号 as numeric(10,2)) as nvarchar(255))+' ' 转换后的别名
FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
'Data Source="c:\test.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...xactions
/********************** EXCEL导到远程SQL
insert OPENDATASOURCE(
'SQLOLEDB',
'Data Source=远程ip;User ID=sa;Password=密码'
).库名.dbo.表名 (列名1,列名2)
SELECT 列名1,列名2
FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
'Data Source="c:\test.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...xactions
/** 导入文本文件
EXEC master..xp_cmdshell 'bcp dbname..tablename in c:\DT.txt -c -Sservername -Usa -Ppassword'
/** 导出文本文件
EXEC master..xp_cmdshell 'bcp dbname..tablename out c:\DT.txt -c -Sservername -Usa -Ppassword'
或
EXEC master..xp_cmdshell 'bcp "Select * from dbname..tablename" queryout c:\DT.txt -c -Sservername -Usa -Ppassword'
导出到TXT文本,用逗号分开
exec master..xp_cmdshell 'bcp "库名..表名" out "d:\tt.txt" -c -t ,-U sa -P password'
BULK INSERT 库名..表名
FROM 'c:\test.txt'
WITH (
FIELDTERMINATOR = ';',
ROWTERMINATOR = '\n'
)
--/* dBase IV文件
select * from
OPENROWSET('MICROSOFT.JET.OLEDB.4.0'
,'dBase IV;HDR=NO;IMEX=2;DATABASE=C:\','select * from [客户资料4.dbf]')
--*/
--/* dBase III文件
select * from
OPENROWSET('MICROSOFT.JET.OLEDB.4.0'
,'dBase III;HDR=NO;IMEX=2;DATABASE=C:\','select * from [客户资料3.dbf]')
--*/
--/* FoxPro 数据库
select * from openrowset('MSDASQL',
'Driver=Microsoft Visual FoxPro Driver;SourceType=DBF;SourceDB=c:\',
'select * from [aa.DBF]')
--*/
/**************导入DBF文件****************/
select * from openrowset('MSDASQL',
'Driver=Microsoft Visual FoxPro Driver;
SourceDB=e:\VFP98\data;
SourceType=DBF',
'select * from customer where country != "USA" order by country')
go
/***************** 导出到DBF ***************/
如果要导出数据到已经生成结构(即现存的)FOXPRO表中,可以直接用下面的SQL语句
insert into openrowset('MSDASQL',
'Driver=Microsoft Visual FoxPro Driver;SourceType=DBF;SourceDB=c:\',
'select * from [aa.DBF]')
select * from 表
说明:
SourceDB=c:\ 指定foxpro表所在的文件夹
aa.DBF 指定foxpro表的文件名.
/*************导出到Access********************/
insert into openrowset('Microsoft.Jet.OLEDB.4.0',
'x:\A.mdb';'admin';'',A表) select * from 数据库名..B表
/*************导入Access********************/
insert into B表 selet * from openrowset('Microsoft.Jet.OLEDB.4.0',
'x:\A.mdb';'admin';'',A表)
文件名为参数
declare @fname varchar(20)
set @fname = 'd:\test.mdb'
exec('SELECT a.* FROM opendatasource(''Microsoft.Jet.OLEDB.4.0'',
'''+@fname+''';''admin'';'''', topics) as a ')
SELECT *
FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
'Data Source="f:\northwind.mdb";Jet OLEDB:Database Password=123;User ID=Admin;Password=;')...产品
********************* 导入 xml 文件
DECLARE @idoc int
DECLARE @doc varchar(1000)
--sample XML document
SET @doc ='
<root>
<Customer cid= "C1" name="Janine" city="Issaquah">
<Order oid="O1" date="1/20/1996" amount="3.5" />
<Order oid="O2" date="4/30/1997" amount="13.4">Customer was very satisfied
</Order>
</Customer>
<Customer cid="C2" name="Ursula" city="Oelde" >
<Order oid="O3" date="7/14/1999" amount="100" note="Wrap it blue
white red">
<Urgency>Important</Urgency>
Happy Customer.
</Order>
<Order oid="O4" date="1/20/1996" amount="10000"/>
</Customer>
</root>
'
-- Create an internal representation of the XML document.
EXEC sp_xml_preparedocument @idoc OUTPUT, @doc
-- Execute a SELECT statement using OPENXML rowset provider.
SELECT *
FROM OPENXML (@idoc, '/root/Customer/Order', 1)
WITH (oid char(5),
amount float,
comment ntext 'text()')
EXEC sp_xml_removedocument @idoc
???????
/**********************Excel导到Txt****************************************/
想用
select * into opendatasource(...) from opendatasource(...)
实现将一个Excel文件内容导入到一个文本文件
假设Excel中有两列,第一列为姓名,第二列为很行帐号(16位)
且银行帐号导出到文本文件后分两部分,前8位和后8位分开。
邹健:
如果要用你上面的语句插入的话,文本文件必须存在,而且有一行:姓名,银行账号1,银行账号2
然后就可以用下面的语句进行插入
注意文件名和目录根据你的实际情况进行修改.
insert into
opendatasource('MICROSOFT.JET.OLEDB.4.0'
,'Text;HDR=Yes;DATABASE=C:\'
)...[aa#txt]
--,aa#txt)
--*/
select 姓名,银行账号1=left(银行账号,8),银行账号2=right(银行账号,8)
from
opendatasource('MICROSOFT.JET.OLEDB.4.0'
,'Excel 5.0;HDR=YES;IMEX=2;DATABASE=c:\a.xls'
--,Sheet1$)
)...[Sheet1$]
如果你想直接插入并生成文本文件,就要用bcp
declare @sql varchar(8000),@tbname varchar(50)
--首先将excel表内容导入到一个全局临时表
select @tbname='[##temp'+cast(newid() as varchar(40))+']'
,@sql='select 姓名,银行账号1=left(银行账号,8),银行账号2=right(银行账号,8)
into '+@tbname+' from
opendatasource(''MICROSOFT.JET.OLEDB.4.0''
,''Excel 5.0;HDR=YES;IMEX=2;DATABASE=c:\a.xls''
)...[Sheet1$]'
exec(@sql)
--然后用bcp从全局临时表导出到文本文件
set @sql='bcp "'+@tbname+'" out "c:\aa.txt" /S"(local)" /P"" /c'
exec master..xp_cmdshell @sql
--删除临时表
exec('drop table '+@tbname)
/********************导整个数据库*********************************************/
用bcp实现的存储过程
/*
实现数据导入/导出的存储过程
根据不同的参数,可以实现导入/导出整个数据库/单个表
调用示例:
--导出调用示例
----导出单个表
exec file2table 'zj','','','xzkh_sa..地区资料','c:\zj.txt',1
----导出整个数据库
exec file2table 'zj','','','xzkh_sa','C:\docman',1
--导入调用示例
----导入单个表
exec file2table 'zj','','','xzkh_sa..地区资料','c:\zj.txt',0
----导入整个数据库
exec file2table 'zj','','','xzkh_sa','C:\docman',0
*/
if exists(select 1 from sysobjects where name='File2Table' and objectproperty(id,'IsProcedure')=1)
drop procedure File2Table
go
create procedure File2Table
@servername varchar(200) --服务器名
,@username varchar(200) --用户名,如果用NT验证方式,则为空''
,@password varchar(200) --密码
,@tbname varchar(500) --数据库.dbo.表名,如果不指定:.dbo.表名,则导出数据库的所有用户表
,@filename varchar(1000) --导入/导出路径/文件名,如果@tbname参数指明是导出整个数据库,则这个参数是文件存放路径,文件名自动用表名.txt
,@isout bit --1为导出,0为导入
as
declare @sql varchar(8000)
if @tbname like '%.%.%' --如果指定了表名,则直接导出单个表
begin
set @sql='bcp '+@tbname
+case when @isout=1 then ' out ' else ' in ' end
+' "'+@filename+'" /w'
+' /S '+@servername
+case when isnull(@username,'')='' then '' else ' /U '+@username end
+' /P '+isnull(@password,'')
exec master..xp_cmdshell @sql
end
else
begin --导出整个数据库,定义游标,取出所有的用户表
declare @m_tbname varchar(250)
if right(@filename,1)<>'\' set @filename=@filename+'\'
set @m_tbname='declare #tb cursor for select name from '+@tbname+'..sysobjects where xtype=''U'''
exec(@m_tbname)
open #tb
fetch next from #tb into @m_tbname
while @@fetch_status=0
begin
set @sql='bcp '+@tbname+'..'+@m_tbname
+case when @isout=1 then ' out ' else ' in ' end
+' "'+@filename+@m_tbname+'.txt " /w'
+' /S '+@servername
+case when isnull(@username,'')='' then '' else ' /U '+@username end
+' /P '+isnull(@password,'')
exec master..xp_cmdshell @sql
fetch next from #tb into @m_tbname
end
close #tb
deallocate #tb
end
go
/************* Oracle **************/
EXEC sp_addlinkedserver 'OracleSvr',
'Oracle 7.3',
'MSDAORA',
'ORCLDB'
GO
delete from openquery(mailser,'select * from yulin')
select * from openquery(mailser,'select * from yulin')
update openquery(mailser,'select * from yulin where id=15')set disorder=555,catago=888
insert into openquery(mailser,'select disorder,catago from yulin')values(333,777)
补充:
对于用bcp导出,是没有字段名的.
用openrowset导出,需要事先建好表.
用openrowset导入,除ACCESS及EXCEL外,均不支持非本机数据导入
大型的数据库开发中常常遇到数据源是平面文件(如文本文件)的情况,对于这样的数据源,无法使用数据库对其数据进行有效的管理,另外也无法使用SQL语句对其进行查询和操作,所以当务之急就是将这些平面文件导
入到数据库中,然后就可以对其进行高效的操作了。
下面介绍几种常见的数据导入的方法,希望能够给大家启迪。另外,本文所涉及到的数据库均为ORACLE数据库,其实对于其他数据库而言,方法类似。
一、Sql*:Loader
该方法是Oracle数据库下数据导入的最重要的方法之一,该工具由Oracle客户端提供,其基本工作原理是:首先要针对数据源文件制作一个控制文件,控制文件是用来解释如何对源文件进行解析,其中需要包含源文件的数据格式、目标数据库的字段等信息,一个典型的控制文件为如下形式:
LOAD DATA
INFILE '/ora9i/fengjie/agent/data/ipaagentdetail200410.txt'
TRUNCATE
INTO TABLE fj_ipa_agentdetail
fields terminated ","
trailing nullcols
( AGENT_NO char,
AGENT_NAME char,
AGENT_ADDRESS char,
AGENT_LINKNUM char,
AGENT_LINKMAN char
)
其中,INFILE '/ora9i/fengjie/agent/data/ipaagentdetail200410.txt'指明所要导入的源文件,其实源文件也可以直接通过命令行来输入获得
,fj_ipa_agentdetail为目标表的名字,fields terminated ","是指源文件的各个字段是以逗号分隔,trailing nullcols表示遇到空字段依然写入到数据库表中,最后这5个字段是目标数据库表的字段结构。通过上面这个典型的控制文件的格式分析可知,控制文件需要与源文件的格式信息一致,否则导入数据会出现异常。
除了控制以外,sql*loader的还需要数据文件,即源文件。根据格式的不同,源文件可以分为固定字段长度和有分隔符这两大类,这里将分别说明这两种情况:
固定字段长度的文本文件
就是每个字段拥有固定的字段长度,比如:
602530005922 1012
602538023138 1012
602536920355 1012
602531777166 1012
602533626494 1012
602535700601 1012
有分隔符的文本文件
就是每个字段都有相同的分隔符分隔,比如:
1001,上海长途电信综合开发公司,南京东路34号140室
1002,上海桦奇通讯科技有限公司,武宁路19号1902室
1003,上海邦正科技发展有限公司,南京东路61号903室
对于上述两种文件格式sql*loader均可以做处理,下面就前面那个固定长度的文本来举例说明:
由于该文本只有两个字段,一个为设备号,一个是区局编号,两者的长度分别为20和5,那么可以 编制控制文件如下:
LOAD DATA
INFILE '/ora9i/fengjie/agent/data/ipaagent200410.txt'
TRUNCATE
INTO TABLE fj_ipa_agent
( DEVNO POSITION(1:20) CHAR,
BRANCH_NO POSITION(21:25) CHAR
)
其中,'/ora9i/fengjie/agent/data/ipaagent200410.txt'为该文件的完全路径,POSITION(M:N)表示该字段是从位置M到位置N。
对于有分隔符的数据文件,前面已经有一个例子,这里就不再赘述了。总之,使用Sql*Loader能够轻松将数据文件导入到数据库中,这种方法也是最常用的方法。
二、 使用专业的数据抽取工具
目前在数据仓库领域中,数据抽取与装载(ETL)是一重要的技术,这一技术对于一些大的数据文件或者文件数量较多尤其适合。这里简单介绍目前一款主流的数据抽取工具――Informatica。
该工具主要采用图形界面进行编程,其主要工作流程是:首先将源数据文件的结构(格式)导入为Informatica里,然后根据业务规则对该结构进行一定的转换(transformation),最终导入到目标表中。
以上过程仅仅只是做了一个从源到目标的映射,数据的实际抽取与装载需要在工作流(workflow)里进行。
使用专业的数据抽取工具,可以结合业务逻辑对多个源数据进行join,union,insect等操作,适合于大型数据库和数据仓库。
三、 使用Access工具导入
可以直接在Access里选择‘打开‘文本文件,这样按照向导来导入一个文本文件到Access数据库中,然后使用编程的方法将其导入到最终的目标数据库中。
这种方法虽然烦琐,但是其对系统的软件配置要求相对较低,所以也是有一定的使用范围。
四、 小结
总之,平面文件转化为数据库格式有利于数据的处理,显然,数据库强大的数据处理能力比直接进行文件I/O效率高出很多,希望本文能够对该领域做一个抛砖引玉的作用。
开机就在bios中设置
步骤一:
启动系统按DEL,进入BIOS,然后选中 "POWER MANAGEMENT FEATURES"
(电源管理设置),回车进入.在电源窗口中找到"RESTORE ON AC/POWER
LOSS"项,按回车,然后通过方向键设置其值为"POWER ON".
步骤二:
选中"RESUME ON RTC ALARM"并按回车,接着通过方向键设置其值为"ENABLE"
步骤三:
选中"RTC ALARM DATE"按回车,然后将其值设定为"EVERYDAY",表示每天都进行一样的操作,按照同样的方法,分别将"RTC ALARM HOURS""RTC ALARM MINUTE""RTM ALARM SECOND"设置为"07""15""00",这表示开机时间为早上的"7:15:00",全部设置好后,按F10,保存并重新启动.
(由于不同的主板的BIOS不一样,有些主板的设置可能与上面的有一点点不同,但只要记住在电源管理中找到"WAKE UP"字样的就行了,因为这是设置定时开机的选项)
自动关机步骤一:
在"任务计划"窗口中双击添加任务计划,下一步,接着点浏览,在选择程序以进行计划的窗口中的C:\WINDOWS\SYSTEM32"目录下找到SHUTDOWN.EXE程序并点打开按钮.
步骤二:
将执行这个任务的时间设置为"每天",点下一步,将起始时间设置为"23:00"并点下一步,按照要求输入用户名及密码,在单击完成时,打开此任务计划的高级属性,并点完成
步骤三:
在弹出的SHUTDOWN 窗口中点"任务",然后在"行"拦中输入"C:\WINDOWS\system32\shutdown.exe -s -t 60" (其中-S表示关闭计算机,-T 60 表示60秒后自动关闭计算机,关机时间可根据自己的需要设置)点击应用,并重新输入用户密码,最后点确定!
(如果想取消自动关机,在运行中输入"Shutdown -a"命令回车就可以了
PL/SQL单行函数和组函数详解
函数是一种有零个或多个参数并且有一个返回值的程序。在SQL中Oracle内建了一系列函数,这些函数都可被称为SQL或PL/SQL语句,函数主要分为两大类:
单行函数
组函数
本文将讨论如何利用单行函数以及使用规则。
SQL中的单行函数
SQL和PL/SQL中自带很多类型的函数,有字符、数字、日期、转换、和混合型等多种函数用于处理单行数据,因此这些都可被统称为单行函数。这些函数均可用于SELECT,WHERE、ORDER BY等子句中,例如下面的例子中就包含了TO_CHAR,UPPER,SOUNDEX等单行函数。
SELECT ename,TO_CHAR(hiredate,'day,DD-Mon-YYYY')FROM empWhere UPPER(ename) Like 'AL%'ORDER BY SOUNDEX(ename)
单行函数也可以在其他语句中使用,如update的SET子句,INSERT的VALUES子句,DELET的WHERE子句,认证考试特别注意在SELECT语句中使用这些函数,所以我们的注意力也集中在SELECT语句中。
NULL和单行函数
在如何理解NULL上开始是很困难的,就算是一个很有经验的人依然对此感到困惑。NULL值表示一个未知数据或者一个空值,算术操作符的任何一个操作数为NULL值,结果均为提个NULL值,这个规则也适合很多函数,只有CONCAT,DECODE,DUMP,NVL,REPLACE在调用了NULL参数时能够返回非NULL值。在这些中NVL函数时最重要的,因为他能直接处理NULL值,NVL有两个参数:NVL(x1,x2),x1和x2都式表达式,当x1为null时返回X2,否则返回x1。
下面我们看看emp数据表它包含了薪水、奖金两项,需要计算总的补偿
column name emp_id salary bonuskey type pk nulls/unique nn,u nnfk table datatype number number numberlength 11.2 11.2
不是简单的将薪水和奖金加起来就可以了,如果某一行是null值那么结果就将是null,比如下面的例子:
update empset salary=(salary+bonus)*1.1
这个语句中,雇员的工资和奖金都将更新为一个新的值,但是如果没有奖金,即 salary + null,那么就会得出错误的结论,这个时候就要使用nvl函数来排除null值的影响。
所以正确的语句是:
update empset salary=(salary+nvl(bonus,0)*1.1
单行字符串函数
单行字符串函数用于操作字符串数据,他们大多数有一个或多个参数,其中绝大多数返回字符串
ASCII()
c1是一字符串,返回c1第一个字母的ASCII码,他的逆函数是CHR()
SELECT ASCII('A') BIG_A,ASCII('z') BIG_z FROM empBIG_A BIG_z65 122
CHR(<i>)[NCHAR_CS]
i是一个数字,函数返回十进制表示的字符
select CHR(65),CHR(122),CHR(223) FROM empCHR65 CHR122 CHR223A z B
CONCAT(,)
c1,c2均为字符串,函数将c2连接到c1的后面,如果c1为null,将返回c2.如果c2为null,则返回c1,如果c1、c2都为null,则返回null。他和操作符||返回的结果相同
select concat('slobo ','Svoboda') username from dualusernameslobo Syoboda
INITCAP()
c1为一字符串。函数将每个单词的第一个字母大写其它字母小写返回。单词由空格,控制字符,标点符号限制。
select INITCAP('veni,vedi,vici') Ceasar from dualCeasarVeni,Vedi,Vici
INSTR(,[,<i>[,]])
c1,c2均为字符串,i,j为整数。函数返回c2在c1中第j次出现的位置,搜索从c1的第i个字符开始。当没有发现需要的字符时返回0,如果i为负数,那么搜索将从右到左进行,但是位置的计算还是从左到右,i和j的缺省值为1.
select INSTR('Mississippi','i',3,3) from dualINSTR('MISSISSIPPI','I',3,3)11select INSTR('Mississippi','i',-2,3) from dualINSTR('MISSISSIPPI','I',3,3)2
INSTRB(,[,i[,j])
与INSTR()函数一样,只是他返回的是字节,对于单字节INSTRB()等于INSTR()
LENGTH()
c1为字符串,返回c1的长度,如果c1为null,那么将返回null值。
select LENGTH('Ipso Facto') ergo from dualergo10
LENGTHb()
与LENGTH()一样,返回字节。
lower()
返回c的小写字符,经常出现在where子串中
select LOWER(colorname) from itemdetail WHERE LOWER(colorname) LIKE '%white%'COLORNAMEWinterwhite
LPAD(,<i>[,])
c1,c2均为字符串,i为整数。在c1的左侧用c2字符串补足致长度i,可多次重复,如果i小于c1的长度,那么只返回i那么长的c1字符,其他的将被截去。c2的缺省值为单空格,参见RPAD。
select LPAD(answer,7,'') padded,answer unpadded from question;PADDED UNPADDED Yes YesNO NOMaybe maybe
LTRIM(,)
把c1中最左边的字符去掉,使其第一个字符不在c2中,如果没有c2,那么c1就不会改变。
select LTRIM('Mississippi','Mis') from dualLTRppi
RPAD(,<i>[,])
在c1的右侧用c2字符串补足致长度i,可多次重复,如果i小于c1的长度,那么只返回i那么长的c1字符,其他的将被截去。c2的缺省值为单空格,其他与LPAD相似
RTRIM(,)
把c1中最右边的字符去掉,使其第后一个字符不在c2中,如果没有c2,那么c1就不会改变。
REPLACE(,[,])
c1,c2,c3都是字符串,函数用c3代替出现在c1中的c2后返回。
select REPLACE('uptown','up','down') from dualREPLACEdowntown
STBSTR(,<i>[,])
c1为一字符串,i,j为整数,从c1的第i位开始返回长度为j的子字符串,如果j为空,则直到串的尾部。
select SUBSTR('Message',1,4) from dualSUBSMess
SUBSTRB(,<i>[,])
与SUBSTR大致相同,只是I,J是以字节计算。
SOUNDEX()
返回与c1发音相似的词
select SOUNDEX('dawes') Dawes SOUNDEX('daws') Daws, SOUNDEX('dawson') from dualDawes Daws DawsonD200 D200 D250
TRANSLATE(,,)
将c1中与c2相同的字符以c3代替
select TRANSLATE('fumble','uf','ar') test from dualTEXTramble
TRIM([[]] from c3)
将c3串中的第一个,最后一个,或者都删除。
select TRIM(' space padded ') trim from dual TRIMspace padded
UPPER()
返回c1的大写,常出现where子串中
select name from dual where UPPER(name) LIKE 'KI%'NAMEKING
单行数字函数
单行数字函数操作数字数据,执行数学和算术运算。所有函数都有数字参数并返回数字值。所有三角函数的操作数和值都是弧度而不是角度,oracle没有提供内建的弧度和角度的转换函数。
ABS()
返回n的绝对值
ACOS()
反余玄函数,返回-1到1之间的数。n表示弧度
select ACOS(-1) pi,ACOS(1) ZERO FROM dualPI ZERO3.14159265 0
ASIN()
反正玄函数,返回-1到1,n表示弧度
ATAN()
反正切函数,返回n的反正切值,n表示弧度。
CEIL()
返回大于或等于n的最小整数。
COS()
返回n的余玄值,n为弧度
COSH()
返回n的双曲余玄值,n 为数字。
select COSH(<1.4>) FROM dualCOSH(1.4)2.15089847
EXP()
返回e的n次幂,e=2.71828183.
FLOOR()
返回小于等于N的最大整数。
LN()
返回N的自然对数,N必须大于0
LOG(,)
返回以n1为底n2的对数
MOD()
返回n1除以n2的余数,
POWER(,)
返回n1的n2次方
ROUND(,)
返回舍入小数点右边n2位的n1的值,n2的缺省值为0,这回将小数点最接近的整数,如果n2为负数就舍入到小数点左边相应的位上,n2必须是整数。
select ROUND(12345,-2),ROUND(12345.54321,2) FROM dualROUND(12345,-2) ROUND(12345.54321,2)12300 12345.54
SIGN()
如果n为负数,返回-1,如果n为正数,返回1,如果n=0返回0.
SIN()
返回n的正玄值,n为弧度。
SINH()
返回n的双曲正玄值,n为弧度。
SQRT()
返回n的平方根,n为弧度
TAN()
返回n的正切值,n为弧度
TANH()
返回n的双曲正切值,n为弧度
TRUNC(,)
返回截尾到n2位小数的n1的值,n2缺省设置为0,当n2为缺省设置时会将n1截尾为整数,如果n2为负值,就截尾在小数点左边相应的位上。
单行日期函数
单行日期函数操作DATA数据类型,绝大多数都有DATA数据类型的参数,绝大多数返回的也是DATA数据类型的值。
ADD_MONTHS(,<i>)
返回日期d加上i个月后的结果。i可以使任意整数。如果i是一个小数,那么数据库将隐式的他转换成整数,将会截去小数点后面的部分。
LAST_DAY()
函数返回包含日期d的月份的最后一天
MONTHS_BETWEEN(,)
返回d1和d2之间月的数目,如果d1和d2的日的日期都相同,或者都使该月的最后一天,那么将返回一个整数,否则会返回的结果将包含一个分数。
NEW_TIME(,,)
d1是一个日期数据类型,当时区tz1中的日期和时间是d时,返回时区tz2中的日期和时间。tz1和tz2时字符串。
NEXT_DAY(,)
返回日期d后由dow给出的条件的第一天,dow使用当前会话中给出的语言指定了一周中的某一天,返回的时间分量与d的时间分量相同。
select NEXT_DAY('01-Jan-2000','Monday') "1st Monday",NEXT_DAY('01-Nov-2004','Tuesday')+7 "2nd Tuesday") from dual;1st Monday 2nd Tuesday03-Jan-2000 09-Nov-2004
ROUND([,])
将日期d按照fmt指定的格式舍入,fmt为字符串。
SYADATE
函数没有参数,返回当前日期和时间。
TRUNC([,])
返回由fmt指定的单位的日期d.
单行转换函数
单行转换函数用于操作多数据类型,在数据类型之间进行转换。
CHARTORWID()
c 使一个字符串,函数将c转换为RWID数据类型。
SELECT test_id from test_case where rowid=CHARTORWID('AAAA0SAACAAAALiAAA')
CONVERT(,[,])
c尾字符串,dset、sset是两个字符集,函数将字符串c由sset字符集转换为dset字符集,sset的缺省设置为数据库的字符集。
HEXTORAW()
x为16进制的字符串,函数将16进制的x转换为RAW数据类型。
RAWTOHEX()
x是RAW数据类型字符串,函数将RAW数据类转换为16进制的数据类型。
ROWIDTOCHAR()
函数将ROWID数据类型转换为CHAR数据类型。
TO_CHAR([[,)
x是一个data或number数据类型,函数将x转换成fmt指定格式的char数据类型,如果x为日期nlsparm=NLS_DATE_LANGUAGE 控制返回的月份和日份所使用的语言。如果x为数字nlsparm=NLS_NUMERIC_CHARACTERS 用来指定小数位和千分位的分隔符,以及货币符号。
NLS_NUMERIC_CHARACTERS ="dg", NLS_CURRENCY="string"
TO_DATE([,[,)
c表示字符串,fmt表示一种特殊格式的字符串。返回按照fmt格式显示的c,nlsparm表示使用的语言。函数将字符串c转换成date数据类型。
TO_MULTI_BYTE()
c表示一个字符串,函数将c的担子截字符转换成多字节字符。
TO_NUMBER([,[,)
c表示字符串,fmt表示一个特殊格式的字符串,函数返回值按照fmt指定的格式显示。nlsparm表示语言,函数将返回c代表的数字。
TO_SINGLE_BYTE()
将字符串c中得多字节字符转化成等价的单字节字符。该函数仅当数据库字符集同时包含单字节和多字节字符时才使用
其它单行函数
BFILENAME(
,)
dir是一个directory类型的对象,file为一文件名。函数返回一个空的BFILE位置值指示符,函数用于初始化BFILE变量或者是BFILE列。
DECODE(,,[,,,[])
x是一个表达式,m1是一个匹配表达式,x与m1比较,如果m1等于x,那么返回r1,否则,x与m2比较,依次类推m3,m4,m5....直到有返回结果。
DUMP(,[,[,[,]]])
x是一个表达式或字符,fmt表示8进制、10进制、16进制、或则单字符。函数返回包含了有关x的内部表示信息的VARCHAR2类型的值。如果指定了n1,n2那么从n1开始的长度为n2的字节将被返回。
EMPTY_BLOB()
该函数没有参数,函数返回 一个空的BLOB位置指示符。函数用于初始化一个BLOB变量或BLOB列。
EMPTY_CLOB()
该函数没有参数,函数返回 一个空的CLOB位置指示符。函数用于初始化一个CLOB变量或CLOB列。
GREATEST()
exp_list是一列表达式,返回其中最大的表达式,每个表达式都被隐含的转换第一个表达式的数据类型,如果第一个表达式是字符串数据类型中的任何一个,那么返回的结果是varchar2数据类型,同时使用的比较是非填充空格类型的比较。
LEAST()
exp_list是一列表达式,返回其中最小的表达式,每个表达式都被隐含的转换第一个表达式的数据类型,如果第一个表达式是字符串数据类型中的任何一个,将返回的结果是varchar2数据类型,同时使用的比较是非填充空格类型的比较。
UID
该函数没有参数,返回唯一标示当前数据库用户的整数。
USER
返回当前用户的用户名
USERENV()
基于opt返回包含当前会话信息。opt的可选值为:
ISDBA 会话中SYSDBA脚色响应,返回TRUE
SESSIONID 返回审计会话标示符
ENTRYID 返回可用的审计项标示符
INSTANCE 在会话连接后,返回实例标示符。该值只用于运行Parallel 服务器并且有 多个实例的情况下使用。
LANGUAGE 返回语言、地域、数据库设置的字符集。
LANG 返回语言名称的ISO缩写。
TERMINAL 为当前会话使用的终端或计算机返回操作系统的标示符。
VSIZE()
x是一个表达式。返回x内部表示的字节数。
SQL中的组函数
组函数也叫集合函数,返回基于多个行的单一结果,行的准确数量无法确定,除非查询被执行并且所有的结果都被包含在内。与单行函数不同的是,在解析时所有的行都是已知的。由于这种差别使组函数与单行函数有在要求和行为上有微小的差异.
组(多行)函数
与单行函数相比,oracle提供了丰富的基于组的,多行的函数。这些函数可以在select或select的having子句中使用,当用于select子串时常常都和GROUP BY一起使用。
AVG([{DISYINCT|ALL}])
返回数值的平均值。缺省设置为ALL.
SELECT AVG(sal),AVG(ALL sal),AVG(DISTINCT sal) FROM scott.empAVG(SAL) AVG(ALL SAL) AVG(DISTINCT SAL)1877.94118 1877.94118 1916.071413
COUNT({*|DISTINCT|ALL} )
返回查询中行的数目,缺省设置是ALL,*表示返回所有的行。
MAX([{DISTINCT|ALL}])
返回选择列表项目的最大值,如果x是字符串数据类型,他返回一个VARCHAR2数据类型,如果X是一个DATA数据类型,返回一个日期,如果X是numeric数据类型,返回一个数字。注意distinct和all不起作用,应为最大值与这两种设置是相同的。
MIN([{DISTINCT|ALL}])
返回选择列表项目的最小值。
STDDEV([{DISTINCT|ALL}])
返回选者的列表项目的标准差,所谓标准差是方差的平方根。
SUM([{DISTINCT|ALL}])
返回选择列表项目的数值的总和。
VARIANCE([{DISTINCT|ALL}])
返回选择列表项目的统计方差。
用GROUP BY给数据分组
正如题目暗示的那样组函数就是操作那些已经分好组的数据,我们告诉数据库用GROUP BY怎样给数据分组或者分类,当我们在SELECT语句的SELECT子句中使用组函数时,我们必须把为分组或非常数列放置在GROUP BY子句中,如果没有用group by进行专门处理,那么缺省的分类是将整个结果设为一类。
select stat,counter(*) zip_count from zip_codes GROUP BY state;ST ZIP_COUNT-- ---------AK 360AL 1212AR 1309AZ 768CA 3982
在这个例子中,我们用state字段分类;如果我们要将结果按照zip_codes排序,可以用ORDER BY语句,ORDER BY子句可以使用列或组函数。
select stat,counter(*) zip_count from zip_codes GROUP BY state ORDER BY COUNT(*) DESC;ST COUNT(*)-- --------NY 4312PA 4297TX 4123CA 3982
用HAVING子句限制分组数据
现在你已经知道了在查询的SELECT语句和ORDER BY子句中使用主函数,组函数只能用于两个子串中,组函数不能用于WHERE子串中,例如下面的查询是错误的:
错误SELECT sales_clerk,SUN(sale_amount) FROM gross_sales WHERE sales_dept='OUTSIDE' AND SUM(sale_amount)>10000 GROUP BY sales_clerk
这个语句中数据库不知道SUM()是什么,当我们需要指示数据库对行分组,然后限制分组后的行的输出时,正确的方法是使用HAVING语句:
SELECT sales_clerk,SUN(sale_amount) FROM gross_sales WHERE sales_dept='OUTSIDE' GROUP BY sales_clerkHAVING SUM(sale_amount)>10000;
嵌套函数
函数可以嵌套。一个函数的输出可以是另一个函数的输入。操作数有一个可继承的执行过程。但函数的优先权只是基于位置,函数遵循由内到外,由左到右的原则。嵌套技术一般用于象DECODE这样的能被用于逻辑判断语句IF....THEN...ELSE的函数。
嵌套函数可以包括在组函数中嵌套单行函数,或者组函数嵌套入单行函数或组函数中。比如下面的例子:
SELECT deptno, GREATEST(COUNT(DISTINCT job),COUNT(DISTINCT mgr) cnt,COUNT(DISTINCT job) jobs,COUNT(DISTINCT mgr) mgrsFROM empGROUP BY deptno;DEPTNO CNT JOBS MGRS------ --- ---- ----10 4 4 220 4 3 430 3 3 2
1.字符串函数
长度与分析用
datalength(Char_expr) 返回字符串包含字符数,但不包含后面的空格
substring(expression,start,length) 不多说了,取子串
right(char_expr,int_expr) 返回字符串右边int_expr个字符
字符操作类
upper(char_expr) 转为大写
lower(char_expr) 转为小写
space(int_expr) 生成int_expr个空格
replicate(char_expr,int_expr)复制字符串int_expr次
reverse(char_expr) 反转字符串
stuff(char_expr1,start,length,char_expr2) 将字符串char_expr1中的从
start开始的length个字符用char_expr2代替
ltrim(char_expr) rtrim(char_expr) 取掉空格
ascii(char) char(ascii) 两函数对应,取ascii码,根据ascii吗取字符
字符串查找
charindex(char_expr,expression) 返回char_expr的起始位置
patindex("%pattern%",expression) 返回指定模式的起始位置,否则为0
2.数学函数
abs(numeric_expr) 求绝对值
ceiling(numeric_expr) 取大于等于指定值的最小整数
exp(float_expr) 取指数
floor(numeric_expr) 小于等于指定值得最大整数
pi() 3.1415926.........
power(numeric_expr,power) 返回power次方
rand([int_expr]) 随机数产生器
round(numeric_expr,int_expr) 安int_expr规定的精度四舍五入
sign(int_expr) 根据正数,0,负数,,返回+1,0,-1
sqrt(float_expr) 平方根
3.日期函数
getdate() 返回日期
datename(datepart,date_expr) 返回名称如 June
datepart(datepart,date_expr) 取日期一部份
datediff(datepart,date_expr1.dateexpr2) 日期差
dateadd(datepart,number,date_expr) 返回日期加上 number
上述函数中datepart的
写法 取值和意义
yy 1753-9999 年份
qq 1-4 刻
mm 1-12 月
dy 1-366 日
dd 1-31 日
wk 1-54 周
dw 1-7 周几
hh 0-23 小时
mi 0-59 分钟
ss 0-59 秒
ms 0-999 毫秒
日期转换
convert()
4.系统函数
suser_name() 用户登录名
user_name() 用户在数据库中的名字
user 用户在数据库中的名字
show_role() 对当前用户起作用的规则
db_name() 数据库名
object_name(obj_id) 数据库对象名
col_name(obj_id,col_id) 列名
col_length(objname,colname) 列长度
valid_name(char_expr) 是否是有效标识符
数据库中有个字段叫orderTime,是DateTime类型的数据,如果我们用以下SQL语句把它取出来:
select
orderTime
from orders
则会把时间都显示出来,而如果改成下面的SQL语句:
select
orderTime = convert(varchar(10),orderTime,120)
from orders
则会显示YYYY-MM-DD的格式,如:2006-06-13
实际上还有其它的样式,如SQL这样写:
select
orderTime = convert(varchar(12),orderTime,111)
from orders
则以YYYY/MM/DD格式显示。如2006/06/13
还有一大堆的格式(下面的getdate()方法是SQL里面的函数,取得服务器当前时间,也是DateTime格式的)
select CONVERT(varchar(12) , getdate(), 112 )
20040912
select CONVERT(varchar(12) , getdate(), 102 )
2004.09.12
select CONVERT(varchar(12) , getdate(), 101 )
09/12/2004
select CONVERT(varchar(12) , getdate(), 103 )
12/09/2004
select CONVERT(varchar(12) , getdate(), 104 )
12.09.2004
select CONVERT(varchar(12) , getdate(), 105 )
12-09-2004
select CONVERT(varchar(12) , getdate(), 106 )
12 09 2004
select CONVERT(varchar(12) , getdate(), 107 )
09 12, 2004
select CONVERT(varchar(12) , getdate(), 108 )
11:06:08
select CONVERT(varchar(12) , getdate(), 109 )
09 12 2004 1
select CONVERT(varchar(12) , getdate(), 110 )
09-12-2004
select CONVERT(varchar(12) , getdate(), 113 )
12 09 2004 1
select CONVERT(varchar(12) , getdate(), 114 )
11:06:08.177
设置Active Directory域
Duwamish Online
Aaron Ching
Microsoft开发人员网络
2000年12月
本页主要标题:
内容提要:本文提供了有关Microsoft Active Directory技术的概括性资料以及针对像DuwamishOnline.com这样的Web区设置Active Directory域的分步操作指导。
简介 |  |
 |

在针对Microsoft® Windows® 2000 Server操作系统所实施的多项重大改进中,Microsoft Active Directory?不仅是最为重要、而且也是最容易遭到混淆的技术特性。与其前身(Microsoft Windows NT®操作系统早期版本中所配备的域控制器)相比,内建于Windows 2000 Server的Active Directory提供了一种崭新的体系结构和一整套得到进一步扩展的功能特性。
尽管本文的目标并不在于针对Active Directory中所包含的全部特性加以讨论,然而,本文却提供了有关Active Directory技术的概括性资料,并将主要围绕以下两个新概念展开介绍:一种全新的域控制器体系结构模型和与DNS之间的一种新型集成化关系。这些特性对于理解像DuwamishOnline.com这样的Web区创建方式颇具裨益。此外,我们还将围绕借助Active Directory设置此类Web区的分步操作程序展开研讨。
本文假设读者已基本理解掌握了Windows NT早期版本中的网络互联概念。
Active Directory概述 |  |
 |

就像可提供人员与单位电话信息的电话目录服务一样,Active Directory也是一种可供用来存储全部网络资源信息、并提供针对此类信息之简易访问服务的目录服务功能。这里所说的网络资源主要包括计算机、打印机、共享文件夹和消息队列等对象。
Active Directory相当于整个网络环境中的主交换机。该技术可帮助用户和应用程序针对那些已处于网络连接状态的相关资源实施目标定位与访问调用,并在彼此之间实现网络互联。更重要的是,该技术还可供用来确保只有那些经过授权的用户或应用程序方可获准在具备安全保障的前提下针对相关资源实施访问调用。
在一个类似于Duwamish Online的服务器区内,部署Active Directory服务器的目的主要体现为,面向用户和应用程序提供针对网络上所有服务器的集中式、安全化访问调用服务。不仅如此,Active Directory还内建有可供消息队列(MSMQ)特性用来针对具备异步操作支持能力的消息队列实施管理的目录服务。(如需了解有关消息队列服务的更多信息资料,敬请参阅由我们提供的MSMQ专题文章。)
如需获取有关Active Directory的更多信息资料,敬请参阅“Active Directory概述”一文:http://www.microsoft.com/windows2000/guide/server/features/dirlist.asp。
接下来,我们将主要围绕首次被引入Active Directory的两个全新概念展开研讨。
域控制器最新体系结构模型
已安装有可提供目录服务功能之Active Directory组件的计算机设备通常被称作域控制器。而将Active Directory安装至某一运行Windows 2000 Server操作系统之计算机设备的处理过程则可将相关服务器转化或提升为对应于某一特定域的域控制器。
在使用Active Directory的前提下,所有Windows 2000 Server域控制器都将成为彼此对等的端点,并可为多主复制特性提供所需支持,同时,在全体域控制器范围内进行Active Directory信息复制操作。
而这恰恰是在体系结构设计方面针对Windows NT先前版本中存在于主域控制器(PDC)和备份域控制器(BDC)之间的主/从关系所做出的最为重大的修改。
在Windows NT操作系统早期版本中,只有PDC才保持着兼具读/写属性的目录信息主拷贝,并可将对应于目录信息的只读拷贝复制到BDC。而与Windows NT早期版本不同的是,Active Directory将在域控制器之间针对多主复制特性加以应用,并确保系统管理员具备从任一域控制器执行修改操作的能力。在某一域控制(特别是PDC)发生故障的情况下,这种机制将为系统提供更高层次的可靠性保障。
与DNS实现集成化
Active Directory中的另一项重大体系结构设计修订体现为该技术同域名系统(DNS)之间的高度集成化水平。在Windows 2000操作系统中,网络基本输入/输出系统(NetBIOS)名称已不再充当针对网上计算机或打印机加以识别的首要名称解析方法。取而代之的是一种被称作“完全合格域名(FQDN)”的属性,例如,“server1.microsoft.com”。这种完全合格域名将被用来执行上述识别任务。
这就意味着,Active Directory域目前正使用着同DNS域完全一致的命名结构(或名称空间)。举例来说,在Windows NT早期版本中,某一计算机设备既可能在对应于Windows网络域的NetBIOS下被引用为“SERVER1”,又可能在DNS域下被引用为“server1.microsoft.com”。而在Windows 2000操作系统中,该计算机则将在Active Directory域和DNS域下被同时引用为“server1.microsoft.com”。
当然,针对Active Directory与DNS之间的区别加以充分认识同样具有至关重要的意义。即使在两者处于高度协作状态的情况下,仍然存储着不同的数据资料,并针对不同对象实施管理。
DNS是一项对应于传输控制协议/Internet协议(TCP/IP)的名称解析服务。该服务针对资源记录进行存储的目的主要在于,将域名转化为与之相对应的IP地址。虽然DNS可在无需Active Directory支持的前提下独立发挥作用,但其所存储的数据却可在Active Directory中接受集成化处理,并被存储起来。而DNS信息则将在Active Directory中被自动复制到其它域控制器,进而,为DNS服务提供得到改进的可靠性与安全性保障。
另一方面,Active Directory还是一项可针对域对象名称请求加以存储、并将其解析为对象记录数据(例如,针对计算机网络配置请求做出回应)的目录服务功能。如需针对某一Active Directory服务器执行定位操作,Active Directory客户端首先应就其所指定的DNS服务器进行查询,以便发现对应于Active Directory服务器的IP地址。而作为系统设计方案的组成部分,DNS还是确保Active Directory正常发挥作用的必要条件。事实上,只要系统未能在网络上查找到既有DNS服务器,针对Active Directory域控制器进行设置的操作便会在安装过程中一并安装DNS服务器。
如需了解有关DNS名称空间构造方法和DNS与Active Directory关联方式的更多信息资料,敬请参阅题为设置域名系统的技术文章。
设置Active Directory域控制器 |  |
 |

正如我们在
网络与系统配置专题文章中所提到的那样,我们已将两部服务器设置为对应于内部域“intdomain.com”的Active Directory域控制器。我们借助专用计算机设置了第一个域控制器,并为实现系统冗余而在管理服务器上设置了第二个域控制器。
由于域控制器必须具备既可从Web服务器和命令处理服务器(针对消息队列)、又可从两个已实现群集化的数据库服务器接受访问调用的能力,因此,就必须与后端网络、管理网络或以上两者同时建立连接。
在接下来的章节中,我们将针对设置Active Directory域控制器的分步操作程序以及设置对应于特定域的Active Directory客户端的操作程序加以详细说明。
安装第一个域控制器
请依次执行下列步骤,以便创建一个新的域,并在某一服务器上安装Active Directory服务,然后,将该服务器设定为对应于新建域的第一个域控制器:
- 在开始菜单上单击运行,并在随后出现的对话框内输入dcpromo,然后,单击确定。上述操作将启动Active Directory安装向导。
- 在通过欢迎屏幕后,向导程序将要求您为即将安装Active Directory的服务器指定域控制器类型。请保持相关选项的缺省状态,以便将该服务器设置为对应于新建域的域控制器。
- 接下来,向导程序将要求您生成一个新的域树,或在现有域树中生成新建一个子域。在这个例子中,应针对内部域新建一个域树。
- 然后,向导程序将要求您新建一个森林,或加入一个现有森林。因为您正在创建第一个域,而且目前尚不存在现成的森林,所以,请保持有关系选项的缺省设置状态,以便创建一个同域树相对应的新森林。
- 如前所述,Windows 2000所配备的Active Directory服务目前主要将完全合格域名(FQDN)作为首选命名规范加以应用。当向导程序要求您为新建域设定名称时,就请键入同内部域相对应的FQDN(在本例中,应输入“intdomain.com”)。
- Active Directory具备针对Windows NT早期版本的向后兼容性,这主要取决于同这些版本命名规范相对应的NetBIOS名称。出于连贯性方面的考虑,我们应选用与NetBIOS名称完全相同的域名。在这个例子中,应接受系统为NetBIOS设定的缺省域名“INTDOMAIN”。
- 向导程序将在接下来的两个对话框中要求您针对Active Directory数据库与活动日志的存储位置以及共享系统卷加以指定。为实现更加理想的性能表现及可恢复能力,我们建议您将数据库和日志存储在独立硬盘上。为简化操作过程,我们选择接受所有缺省位置。
- 安装向导将在这个环节尝试同对应于新建域的DNS服务器取得联系。如果对应于新建域的DNS服务器已经存在,并可在网络上被查找到,向导程序便会继续转移到下一个安装步骤;如果网络上并不存在上述DNS服务器,向导程序则将就是否在Active Directory安装过程中基于同一计算机安装并配置DNS服务器、亦或稍后安装DNS服务器向您进行询问。在此,我们建议您保持第一个选项的缺省设置状态,除非您确实需要亲自执行所有DNS资源记录的设置工作。
- 由安装向导显示的其余对话框将主要用来处理安全保障事宜。根据Duwamish Online案例,如果域内所有计算机都在运行Windows 2000操作系统,就请将仅与Windows 2000服务器相兼容的许可权限选项设定为选中状态。接下来,向导程序将要求您为管理员设定一个专用口令。
- 最后,向导程序将显示一个总结屏幕,以便就已经设定的选项与您进行确认。如果屏幕上所显示的信息正确无误,就请单击下一步确认。
- 当配置处理过程执行完毕后,重新启动服务器。
安装第二个域控制器
第二个Active Directory域控制器的安装过程要比第一个域控制器的安装过程简单得多。在启动安装程序之前,应首先确认第二台服务器已具备针对同一网络部分实施访问调用的权限。只有这样,该服务器才能与第一台服务器进行通信联络。此外,您还应为DNS服务器设定IP地址(根据前文所提供的建议,这个地址必须同第一个域控制器相对应),而这个IP地址则可供用来针对充当域控制器的计算机进行定位。
如需设定DNS服务器,则请依次执行下列操作步骤:
- 右键单击网络邻居,并在随后弹出的快捷菜单上选择属性命令。
- 从网络与拨号连接对话框内,右键单击本地连接图标,并在随后弹出的快捷菜单上选择属性命令。
说明:如果您的计算机配备有多块与不同网络部分相连的网络适配卡(类似于Duwamish Online网络配置方案),而您又无法对已同内部建立连接的网卡加以确认,那么,您便可通过以物理方式切断与内部网络相连之电缆的做法识别出所需查找的相关连接。这样一来,对应于目标连接的图标便会呈现出已被禁用的状态。请在恢复网络电缆连接之前,为刚刚查找到的连接重新指定相应名称。 - 选择Internet协议(TCP/IP),并单击属性。
- 在Internet协议(TCP/IP)属性对话框内,将使用下列DNS服务器地址选项设定为选中状态。
- 在首选DNS服务器栏内,输入相关IP地址。(如果DNS服务器已作为第一个Active Directory服务器安装过程的组成部分实现了安装,就请为该服务器输入IP地址。有关操作方法请参阅上一章节--“安装第一个域控制器”--中的第8步。)
- 单击确定,以便使修改生效。
DNS一经设定,您便可着手安装第二个域控制器。
如需安装第二个域控制器,则请依次执行下列操作步骤:
- 在开始菜单上单击运行,并在随后出现的对话框内输入dcpromo,然后,单击确定。上述操作将启动Active Directory安装向导。
- 在通过欢迎屏幕后,向导程序将要求您为相关器服务器指定域控制器类型。在此,应选择设置对应于现有域的第二个域控制器。
- 接下来,向导程序将要求您输入用户名、口令和域名(在这个例子中,请输入“intdomain”)。
- 根据向导程序提示,为特定域输入完全合格域名,而同这个域相对应的计算机则将成为第二个域控制器。(在这个例子中,请输入“intdomain.com”。)
- 与您安装第一个Active Directory服务器时的情形相似,向导程序将要求您针对数据库和日志存储位置以及共享系统卷加以指定。为简化操作过程,我们选择接受所有缺省位置。
- 在完成管理员口令设置工作后,向导程序将要求您在总结屏幕上重新核对并最终确认刚刚设定的信息。请单击下一步开始安装。
- 请在安装程序执行完毕后重新启动服务器。
设置Active Directory客户端
在Windows 2000安装过程中,向导程序将就是否加入现有域或工作组向您进行询问。如果域控制器在安装时尚不可用,您便只能在晚些时候加入相关域。
在开始执行设置过程前,请先确保计算机已具备针对同一网络部分的访问调用权限,以便使其能够同相关域进行通信联络。在设置第二个域控制器的过程中,您还应为DNS服务器指定相关IP地址。
下列步骤描述了在Windows 2000操作系统中将某一计算机添加至新建域的具体方法。
- 右键单击我的电脑,并在随后弹出的快捷菜单上选择属性命令。
- 在系统属性对话框内,先单击网络标识选项卡,再单击属性按钮。
- 在标识修改对话框内,将域单选框设定为选中状态,并输入完整域名(在这个例子中,请输入“intdomain.com”)。
- 单击确定,以便确认上述修改。向导程序还将提示您输入域用户名和口令。
- 重新启动服务器,以便使修改生效。
摘要: 电脑的通信端口可分为
3
大类:
1
) 公认端口(
Well Known Ports
):从
0
到
1023
,它们紧密绑定于一些服务。通常这些端口的通讯明确表明了某种服务的协议。例如:
80
端口实际上总是
HTTP
通讯。
2
) 注册端口(
...
阅读全文
Route
在本地 IP 路由表中显示和修改条目。
语法
route [-f] [-p] [Command [Destination] [mask Netmask] [Gateway] [metric Metric]] [if Interface]]
参数
-f
清除所有不是主路由(网掩码为 255.255.255.255 的路由)、环回网络路由(目标为 127.0.0.0,网掩码为 255.255.255.0 的路由)或多播路由(目标为 224.0.0.0,网掩码为 240.0.0.0 的路由)的条目的路由表。如果它与命令之一(例如 add、change 或 delete)结合使用,表会在运行命令之前清除。
-p
与 add 命令共同使用时,指定路由被添加到注册表并在启动 TCP/IP 协议的时候初始化 IP 路由表。默认情况下,启动 TCP/IP 协议时不会保存添加的路由。与 print 命令一起使用时,则显示永久路由列表。所有其它的命令都忽略此参数。永久路由存储在注册表中的位置是 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\PersistentRoutes。
Command
指定要运行的命令。下表列出了有效的命令。 命令 目的
add 添加路由
change 更改现存路由
delete 删除路由
print 打印路由Destination
指定路由的网络目标地址。目标地址可以是一个 IP 网络地址(其中网络地址的主机地址位设置为 0),对于主机路由是 IP 地址,对于默认路由是 0.0.0.0。
mask subnetmask
指定与网络目标地址相关联的网掩码(又称之为子网掩码)。子网掩码对于 IP 网络地址可以是一适当的子网掩码,对于主机路由是 255.255.255.255 ,对于默认路由是 0.0.0.0。如果忽略,则使用子网掩码 255.255.255.255。定义路由时由于目标地址和子网掩码之间的关系,目标地址不能比它对应的子网掩码更为详细。换句话说,如果子网掩码的一位是 0,则目标地址中的对应位就不能设置为 1。
Gateway
指定超过由网络目标和子网掩码定义的可达到的地址集的前一个或下一个跃点 IP 地址。对于本地连接的子网路由,网关地址是分配给连接子网接口的 IP 地址。对于要经过一个或多个路由器才可用到的远程路由,网关地址是一个分配给相邻路由器的、可直接达到的 IP 地址。
metric Metric
为路由指定所需跃点数的整数值(范围是 1 ~ 9999),它用来在路由表里的多个路由中选择与转发包中的目标地址最为匹配的路由。所选的路由具有最少的跃点数。跃点数能够反映跃点的数量、路径的速度、路径可靠性、路径吞吐量以及管理属性。
if Interface
指定目标可以到达的接口的接口索引。使用 route print 命令可以显示接口及其对应接口索引的列表。对于接口索引可以使用十进制或十六进制的值。对于十六进制值,要在十六进制数的前面加上 0x。忽略 if 参数时,接口由网关地址确定。
/?
在命令提示符显示帮助。
注释
路由表中 跃点数 一列的值较大是由于允许 TCP/IP 根据每个 LAN接口的 IP 地址、子网掩码和默认网关的配置自动确定路由表中路由的跃点数造成的。默认启动的自动确定接口跃点数确定了每个接口的速度,调整了每个接口的路由跃点数,因此最快接口所创建的路由具有最低的跃点数。要删除大跃点数,请在每个 LAN 连接的 TCP/IP 协议的高级属性中禁用自动确定接口跃点数。
如果在 systemroot\System32\Drivers\Etc 文件夹的本地网络文件中存在适当的条目,名称可以用于 Destination。只要名称可以通过“域名系统” (DNS) 查询这样的标准主机名解析技术分解为 IP 地址,就可以将其用于 Gateway,DNS 查询使用存储在 systemroot\System32\Drivers\Etc 文件夹下的本地主机文件和 NetBIOS 名称解析。
如果是 print 或 delete 命令,可以忽略 Gateway 参数,使用通配符来表示目标和网关。Destination 的值可以是由星号 (*) 指定的通配符。如果指定目标含有一个星号 (*) 或问号 (?),它被看作是通配符,只打印或删除匹配的目标路由。星号代表任意一字符序列,问号代表任一字符。例如, 10.*.1, 192.168.*、 127.* 和 *224* 都是星号通配符的有效使用。
使用了无效的目标和子网掩码(网掩码)值的组合,会显示“Route:bad gateway address netmask”错误消息。目标中有一位或多位设置为 1,而其在子网掩码中的对应位设置为 0 时会发生这个错误。可以通过二进制表示法表示目标和子网掩码来检查这种情况。以二进制表示的子网掩码包括表示目标网络地址部分的一连串的 1 和表示目标主机地址部分的一连串的 0 两个部分。查看目标以确定目标的主机地址部分(由子网掩码所定义)是否有些位设置成了 1。
只有 Windows NT 4.0、Windows 2000、Windows Millennium Edition 和 Windows XP 的 route 命令支持 -p 参数。Windows 95 或 Windows 98 的 route 命令不支持该参数。
只有当网际协议 (TCP/IP) 协议在 网络连接中安装为网络适配器属性的组件时,该命令才可用。
范例
要显示 IP 路由表的完整内容,请键入:
route print
要显示 IP 路由表中以 10. 开始的路由,请键入:
route print 10.*
要添加默认网关地址为 192.168.12.1 的默认路由,请键入:
route add 0.0.0.0 mask 0.0.0.0 192.168.12.1
要添加目标为 10.41.0.0,子网掩码为 255.255.0.0,下一个跃点地址为 10.27.0.1 的路由,请键入:
route add 10.41.0.0 mask 255.255.0.0 10.27.0.1
要添加目标为 10.41.0.0,子网掩码为 255.255.0.0,下一个跃点地址为 10.27.0.1 的永久路由,请键入:
route -p add 10.41.0.0 mask 255.255.0.0 10.27.0.1
要添加目标为 10.41.0.0,子网掩码为 255.255.0.0,下一个跃点地址为 10.27.0.1,跃点数为 7 的路由,请键入:
route add 10.41.0.0 mask 255.255.0.0 10.27.0.1 metric 7
要添加目标为 10.41.0.0,子网掩码为 255.255.0.0,下一个跃点地址为 10.27.0.1,接口索引为 0x3 的路由,请键入:
route add 10.41.0.0 mask 255.255.0.0 10.27.0.1 if 0x3
要删除目标为 10.41.0.0,子网掩码为 255.255.0.0 的路由,请键入:
route delete 10.41.0.0 mask 255.255.0.0
要删除 IP 路由表中以 10. 开始的所有路由,请键入:
route delete 10.*
要将目标为 10.41.0.0,子网掩码为 255.255.0.0 的路由的下一个跃点地址由 10.27.0.1 更改为 10.27.0.25,请键入:
route change 10.41.0.0 mask 255.255.0.0 10.27.0.25
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
route 的命令
routing ip add/delete/set/show interface 在指定接口上添加、删除、配置或显示常规 IP 路由设置。
routing ip add/delete/set/show filter 在指定接口上添加、删除、配置或显示 IP 数据包筛选器。
routing ip add/delete/show boundary 在指定接口上添加、删除或显示多播边界设置。
routing ip add/set ipiptunnel 添加或配置 IP 中的 IP 接口。
routing ip add/delete/set/show rtmroute 添加、配置或显示不持续的路由表管理器路由。
routing ip add/delete/set/show persistentroute 添加、删除、配置或显示持续路由。
routing ip add/delete/set/show preferenceforprotocol 添加、删除、配置或显示路由协议的优先级。
routing ip add/delete/set/show scope 添加、删除或显示多播作用域。
routing ip set/show loglevel 配置或显示全局 IP 记录等级。
routing ip show helper 显示 IP 的所有 Netsh 实用程序子环境。
routing ip show protocol 显示所有正在运行的 IP 路由协议。
routing ip show mfe 显示多播转发项。
routing ip show mfestats 显示多播转发项统计。
routing ip show boundarystats 显示 IP 多播边界。
routing ip show rtmdestinations 显示路由表管理器路由表中的目标。
routing ip show rtmroutes 显示路由表管理器路由表中的路由。
routing ip nat set/show global 配置或显示全局网络地址转换 (NAT) 设置。
routing ip nat add/delete/set/show interface 添加、删除、配置或显示指定接口的 NAT 设置。
routing ip nat add/delete addressrange 在 NAT 接口公用地址池中添加或删除一个地址范围。
routing ip nat add/delete addressmapping 添加或删除 NAT 地址映射。
routing ip nat add/delete portmapping 添加或删除 NAT 端口映射。
routing ip autodhcp set/show global 配置或显示全局 DHCP 分配器参数。
routing ip autodhcp set/show interface 配置或显示指定接口的 DHCP 分配器设置。
routing ip autodhcp add/delete exclusion 在 DHCP 分配器地址范围中添加或删除一个排除范围。
routing ip dnsproxy set/show global 配置或显示全局 DNS 代理参数。
routing ip dnsproxy set/show interface 配置或显示指定接口的 DNS 代理参数。
routing ip igmp set/show global 配置或显示 IGMP 全局设置。
routing ip igmp add/delete/set/show interface 在指定接口上添加、删除、配置或显示 IGMP。
routing ip igmp add/delete staticgroup 添加或删除指定接口的静态多播组。
routing ip igmp show grouptable 显示 IGMP 主机组表。
routing ip igmp show ifstats 显示每个接口的 IGMP 统计。
routing ip igmp show iftable 显示每个接口的 IGMP 主机组。
routing ip igmp show proxygrouptable 显示 IGMP 代理接口的 IGMP 组表。
routing ip igmp show rasgrouptable 显示远程访问服务器所使用的 Internet 接口的组表。
routing ip ospf set/show global 配置或显示全局 OSPF 设置。
routing ip ospf add/delete/set/show interface 在指定接口上添加、删除、配置或显示 OSPF。
routing ip ospf add/delete/set/show area 添加、删除、配置或显示 OSPF 区域。
routing ip ospf add/delete/show range 在指定的 OSPF 区域上添加、删除、配置或显示范围。
routing ip ospf add/delete/set/show virtif 添加、删除、配置或显示 OSPF 虚拟接口。
routing ip ospf add/delete/show neighbor 添加、删除、配置或显示 OSPF 邻居。
routing ip ospf add/delete/show protofilter 添加、删除、配置或显示 OSPF 外部路由的路由信息源。
routing ip ospf add/delete/show routefilter 添加、删除、配置或显示 OSPF 外部路由的路由筛选。
routing ip ospf show areastats 显示 OSPF 区域统计。
routing ip ospf show lsdb 显示 OSPF 链接状态数据库。
routing ip ospf show virtifstats 显示 OSPF 虚拟链接统计。
routing ip relay set global 配置“DHCP 中继代理程序”的全局设置。
routing ip relay add/delete/set interface 在指定接口上添加、删除或配置“DHCP 中继代理程序”设置。
routing ip relay add/delete dhcpserver 在 DHCP 服务器地址列表中添加或删除 DHCP 服务器的 IP 地址。
routing ip relay show ifbinding 显示接口的 IP 地址绑定。
routing ip relay show ifconfig 显示每个接口的“DHCP 中继代理程序”配置。
routing ip relay show ifstats 显示每个接口的 DHCP 统计。
routing ip rip set/show global 配置 IP 的 RIP 全局设置。
routing ip rip add/delete/set/show interface 在指定接口上添加或配置 IP 的 RIP 设置。
routing ip rip add/delete peerfilter 添加或删除 RIP 对等筛选器。
routing ip rip add/delete acceptfilter 在接受的路由列表中添加或删除 RIP 路由筛选器。
routing ip rip add/delete announcefilter 在公布的路由列表中添加或删除 RIP 路由筛选器。
routing ip rip add/delete/show neighbor 添加或删除 RIP 邻居。
routing ip rip set/show flags 在指定接口上配置 IP RIP 高级设置。
routing ip rip show globalstats 显示全局 RIP 参数。
routing ip rip show ifbinding 显示接口的 IP 地址绑定。
routing ip rip show ifstats 显示每个接口的 RIP 统计。
IPX netsh 路由命令
routing ipx add/set staticroute 在 IPX 路由表中添加或配置静态 IPX 路由。
routing ipx add/set staticservice 在 SAP 服务表中添加或配置静态 SAP 服务。
routing ipx add/set filter 在指定的接口上添加或配置 IPX 数据包筛选器。
routing ipx add/set interface 在请求拨号接口上启用 IPX 路由,或在指定的接口上配置 IPX 设置。
routing ipx set global 配置全局 IPX 路由设置。
routing ipx rip add/set filter 添加和配置 RIP 路由筛选器。
routing ipx rip set global 配置全局 IPX 的 RIP 设置。
routing ipx rip set interface 在指定接口上配置 IPX 的 RIP 设置。
routing ipx sap add/set filter 添加或配置 SAP 服务筛选器。
routing ipx sap set global 配置全局 IPX 的 SAP 设置。
routing ipx sap set interface 在指定接口上配置 IPX 的 SAP 设置。
routing ipx netbios add nbname 将静态 NETBIOS 名称添加到 IPX NetBIOS 名称表中。
routing ipx netbios set interface 在指定接口上配置基于 IPX 的 NetBIOS 设置。