一:前言9 x) v) D7 M0 r8 X
安装SCCM、Exchange、OCS时都要进行“Extend the AD Schema”,拓展架构一定是在架构主机(Schema Master)上进行的。当然我们不是每天都需要对活动目录进行拓展,但是活动目录属于IT的基础架构,重要性非同寻常,所以在对活动目录进行拓展时,需要我们了解,什么是AD Schema、Extend Schema之后改变了什么?今天就给大家介绍一下活动目录的架构拓展。
6 K3 t2 C' | V( K% U1 r 二:什么是活动目录架构
& {$ V" j9 g5 G/ ~ G 活动目录的架构(Active Directory Schema)是用来定义AD中的类别(classes)和属性(attributes)的。活动目录的基础架构(a base Schema)包括了,比如user、computer、organizationalUnit等类别以及用户电话号码、objectsid等属性。这些默认存在的类别和属性可以满足大多数以AD为基础的应用,这些应用不需要拓展AD架构。然而有些应用必须使用自己的目录结构,比如Exchange,他们在AD提供的基础架构上另外拓展了一些类别和属性,已达到自己的需求,这就是为什么活动目录需要拓展。
8 V7 R! }8 q* R) t3 [1 t1 q. R: r8 { C 三:架构拓展之前
, t* H5 I/ ?/ r9 f 1:检查基础架构信息:确定在基础架构中不存在应用程序将要拓展的拓展属性和类别,在你的域中如果已经成功进行过一次架构拓展,则下次部署同样应用时就不需要重新拓展" K0 N0 G: F% N7 o t# T0 h0 l5 W
2:架构的更改是全局的:当进行了架构拓展,更该会通过GC复制到整个森林
( z+ n; B* \( P& S2 o# y 3:在架构中与系统关联的对象是不能被修改的:不能修改那些系统运行所需的基础类别,但是可以修改由Directory-enabled程序创建的新类别
( v. C) M' ~1 V5 s6 U7 U 4:架构拓展过程是不可逆的:一旦拓展了新的类别或属性,他们将不能被移除。最好的方式是修改或禁用。参见Deactivating a class or attribute.
" Z, c: j: E% y 5:使用恰当的对象标识符:架构中每个类别或属性都有一个唯一有效的对象标识符(OID),不要随意产生或使用旧的OID; O7 v r9 g [2 ^! g& T
四:拓展架构的方式
$ u! p7 u5 Z6 U 可以通过图形用户界面工具、命令行工具、脚本等来拓展AD架构,最简单的方法是在管理控制台(MMC)中使用Active Directory Schema snap-in工具,参见Install the Active Directory Schema snap-in。使用脚本拓展则需要一定的编程能力和了解活动目录的接口(ADSI)( x0 R0 L/ f0 l
五:如何拓展架构
* Y B7 ]; q7 l1 m+ ? 下面介绍一下如果通过管理控制台进行架构拓展,即修改AD架构的类别和属性- q1 t8 f$ C W; H! K' q% z
1:运行里输入 regsvr32 schmmgmt.dll
7 @; i( f. j3 } 2:运行 mmc /a
7 i* R& F$ H6 }7 d. F 3:文件菜单选择添加/删除管理单元,然后点击添加1 N( H1 Y# }2 y/ V
4:可用管理单元中,双击Active Directory架构,然后点击确定3 w3 T8 @4 S; v$ A
5:即可看到活动目录架构的树型结构7 q! s, V$ N' k3 \2 R6 l9 q6 R) N
6:双击类别中的各项即可进行修改类别,所示的就是在安装SCCM2007时所拓展的类别; R1 X6 e" V) t V! A7 O# h
7:在类别,和属性上点击右键,可以进行创建
2 L. D$ R7 ~' {7 j [. I/ L) N& S 8:具体如何修改,创建可参见Schema classes and attributes- s# J9 I. F& B5 S$ r4 y1 K, ]
9:关于手动拓展就写到这里,如果你是AD开发人员可以继续深入学习,对于IT Pro来说,了解这个拓展的过程,以至可以检验拓展成功与否就足够了。$ J! f. N6 K: }: N# B
六:结语
5 p( c! }# J3 f 这是活动目录学习系列的其中一篇,现在越发感觉活动目录的强大与高深,我会继续学习,争取给大家分享有用的东西。过年这段时间由于线上数据库经常压力过大导致响应非常缓慢甚至死机,咬咬牙下大决心来解决效率不高的问题!5 \- \) g7 N! I+ Y. g, g
首先是由于公司秉承快速开发原则,频繁上线,导致每次忽视了性能问题!日积月累,所以导致系统越来越慢,所以如果你的系统查询语句本来就优化的很好了可能参考意义不大!
. N" W3 ~2 \, d, O7 F" S9 n 提取慢查询日志文件,应该在你的DataDir目录下面
! p7 ^/ J5 M b4 @$ i1 c; _ 通过程序处理慢查询文件,将文件格式的慢查询导入到数据库中:) r5 { r' H7 r* i, G
1 mysql> desc slow_query;
/ `0 f% p" Y6 l, B+ Z 2 +---------------+-------------+------+-----+---------+-------+3 {5 e$ K3 q0 I& h0 Y
3 | Field | Type | Null | Key | Default | Extra |
; t& U8 H) H- |7 M+ J# J+ h 4 +---------------+-------------+------+-----+---------+-------+ t5 O2 v; [) o: O4 M
5 | Date | varchar(32) | NO | | | | 查询发生的时间
5 P/ `, T3 \# i1 E% P: [ 6 | user | varchar(64) | NO | | | | Q I4 R% u+ y' S
7 | host | varchar(64) | NO | | | |
- A, a, H" T7 l: I3 q$ K) C! q 8 | content | text | NO | | | | 将Statement进行Mask后的语句,便于Group By
( t4 u6 q; ^6 v: n# u/ c, l" z 9 | query_time | int(11) | NO | | | | 查询所用时间,直接性能指标
! R7 L7 x& o) F2 g 10 | lock_time | int(11) | YES | | 0 | | 等待锁定的时间# ^7 F! {( M0 B' o+ y* B7 ?
11 | rows_sent | int(11) | YES | | 0 | | 返回的结果行数
# G, n) p1 y' e+ |2 j3 } 12 | rows_examined | int(11) | YES | | 0 | | 扫描行数(很重要,上万以后就要重点注意了2 E6 U( K3 V7 o1 ~3 d
13 | statement | text | YES | | NULL | | 实际查询语句
& d9 J; L4 a" \) t/ i0 i9 m) g1 c 14 +---------------+-------------+------+-----+---------+-------+
2 F& S2 @. d: Z$ C 然后发挥您的想象力在这个表中尽力捕捉你想捕捉的,那类型语句压力最大、扫描行数最多、等锁最久……
% K W9 ]; D9 x 比如:; d( G& F8 X# r4 j; P+ I7 I# ]
优化后:
1 H' M3 n* `. U3 t9 m X 1 mysql> select sum(query_time)/count(*),count
" O# U! x! _- _& J/ f 2 (*),sum(query_time),min(Date),Max(Date) from slow where Date>'2008-02-20 22:50:52' and Date |