<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    --text字段增加處理

    --創(chuàng)建測(cè)試表
    create table test(id varchar(3),detail text)
    insert into test
    select '001','A*B'

    --定義添加的的字符串
    declare @s_str varchar(8000),@postion int
    select @s_str='*C'                 --要添加的字符串
            ,@postion=null                --追加的位置,null 加在尾部,0 加在首部,其他值則加在指定位置

    --字符串添加處理
    declare @p varbinary(16)
    select @p=textptr(detail) from test where id='001'
    updatetext test.detail @p @postion 0 @s_str

    --顯示處理結(jié)果
    select * from test
    go

    --刪除測(cè)試表
    drop table test


    --text字段的替換處理

    --創(chuàng)建數(shù)據(jù)測(cè)試環(huán)境
    create table test(id varchar(3),txt text)
    insert into test
    select '001','A*B'
    go

    --定義替換的字符串
    declare @s_str varchar(8000),@d_str varchar(8000)
    select @s_str='*'         --要替換的字符串
            ,@d_str='+'                --替換成的字符串

    --字符串替換處理
    declare @p varbinary(16),@postion int,@rplen int
    select @p=textptr(txt)
            ,@rplen=len(@s_str)
            ,@postion=charindex(@s_str,txt)-1
    from test where id='001'

    while @postion>0
    begin
            updatetext test.txt @p @postion @rplen @d_str
            select @postion=charindex(@s_str,txt)-1 from test
    end

    --顯示結(jié)果
    select * from test

    go
    --刪除數(shù)據(jù)測(cè)試環(huán)境
    drop table test

    --text字段的添加處理存儲(chǔ)過(guò)程--全表

    --創(chuàng)建測(cè)試表
    create table [user](uid int,UserLog text)
    create table [order](uid int,state bit)

    insert into [user]
    select 1,'a'
    union all select 2,'b'
    union all select 3,'c'

    insert into [order]
    select 1,1
    union all select 2,0
    union all select 3,1
    go

    --處理的存儲(chǔ)過(guò)程
    CREATE PROCEDURE spUpdateUserLog
    @StrLog text,
    @State int
    AS
    --定義游標(biāo),循環(huán)處理數(shù)據(jù)
    declare @uid int
    declare #tb cursor for select a.uid from [user] a join [order] b on a.uid=b.uid
    where state=@state

    open #tb
    fetch next from #tb into @uid
    while @@fetch_status=0
    begin
            --字符串添加處理
            declare @p varbinary(16)
            select @p=textptr(UserLog) from [user] where uid=@uid
            updatetext [user].UserLog @p null 0 @StrLog
            fetch next from #tb into @uid
    end
    close #tb
    deallocate #tb
    go

    --調(diào)用示例:
    exec spUpdateUserLog '123',1

    --顯示處理結(jié)果
    select * from [user]

    go

    --刪除測(cè)試環(huán)境
    drop table [user],[order]
    drop proc spUpdateUserLog

    /*--測(cè)試結(jié)果

    uid         UserLog   
    ----------- ----------
    1           a123
    2           b
    3           c123

    (所影響的行數(shù)為 3 行)
    --*/
    --text字段的替換處理--全表替換

    --創(chuàng)建數(shù)據(jù)測(cè)試環(huán)境
    create table test(id varchar(3),txt text)
    insert into test
    select '001','A*B'
    union all select '002','A*B-AA*BB'
    go

    --定義替換的字符串
    declare @s_str varchar(8000),@d_str varchar(8000)
    select @s_str='*'         --要替換的字符串
            ,@d_str='+'                --替換成的字符串


    --定義游標(biāo),循環(huán)處理數(shù)據(jù)
    declare @id varchar(3)
    declare #tb cursor for select id from test
    open #tb
    fetch next from #tb into @id
    while @@fetch_status=0
    begin
            --字符串替換處理
            declare @p varbinary(16),@postion int,@rplen int
            select @p=textptr(txt)
                    ,@rplen=len(@s_str)
                    ,@postion=charindex(@s_str,txt)-1
            from test where id=@id
           
            while @postion>0
            begin
                    updatetext test.txt @p @postion @rplen @d_str
                    select @postion=charindex(@s_str,txt)-1 from test where id=@id
            end

            fetch next from #tb into @id
    end
    close #tb
    deallocate #tb

    --顯示結(jié)果
    select * from test

    go
    --刪除數(shù)據(jù)測(cè)試環(huán)境
    drop table test

    ************************
    支持text字段處理的僅有:
    下面的函數(shù)和語(yǔ)句可以與 ntext、text 或 image 數(shù)據(jù)一起使用。
    函數(shù)          語(yǔ)句
    DATALENGTH    READTEXT
    PATINDEX      SET TEXTSIZE
    SUBSTRING     UPDATETEXT
    TEXTPTR       WRITETEXT
    TEXTVALID


    1:替換

    --創(chuàng)建數(shù)據(jù)測(cè)試環(huán)境
    create table #tb(aa text)
    insert into #tb select 'abc123abc123,asd'

    --定義替換的字符串
    declare @s_str varchar(8000),@d_str varchar(8000)
    select @s_str='123' --要替換的字符串
    ,@d_str='000' --替換成的字符串

    --字符串替換處理
    declare @p varbinary(16),@postion int,@rplen int
    select @p=textptr(aa),@rplen=len(@s_str),@postion=charindex(@s_str,aa)-1 from #tb
    while @postion>0
    begin
    updatetext #tb.aa @p @postion @rplen @d_str
    select @postion=charindex(@s_str,aa)-1 from #tb
    end

    --顯示結(jié)果
    select * from #tb

    --刪除數(shù)據(jù)測(cè)試環(huán)境
    drop table #tb

    /****************全部替換************************/
    DECLARE @ptrval binary(16)
    SELECT @ptrval = TEXTPTR(aa)  FROM  #tb  WHERE aa like '%數(shù)據(jù)2%'
    if @ptrval is not null        -- 一定要加上此句,否則若找不到數(shù)據(jù)下一句就會(huì)報(bào)錯(cuò)
    UPDATETEXT #tb.aa @ptrval 0 null '數(shù)據(jù)3'


    /****************在字段尾添加**********************************/
    --定義添加的的字符串
    declare @s_str varchar(8000)
    select @s_str='*C'   --要添加的字符串
    --字符串添加處理
    declare @p varbinary(16),@postion int,@rplen int
    select @p=textptr(detail) from test where id='001'
    updatetext test.detail @p null null @s_str


    總結(jié):
    1:Text字段類型不能直接用replace函數(shù)來(lái)替換,必須用updatetext
    2:字段比較不能用 where 字段 = ‘某數(shù)據(jù)’,可以用like來(lái)代替
    3:updatetext時(shí),若@ptrval值為空會(huì)出錯(cuò),需注意。
    posted @ 2008-09-16 18:07 肖馬輝 閱讀(197) | 評(píng)論 (0)編輯 收藏
     

    Sql Server實(shí)用操作小技巧集合

    19樓互動(dòng)空間|4LS` F5s
     
    Ld4X7u4nFK r6u0  包括安裝時(shí)提示有掛起的操作、收縮數(shù)據(jù)庫(kù)、壓縮數(shù)據(jù)庫(kù)、轉(zhuǎn)移數(shù)據(jù)庫(kù)給新用戶以已存在用戶權(quán)限、檢查備份集、修復(fù)數(shù)據(jù)庫(kù)等

      (一)掛起操作

      在安裝Sql或sp補(bǔ)丁的時(shí)候系統(tǒng)提示之前有掛起的安裝操作,要求重啟,這里往往重啟無(wú)用,解決辦法:19樓互動(dòng)空間 Q]];_H8l
    到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager19樓互動(dòng)空間+J1W @{:F?A} h
    刪除PendingFileRenameOperations

      二)收縮數(shù)據(jù)庫(kù)

    --重建索引
    &?)PIL-L4S'KF9Cl0DBCC REINDEX19樓互動(dòng)空間-VQP,sxL mdOe
    DBCC INDEXDEFRAG19樓互動(dòng)空間5eR4Ni&K
    --收縮數(shù)據(jù)和日志
    u}l+y&V'{ G%Ed0DBCC SHRINKDB19樓互動(dòng)空間 x&StK+K8{7q
    DBCC SHRINKFILE

      (三)壓縮數(shù)據(jù)庫(kù)

      dbcc shrinkdatabase(dbname)

      四)轉(zhuǎn)移數(shù)據(jù)庫(kù)給新用戶以已存在用戶權(quán)限

    exec sp_change_users_login 'update_one','newname','oldname'19樓互動(dòng)空間3G%V jji0S WdO7M^
    go

      (五)檢查備份集

    RESTORE VERIFYONLY from disk='E:\dvbbs.bak'

      (六)修復(fù)數(shù)據(jù)庫(kù)

    ALTER DATABASE [dvbbs] SET SINGLE_USER19樓互動(dòng)空間%m ~+[D KjFB
    GO
    0Ma7Q)z6B:q0DBCC CHECKDB('dvbbs',repair_allow_data_loss) WITH TABLOCK
    'l}.v@7QDu"a8A0GO
    !l*a)V0J| RH/d0ALTER DATABASE [dvbbs] SET MULTI_USER
    Z&^#rZ#gXt|]0GO


    p;}qp#Y'l0--CHECKDB 有3個(gè)參數(shù):

    --REPAIR_ALLOW_DATA_LOSS

    -- 執(zhí)行由 REPAIR_REBUILD 完成的所有修復(fù),包括對(duì)行和頁(yè)進(jìn)行分配和取消分配以改正分配錯(cuò)誤、結(jié)構(gòu)行或頁(yè)的錯(cuò)誤,以及刪除已損壞的文本對(duì)象。這些修復(fù)可能會(huì)導(dǎo)致一些數(shù)據(jù)丟失。修復(fù)操作可以在用戶事務(wù)下完成以允許用戶回滾所做的更改。如果回滾修復(fù),則數(shù)據(jù)庫(kù)仍會(huì)含有錯(cuò)誤,應(yīng)該從備份進(jìn)行恢復(fù)。如果由于所提供修復(fù)等級(jí)的緣故遺漏某個(gè)錯(cuò)誤的修復(fù),則將遺漏任何取決于該修復(fù)的修復(fù)。修復(fù)完成后,備份數(shù)據(jù)庫(kù)。19樓互動(dòng)空間Zor:GjZ
    --REPAIR_FAST 進(jìn)行小的、不耗時(shí)的修復(fù)操作,如修復(fù)非聚集索引中的附加鍵。這些修復(fù)可以很快完成,并且不會(huì)有丟失數(shù)據(jù)的危險(xiǎn)。

    --REPAIR_REBUILD 執(zhí)行由 REPAIR_FAST 完成的所有修復(fù),包括需要較長(zhǎng)時(shí)間的修復(fù)(如重建索引)。執(zhí)行這些修復(fù)時(shí)不會(huì)有丟失數(shù)據(jù)的危險(xiǎn)。

    --DBCC CHECKDB('dvbbs') with NO_INFOMSGS,PHYSICAL_ONLY

    SQL SERVER日志清除的兩種方法
    L jR;DcN |0在使用過(guò)程中大家經(jīng)常碰到數(shù)據(jù)庫(kù)日志非常大的情況,在這里介紹了兩種處理方法……

    方法一

    一般情況下,SQL數(shù)據(jù)庫(kù)的收縮并不能很大程度上減小數(shù)據(jù)庫(kù)大小,其主要作用是收縮日志大小,應(yīng)當(dāng)定期進(jìn)行此操作以免數(shù)據(jù)庫(kù)日志過(guò)大

    1、設(shè)置數(shù)據(jù)庫(kù)模式為簡(jiǎn)單模式:打開(kāi)SQL企業(yè)管理器,在控制臺(tái)根目錄中依次點(diǎn)開(kāi)Microsoft SQL Server-->SQL Server組-->雙擊打開(kāi)你的服務(wù)器-->雙擊打開(kāi)數(shù)據(jù)庫(kù)目錄-->選擇你的數(shù)據(jù)庫(kù)名稱(如論壇數(shù)據(jù)庫(kù)Forum)-->然后點(diǎn)擊右鍵選擇屬性-->選擇選項(xiàng)-->在故障還原的模式中選擇“簡(jiǎn)單”,然后按確定保存

    2、在當(dāng)前數(shù)據(jù)庫(kù)上點(diǎn)右鍵,看所有任務(wù)中的收縮數(shù)據(jù)庫(kù),一般里面的默認(rèn)設(shè)置不用調(diào)整,直接點(diǎn)確定

    3、收縮數(shù)據(jù)庫(kù)完成后,建議將您的數(shù)據(jù)庫(kù)屬性重新設(shè)置為標(biāo)準(zhǔn)模式,操作方法同第一點(diǎn),因?yàn)槿罩驹谝恍┊惓G闆r下往往是恢復(fù)數(shù)據(jù)庫(kù)的重要依據(jù)

    方法二

    SET NOCOUNT ON
    J,P4[3Me{.n:D j0DECLARE @LogicalFileName sysname,19樓互動(dòng)空間+i8tjMO*s7\g
    @MaxMinutes INT,
    L@2l4DP bch;`0@NewSize INT

    19樓互動(dòng)空間#~Wx/@M tb%H;A"[\
    USE tablename -- 要操作的數(shù)據(jù)庫(kù)名
    N4jX ^ z,t^/o;v5^0SELECT @LogicalFileName = 'tablename_log', -- 日志文件名19樓互動(dòng)空間3|Oae~~ a2C
    @MaxMinutes = 10, -- Limit on time allowed to wrap log.19樓互動(dòng)空間8o5IB u#pd:x G
    @NewSize = 1 -- 你想設(shè)定的日志文件的大小(M)

    -- Setup / initialize
    4f5dPR(o)Ph'x-JJ0DECLARE @OriginalSize int19樓互動(dòng)空間G%BUU8^0~5Y`-Ye
    SELECT @OriginalSize = size
    O,wq+f2WbC0FROM sysfiles
    (GX9?Z ^%W$g0WHERE name = @LogicalFileName
    /{k};\ _b%q0SELECT 'Original Size of ' + db_name() + ' LOG is ' +19樓互動(dòng)空間S&u y2qw#l
    CONVERT(VARCHAR(30),@OriginalSize) + ' 8K pages or ' +
    8}Q @.K1L(w0CONVERT(VARCHAR(30),(@OriginalSize*8/1024)) + 'MB'
    *K8hXUM"Qy%b0FROM sysfiles19樓互動(dòng)空間7N%w.wV9q
    WHERE name = @LogicalFileName
    ~9i:d4mX0d0CREATE TABLE DummyTrans19樓互動(dòng)空間\%b$[ D7v7H{
    (DummyColumn char (8000) not null)


    ]sU-x[ y'@k3\}0DECLARE @Counter INT,
    B0[4T;\6cd9Je0@StartTime DATETIME,19樓互動(dòng)空間$W.a'F^ ETK[l
    @TruncLog VARCHAR(255)19樓互動(dòng)空間+F5\3h!`c
    SELECT @StartTime = GETDATE(),
    j5[*Z T dWO&[$\0@TruncLog = 'BACKUP LOG ' + db_name() + ' WITH TRUNCATE_ONLY'

    DBCC SHRINKFILE (@LogicalFileName, @NewSize)19樓互動(dòng)空間+@s'|'y |+t,d&U
    EXEC (@TruncLog)19樓互動(dòng)空間%C7{R,iP+s NK
    -- Wrap the log if necessary.
    4s#m @2]W v7c0WHILE @MaxMinutes > DATEDIFF (mi, @StartTime, GETDATE()) -- time has not expired
    !}&v_Zp+k)R#G-dV F0AND @OriginalSize = (SELECT size FROM sysfiles WHERE name = @LogicalFileName)19樓互動(dòng)空間 J1KneZ/hy
    AND (@OriginalSize * 8 /1024) > @NewSize
    :r {Bc`#V0BEGIN -- Outer loop.
    h\ YFU4Bh/D5Xv5y6O2S0SELECT @Counter = 019樓互動(dòng)空間T*NRf8@
    WHILE ((@Counter < @OriginalSize / 16) AND (@Counter < 50000))19樓互動(dòng)空間Bj Y1iDTP,P
    BEGIN -- update
    V B@%K9R/a0INSERT DummyTrans VALUES ('Fill Log')
    p)]&` ~C0DELETE DummyTrans
    W\-Ns R4LT8h0SELECT @Counter = @Counter + 1
    6Msy xWF cf@XC8^_m0END19樓互動(dòng)空間Yd_ EP,X aW e
    EXEC (@TruncLog)
    f,ec7[A0{)^0END
    #Z5|/|5X9b WY0SELECT 'Final Size of ' + db_name() + ' LOG is ' +19樓互動(dòng)空間L lQ`%y_
    CONVERT(VARCHAR(30),size) + ' 8K pages or ' +
    6e"Q\;[!i%xE8bQ0CONVERT(VARCHAR(30),(size*8/1024)) + 'MB'
    J e%~Kwvr0FROM sysfiles
    ,Iu&N S @0WHERE name = @LogicalFileName
    #C&@#sHB_0DROP TABLE DummyTrans19樓互動(dòng)空間_,K5yG,S KU
    SET NOCOUNT OFF

     

    刪除數(shù)據(jù)庫(kù)中重復(fù)數(shù)據(jù)的幾個(gè)方法19樓互動(dòng)空間[e-C7n^b _
    數(shù)據(jù)庫(kù)的使用過(guò)程中由于程序方面的問(wèn)題有時(shí)候會(huì)碰到重復(fù)數(shù)據(jù),重復(fù)數(shù)據(jù)導(dǎo)致了數(shù)據(jù)庫(kù)部分設(shè)置不能正確設(shè)置……

    方法一

    declare @max integer,@id integer19樓互動(dòng)空間 Y&`*_9G9M H#t
    declare cur_rows cursor local for select 主字段,count(*) from 表名 group by 主字段 having count(*) > 119樓互動(dòng)空間.y6h^6} RM
    open cur_rows
    i m)q i2L:Z0fetch cur_rows into @id,@max19樓互動(dòng)空間C!Ik)w GI;~X
    while @@fetch_status=019樓互動(dòng)空間!\J[!x.T!]
    begin19樓互動(dòng)空間f eC G;f N$S-u
    select @max = @max -1
    1~$zT$Di7ZFTai:\0set rowcount @max
    c8k4f Axh8@ zx0delete from 表名 where 主字段 = @id
    K)c0k7P gbP!E@0fetch cur_rows into @id,@max
    9[Ri4F Q+|~(?I0end
    ,d3Tk$Cba0close cur_rows
    Y:N*B,Rp&zY0set rowcount 0

    方法二

    有兩個(gè)意義上的重復(fù)記錄,一是完全重復(fù)的記錄,也即所有字段均重復(fù)的記錄,二是部分關(guān)鍵字段重復(fù)的記錄,比如Name字段重復(fù),而其他字段不一定重復(fù)或都重復(fù)可以忽略。19樓互動(dòng)空間&Ae J7?M4]spd
    1、對(duì)于第一種重復(fù),比較容易解決,使用
    w qzC jW+w$w0select distinct * from tableName19樓互動(dòng)空間 zg8G'jb;k]!u
    就可以得到無(wú)重復(fù)記錄的結(jié)果集。19樓互動(dòng)空間O&F*]B*at8X#]]
    如果該表需要?jiǎng)h除重復(fù)的記錄(重復(fù)記錄保留1條),可以按以下方法刪除19樓互動(dòng)空間#BK9@4T#B
    select distinct * into #Tmp from tableName19樓互動(dòng)空間/q0AEITHy{[p B
    drop table tableName
    '}6[5jMUi-b*a0select * into tableName from #Tmp
    ,y~ ]X#f;R0drop table #Tmp19樓互動(dòng)空間6}@%r?rn"j`~$C
    發(fā)生這種重復(fù)的原因是表設(shè)計(jì)不周產(chǎn)生的,增加唯一索引列即可解決。

    2、這類重復(fù)問(wèn)題通常要求保留重復(fù)記錄中的第一條記錄,操作方法如下
    h6p%Y9mN2Xr0Ei~0假設(shè)有重復(fù)的字段為Name,Address,要求得到這兩個(gè)字段唯一的結(jié)果集
    !p{VE4N'd0select identity(int,1,1) as autoID, * into #Tmp from tableName
    o9MI*x+w b GI"F-c0select min(autoID) as autoID into #Tmp2 from #Tmp group by Name,autoID19樓互動(dòng)空間 m(}R] I ~
    select * from #Tmp where autoID in(select autoID from #tmp2)
    }J\.Alh!q8~J;r0最后一個(gè)select即得到了Name,Address不重復(fù)的結(jié)果集(但多了一個(gè)autoID字段,實(shí)際寫時(shí)可以寫在select子句中省去此列)


    $I&k o#l(WRk l0更改數(shù)據(jù)庫(kù)中表的所屬用戶的兩個(gè)方法19樓互動(dòng)空間_H\Q+DH\
    大家可能會(huì)經(jīng)常碰到一個(gè)數(shù)據(jù)庫(kù)備份還原到另外一臺(tái)機(jī)器結(jié)果導(dǎo)致所有的表都不能打開(kāi)了,原因是建表的時(shí)候采用了當(dāng)時(shí)的數(shù)據(jù)庫(kù)用戶……


    5eN;o U { L2EIvD3@0--更改某個(gè)表19樓互動(dòng)空間6O1C_6F+F2S_
    exec sp_changeobjectowner 'tablename','dbo'

    19樓互動(dòng)空間 mX p9qq6sZT0F
    --存儲(chǔ)更改全部表19樓互動(dòng)空間5@u|`2X}
    CREATE PROCEDURE dbo.User_ChangeObjectOwnerBatch
    E1Q5O JK0@OldOwner as NVARCHAR(128),19樓互動(dòng)空間T-zuq:x;s"Z9q_
    @NewOwner as NVARCHAR(128)
    'zC9p*e;HB'|0AS

    DECLARE @Name as NVARCHAR(128)19樓互動(dòng)空間#j"j)},Nu-x
    DECLARE @Owner as NVARCHAR(128)
    D(f` k9S B"`0DECLARE @OwnerName as NVARCHAR(128)

    DECLARE curObject CURSOR FOR19樓互動(dòng)空間$W!qeIB]%L4n"n
    select 'Name' = name,19樓互動(dòng)空間1X EKG&Q7~'K1LP/D
    'Owner' = user_name(uid)
    #pG+c{ k!ll0from sysobjects19樓互動(dòng)空間#vS[@+t:Q u#V
    where user_name(uid)=@OldOwner
    5z Lyc2}E!a2B$XXz!O0order by name

    OPEN curObject19樓互動(dòng)空間|x5a;}6o-Ip
    FETCH NEXT FROM curObject INTO @Name, @Owner
    3F6Kz^@m0WHILE(@@FETCH_STATUS=0)19樓互動(dòng)空間4TZG$?_a7c\b8f7z6b
    BEGIN19樓互動(dòng)空間?;n9Dn)b_Ln{xo
    if @Owner=@OldOwner19樓互動(dòng)空間%~Qa*E^ W|
    begin19樓互動(dòng)空間#iK0nMuDwn
    set @OwnerName = @OldOwner + '.' + rtrim(@Name)19樓互動(dòng)空間u\W"|J:eX+M
    exec sp_changeobjectowner @OwnerName, @NewOwner19樓互動(dòng)空間D~ r&d$X x ^ }4`.r
    end19樓互動(dòng)空間 kg X?*TJ|0|8C
    -- select @name,@NewOwner,@OldOwner

    FETCH NEXT FROM curObject INTO @Name, @Owner19樓互動(dòng)空間X)J3m9q!^
    END

    close curObject
    d P9H~ H,`4g!J0deallocate curObject


    e je.H z"q0GO


    jy(mu ]9[+G K0SQL SERVER中直接循環(huán)寫入數(shù)據(jù)19樓互動(dòng)空間I.s}/}|7P4O
    沒(méi)什么好說(shuō)的了,大家自己看,有時(shí)候有點(diǎn)用處

    declare @i int
    Zu/J0h g3Z;_ k0set @i=1
    bmb#d2e| _kk0while @i<30
    L\ ~td^[cr0begin19樓互動(dòng)空間d-w2sx&q:Q"[
    insert into test (userid) values(@i)19樓互動(dòng)空間$AfOv~9rc#i.t
    set @i=@i+1
    ^(G Ggfv?.F0end

     

    無(wú)數(shù)據(jù)庫(kù)日志文件恢復(fù)數(shù)據(jù)庫(kù)方法兩則
    4`/E \%T/P*l0數(shù)據(jù)庫(kù)日志文件的誤刪或別的原因引起數(shù)據(jù)庫(kù)日志的損壞

    方法一

    1.新建一個(gè)同名的數(shù)據(jù)庫(kù)

    2.再停掉sql server(注意不要分離數(shù)據(jù)庫(kù))

    3.用原數(shù)據(jù)庫(kù)的數(shù)據(jù)文件覆蓋掉這個(gè)新建的數(shù)據(jù)庫(kù)

    4.再重啟sql server

    5.此時(shí)打開(kāi)企業(yè)管理器時(shí)會(huì)出現(xiàn)置疑,先不管,執(zhí)行下面的語(yǔ)句(注意修改其中的數(shù)據(jù)庫(kù)名)

    6.完成后一般就可以訪問(wèn)數(shù)據(jù)庫(kù)中的數(shù)據(jù)了,這時(shí),數(shù)據(jù)庫(kù)本身一般還要問(wèn)題,解決辦法是,利用
    7`6C rZc};\"i$M0數(shù)據(jù)庫(kù)的腳本創(chuàng)建一個(gè)新的數(shù)據(jù)庫(kù),并將數(shù)據(jù)導(dǎo)進(jìn)去就行了.

    USE MASTER19樓互動(dòng)空間6\@mUmJ+u7K
    GO

    SP_CONFIGURE 'ALLOW UPDATES',1 RECONFIGURE WITH OVERRIDE
    Bm,^mR-z)s~0GO

    UPDATE SYSDATABASES SET STATUS =32768 WHERE NAME='置疑的數(shù)據(jù)庫(kù)名'19樓互動(dòng)空間r4uR Q I{
    Go

    sp_dboption '置疑的數(shù)據(jù)庫(kù)名', 'single user', 'true'
    v3A3\Q6i ]0Go

    DBCC CHECKDB('置疑的數(shù)據(jù)庫(kù)名')
    b Q%H}I1r6os0Go

    update sysdatabases set status =28 where name='置疑的數(shù)據(jù)庫(kù)名'
    *v[$LqXck X0Go

    sp_configure 'allow updates', 0 reconfigure with override
    9@eyZ l3r;Z0Go

    sp_dboption '置疑的數(shù)據(jù)庫(kù)名', 'single user', 'false'
    q'~(N)o%X4Lx0Go

    方法二

    事情的起因
    E4ta6O(hE0昨天,系統(tǒng)管理員告訴我,我們一個(gè)內(nèi)部應(yīng)用數(shù)據(jù)庫(kù)所在的磁盤空間不足了。我注意到數(shù)據(jù)庫(kù)事件日志文件XXX_Data.ldf文件已經(jīng)增長(zhǎng)到了3GB,于是我決意縮小這個(gè)日志文件。經(jīng)過(guò)收縮數(shù)據(jù)庫(kù)等操作未果后,我犯了一個(gè)自進(jìn)入行業(yè)以來(lái)的最大最愚蠢的錯(cuò)誤:竟然誤刪除了這個(gè)日志文件!后來(lái)我看到所有論及數(shù)據(jù)庫(kù)恢復(fù)的文章上都說(shuō)道:“無(wú)論如何都要保證數(shù)據(jù)庫(kù)日志文件存在,它至關(guān)重要”,甚至微軟甚至有一篇KB文章講如何只靠日志文件恢復(fù)數(shù)據(jù)庫(kù)的。我真是不知道我那時(shí)候是怎么想的?!

    這下子壞了!這個(gè)數(shù)據(jù)庫(kù)連不上了,企業(yè)管理器在它的旁邊寫著“(置疑)”。而且最要命的,這個(gè)數(shù)據(jù)庫(kù)從來(lái)沒(méi)有備份了。我唯一找得到的是遷移半年前的另外一個(gè)數(shù)據(jù)庫(kù)服務(wù)器,應(yīng)用倒是能用了,但是少了許多記錄、表和存儲(chǔ)過(guò)程。真希望這只是一場(chǎng)噩夢(mèng)!

    沒(méi)有效果的恢復(fù)步驟19樓互動(dòng)空間yp s*Y} j1t.B?,euV
    附加數(shù)據(jù)庫(kù)
    {"plv3x%}3h_0_Rambo講過(guò)被刪除日志文件中不存在活動(dòng)日志時(shí),可以這么做來(lái)恢復(fù):

    1,分離被置疑的數(shù)據(jù)庫(kù),可以使用sp_detach_db19樓互動(dòng)空間w9]#xER,M
    2,附加數(shù)據(jù)庫(kù),可以使用sp_attach_single_file_db

    但是,很遺憾,執(zhí)行之后,SQL Server質(zhì)疑數(shù)據(jù)文件和日志文件不符,所以無(wú)法附加數(shù)據(jù)庫(kù)數(shù)據(jù)文件。

    DTS數(shù)據(jù)導(dǎo)出
    0\&]q^8|c~*z0不行,無(wú)法讀取XXX數(shù)據(jù)庫(kù),DTS Wizard報(bào)告說(shuō)“初始化上下文發(fā)生錯(cuò)誤”。

    緊急模式
    V;c^1w e `0怡紅公子講過(guò)沒(méi)有日志用于恢復(fù)時(shí),可以這么做:

    1,把數(shù)據(jù)庫(kù)設(shè)置為emergency mode

    2,重新建立一個(gè)log文件

    3,把SQL Server 重新啟動(dòng)一下

    4,把應(yīng)用數(shù)據(jù)庫(kù)設(shè)置成單用戶模式

    5,做DBCC CHECKDB

    6,如果沒(méi)有什么大問(wèn)題就可以把數(shù)據(jù)庫(kù)狀態(tài)改回去了,記得別忘了把系統(tǒng)表的修改選項(xiàng)關(guān)掉

    我實(shí)踐了一下,把應(yīng)用數(shù)據(jù)庫(kù)的數(shù)據(jù)文件移走,重新建立一個(gè)同名的數(shù)據(jù)庫(kù)XXX,然后停掉SQL服務(wù),把原來(lái)的數(shù)據(jù)文件再覆蓋回來(lái)。之后,按照怡紅公子的步驟走。

    但是,也很遺憾,除了第2步之外,其他步驟執(zhí)行非常成功。可惜,重啟SQL Server之后,這個(gè)應(yīng)用數(shù)據(jù)庫(kù)仍然是置疑!

    不過(guò),讓我欣慰的是,這么做之后,倒是能夠Select數(shù)據(jù)了,讓我大出一口氣。只不過(guò),組件使用數(shù)據(jù)庫(kù)時(shí),報(bào)告說(shuō):“發(fā)生錯(cuò)誤:-2147467259,未能在數(shù)據(jù)庫(kù) 'XXX' 中運(yùn)行 BEGIN TRANSACTION,因?yàn)樵摂?shù)據(jù)庫(kù)處于回避恢復(fù)模式。”

     

    最終成功恢復(fù)的全部步驟19樓互動(dòng)空間m%jL_ s ls`L
    設(shè)置數(shù)據(jù)庫(kù)為緊急模式19樓互動(dòng)空間v%x}]6Tr6eT
    停掉SQL Server服務(wù);

    把應(yīng)用數(shù)據(jù)庫(kù)的數(shù)據(jù)文件XXX_Data.mdf移走;

    重新建立一個(gè)同名的數(shù)據(jù)庫(kù)XXX;

    停掉SQL服務(wù);

    把原來(lái)的數(shù)據(jù)文件再覆蓋回來(lái);

    運(yùn)行以下語(yǔ)句,把該數(shù)據(jù)庫(kù)設(shè)置為緊急模式;

    運(yùn)行“Use Master

    Go

    sp_configure 'allow updates', 1

    reconfigure with override

    Go”

    執(zhí)行結(jié)果:

    DBCC 執(zhí)行完畢。如果 DBCC 輸出了錯(cuò)誤信息,請(qǐng)與系統(tǒng)管理員聯(lián)系。

    已將配置選項(xiàng) 'allow updates' 從 0 改為 1。請(qǐng)運(yùn)行 RECONFIGURE 語(yǔ)句以安裝。

     

    接著運(yùn)行“update sysdatabases set status = 32768 where name = 'XXX'”

    執(zhí)行結(jié)果:

    (所影響的行數(shù)為 1 行)

     

    重啟SQL Server服務(wù);

    運(yùn)行以下語(yǔ)句,把應(yīng)用數(shù)據(jù)庫(kù)設(shè)置為Single User模式;

    運(yùn)行“sp_dboption 'XXX', 'single user', 'true'”

    執(zhí)行結(jié)果:

    命令已成功完成。

     

    ü 做DBCC CHECKDB;

    運(yùn)行“DBCC CHECKDB('XXX')”

    執(zhí)行結(jié)果:

    'XXX' 的 DBCC 結(jié)果。

    'sysobjects' 的 DBCC 結(jié)果。

    對(duì)象 'sysobjects' 有 273 行,這些行位于 5 頁(yè)中。

    'sysindexes' 的 DBCC 結(jié)果。

    對(duì)象 'sysindexes' 有 202 行,這些行位于 7 頁(yè)中。

    'syscolumns' 的 DBCC 結(jié)果。

    ………

     

    ü 運(yùn)行以下語(yǔ)句把系統(tǒng)表的修改選項(xiàng)關(guān)掉;

    運(yùn)行“sp_resetstatus "XXX"

    go

    sp_configure 'allow updates', 0

    reconfigure with override

    Go”

    執(zhí)行結(jié)果:

    在 sysdatabases 中更新數(shù)據(jù)庫(kù) 'XXX' 的條目之前,模式 = 0,狀態(tài) = 28(狀態(tài) suspect_bit = 0),

    沒(méi)有更新 sysdatabases 中的任何行,因?yàn)橐颜_地重置了模式和狀態(tài)。沒(méi)有錯(cuò)誤,未進(jìn)行任何更改。

    DBCC 執(zhí)行完畢。如果 DBCC 輸出了錯(cuò)誤信息,請(qǐng)與系統(tǒng)管理員聯(lián)系。

    已將配置選項(xiàng) 'allow updates' 從 1 改為 0。請(qǐng)運(yùn)行 RECONFIGURE 語(yǔ)句以安裝。

    重新建立另外一個(gè)數(shù)據(jù)庫(kù)XXX.Lost;

    DTS導(dǎo)出向?qū)?br /> N.l2]7[/v` R'w0運(yùn)行DTS導(dǎo)出向?qū)В?/p>

    復(fù)制源選擇EmergencyMode的數(shù)據(jù)庫(kù)XXX,導(dǎo)入到XXX.Lost;

    選擇“在SQL Server數(shù)據(jù)庫(kù)之間復(fù)制對(duì)象和數(shù)據(jù)”,試了多次,好像不行,只是復(fù)制過(guò)來(lái)了所有表結(jié)構(gòu),但是沒(méi)有數(shù)據(jù),也沒(méi)有視圖和存儲(chǔ)過(guò)程,而且DTS向?qū)ё詈髨?bào)告復(fù)制失敗;

    所以最后選擇“從源數(shù)據(jù)庫(kù)復(fù)制表和視圖”,但是后來(lái)發(fā)現(xiàn),這樣總是只能復(fù)制一部分表記錄;

    于是選擇“用一條查詢指定要傳輸?shù)臄?shù)據(jù)”,缺哪個(gè)表記錄,就導(dǎo)哪個(gè);

    視圖和存儲(chǔ)過(guò)程是執(zhí)行SQL語(yǔ)句添加的。

     

    維護(hù)Sql Server中表的索引19樓互動(dòng)空間u1g)q5pp!Oo-m;]
    在使用和創(chuàng)建數(shù)據(jù)庫(kù)索引中經(jīng)常會(huì)碰到一些問(wèn)題,在這里可以采用一些另類的方法解決…

    --第一步:查看是否需要維護(hù),查看掃描密度/Scan Density是否為100%19樓互動(dòng)空間(C*c(v5]b|&[O&W9n
    declare @table_id int
    9?P7v3qC1R w0set @table_id=object_id('表名')19樓互動(dòng)空間&i ^,p8Xr&J9g/d7HY;_
    dbcc showcontig(@table_id)

    --第二步:重構(gòu)表索引
    }8k*\lK*V0dbcc dbreindex('表名',pk_索引名,100)

    --重做第一步,如發(fā)現(xiàn)掃描密度/Scan Density還是小于100%則重構(gòu)表的所有索引19樓互動(dòng)空間9D;q0J6C?'a
    --楊錚:并不一定能達(dá)100%。19樓互動(dòng)空間vYv&pX
    dbcc dbreindex('表名','',100)


    B"r)F![j0SQL Server補(bǔ)丁安裝常見(jiàn)問(wèn)題19樓互動(dòng)空間#?%xm9KvH8l
    誰(shuí)碰到問(wèn)題就看看咯:)

    一、補(bǔ)丁安裝過(guò)程中常見(jiàn)問(wèn)題


    |9_Wp:xF-]*V0如果在安裝補(bǔ)丁的時(shí)候遇到如下類似錯(cuò)誤:

    1、安裝過(guò)程中出現(xiàn)“以前進(jìn)行的程序創(chuàng)建了掛起的文件操作,運(yùn)行安裝程序前,必須重新啟動(dòng)”,請(qǐng)按照下面步驟解決:

    a、重啟機(jī)器,再進(jìn)行安裝,如果發(fā)現(xiàn)還有該錯(cuò)誤,請(qǐng)按下面步驟19樓互動(dòng)空間#H*Qy-R OB,O)yP
    b、在開(kāi)始->運(yùn)行中輸入regedit
    Py1Jl#i+na0c、到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager 位置19樓互動(dòng)空間 e BjCK.zN'Zt
    d、選擇文件->倒出,保存
    0k*Y&yDv-AX0iuo0e、在右邊窗口右擊PendingFileRenameOperations,選擇刪除,然后確認(rèn)
    'u ]f o!z0f、重啟安裝,問(wèn)題解決

    如果還有同樣問(wèn)題,請(qǐng)檢查其它注冊(cè)表中是否有該值存在,如有請(qǐng)刪掉。

    19樓互動(dòng)空間[)Y]4F)^7mC8k
    2、在安裝SQL Server SP3,有時(shí)候會(huì)出現(xiàn):無(wú)論用windows認(rèn)證還是混和認(rèn)證,都出現(xiàn)密碼錯(cuò)誤的情況,這時(shí)查看臨時(shí)目錄下的sqlsp.out,會(huì)發(fā)現(xiàn)以下描述:
    ;eu8XB$d!e)e0[TCP/IP Sockets]Specified SQL server not found.19樓互動(dòng)空間8h-S\_'RO
    [TCP/IP Sockets]ConnectionOpen (Connect()).
    z+E*l\ ?7|Ho0其實(shí)這是SQL Server SP3的一個(gè)小bug,在安裝sp3的時(shí)候,沒(méi)有監(jiān)聽(tīng)tcp/ip端口,可以按照以下步驟進(jìn)行:

    1、打開(kāi)SQL server客戶器網(wǎng)絡(luò)實(shí)用工具和服務(wù)器網(wǎng)絡(luò)工具,確保啟用的協(xié)議中包含name pipe,并且位置在第一位.19樓互動(dòng)空間+fEN)Gp
    2、確保[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Client\ConnectTo]
    I&n)ZL?N.Lp X0"DSQUERY"="DBNETLIB".19樓互動(dòng)空間 x a}c:\
    如果沒(méi)有,請(qǐng)自己建立
    tC4@3e7Z+zR03、停止mssql.19樓互動(dòng)空間6e"\s} lx%v+Z8N
    4、進(jìn)行安裝.

    這樣就可以進(jìn)行正確安裝了。

    二、SQL Server補(bǔ)丁版本的檢查

    SQL Server的補(bǔ)丁版本檢查不如Windows 補(bǔ)丁版本檢查直接,一個(gè)系統(tǒng)管理員,如果不了解SQL Server版本對(duì)應(yīng)的補(bǔ)丁號(hào),可能也會(huì)遇到一點(diǎn)麻煩,因此在這說(shuō)明一下,通過(guò)這樣的辦法判別機(jī)器是安全的辦法,不會(huì)對(duì)系統(tǒng)產(chǎn)生任何影響。19樓互動(dòng)空間5od&L4|H"|k
    1、用Isql或者SQL查詢分析器登錄到SQL Server,如果是用Isql,請(qǐng)?jiān)赾md窗口輸入isql -U sa,然后輸入密碼,進(jìn)入;如果是用SQL查詢分析器,請(qǐng)從程序中啟動(dòng),輸入sa和密碼(也可以用windows驗(yàn)證)。19樓互動(dòng)空間)Z*Ja5a#~b0{d
    2、在ISQL中輸入:
    7fKBt*Fl$hN+Bz0Select @@Version;
    Yh:VY!j9I-|u7G0go

    或者SQL查詢分析器中輸入(其實(shí)如果不想輸入,只要打開(kāi)幫助的關(guān)于就可以了:))19樓互動(dòng)空間)| [A`9t$XEb@
    Select @@Version;19樓互動(dòng)空間6F&A"e$yMT
    然后按執(zhí)行;19樓互動(dòng)空間!wfSi+a_6T
    這時(shí)會(huì)返回SQL的版本信息,如下:
    r7A0U1l&i1@,Sh?0Microsoft SQL Server 2000 - 8.00.760 (Intel X86) Dec 17 2002 14:22:05 Copyright (c) 1988-2003 Microsoft Corporation Enterprise Edition on Windows NT 5.0 (Build 2195: Service Pack 3)
    \_L*V c'p0其中的8.00.760就是SQL Server的版本和補(bǔ)丁號(hào)。對(duì)應(yīng)關(guān)系如下:

    8.00.194 -——————SQL Server 2000 RTM19樓互動(dòng)空間-z/DK-un P4T
    8.00.384 -——————(SP1)
    NP oWt+\6d)X08.00.534 -——————(SP2)19樓互動(dòng)空間7Y$A8f qsb5`y
    8.00.760 -——————(SP3)

    這樣我們就能看到SQL Server的正確版本和補(bǔ)丁號(hào)了。

    我們也可以用xp_msver看到更詳細(xì)的信息

    Sql Server數(shù)據(jù)庫(kù)的備份和恢復(fù)措施19樓互動(dòng)空間F"N1p(_o Tt7K
    最常用的操作,新手們看看……

    一、備份數(shù)據(jù)庫(kù)

    1、打開(kāi)SQL企業(yè)管理器,在控制臺(tái)根目錄中依次點(diǎn)開(kāi)Microsoft SQL Server
    2FNN&f/M.m+b02、SQL Server組-->雙擊打開(kāi)你的服務(wù)器-->雙擊打開(kāi)數(shù)據(jù)庫(kù)目錄19樓互動(dòng)空間(P?)js6v }}*vjs[
    3、選擇你的數(shù)據(jù)庫(kù)名稱(如論壇數(shù)據(jù)庫(kù)Forum)-->然后點(diǎn)上面菜單中的工具-->選擇備份數(shù)據(jù)庫(kù)19樓互動(dòng)空間6_x+us8C$\ s7@![+s:M
    4、備份選項(xiàng)選擇完全備份,目的中的備份到如果原來(lái)有路徑和名稱則選中名稱點(diǎn)刪除,然后點(diǎn)添加,如果原來(lái)沒(méi)有路徑和名稱則直接選擇添加,接著指定路徑和文件名,指定后點(diǎn)確定返回備份窗口,接著點(diǎn)確定進(jìn)行備份

    二、還原數(shù)據(jù)庫(kù)

    1、打開(kāi)SQL企業(yè)管理器,在控制臺(tái)根目錄中依次點(diǎn)開(kāi)Microsoft SQL Server19樓互動(dòng)空間xq A Bj)r3u |
    2、SQL Server組-->雙擊打開(kāi)你的服務(wù)器-->點(diǎn)圖標(biāo)欄的新建數(shù)據(jù)庫(kù)圖標(biāo),新建數(shù)據(jù)庫(kù)的名字自行取19樓互動(dòng)空間cwC{"o
    3、點(diǎn)擊新建好的數(shù)據(jù)庫(kù)名稱(如論壇數(shù)據(jù)庫(kù)Forum)-->然后點(diǎn)上面菜單中的工具-->選擇恢復(fù)數(shù)據(jù)庫(kù)19樓互動(dòng)空間i9nqA0s r`
    4、在彈出來(lái)的窗口中的還原選項(xiàng)中選擇從設(shè)備-->點(diǎn)選擇設(shè)備-->點(diǎn)添加-->然后選擇你的備份文件名-->添加后點(diǎn)確定返回,這時(shí)候設(shè)備欄應(yīng)該出現(xiàn)您剛才選擇的數(shù)據(jù)庫(kù)備份文件名,備份號(hào)默認(rèn)為1(如果您對(duì)同一個(gè)文件做過(guò)多次備份,可以點(diǎn)擊備份號(hào)旁邊的查看內(nèi)容,在復(fù)選框中選擇最新的一次備份后點(diǎn)確定)-->然后點(diǎn)擊上方常規(guī)旁邊的選項(xiàng)按鈕19樓互動(dòng)空間@%u5B!L#Z d2A$W
    5、在出現(xiàn)的窗口中選擇在現(xiàn)有數(shù)據(jù)庫(kù)上強(qiáng)制還原,以及在恢復(fù)完成狀態(tài)中選擇使數(shù)據(jù)庫(kù)可以繼續(xù)運(yùn)行但無(wú)法還原其它事務(wù)日志的選項(xiàng)。在窗口的中間部位的將數(shù)據(jù)庫(kù)文件還原為這里要按照你SQL的安裝進(jìn)行設(shè)置(也可以指定自己的目錄),邏輯文件名不需要改動(dòng),移至物理文件名要根據(jù)你所恢復(fù)的機(jī)器情況做改動(dòng),如您的SQL數(shù)據(jù)庫(kù)裝在D:\Program Files\Microsoft SQL Server\MSSQL\Data,那么就按照您恢復(fù)機(jī)器的目錄進(jìn)行相關(guān)改動(dòng)改動(dòng),并且最后的文件名最好改成您當(dāng)前的數(shù)據(jù)庫(kù)名(如原來(lái)是bbs_data.mdf,現(xiàn)在的數(shù)據(jù)庫(kù)是forum,就改成forum_data.mdf),日志和數(shù)據(jù)文件都要按照這樣的方式做相關(guān)的改動(dòng)(日志的文件名是*_log.ldf結(jié)尾的),這里的恢復(fù)目錄您可以自由設(shè)置,前提是該目錄必須存在(如您可以指定d:\sqldata\bbs_data.mdf或者d:\sqldata\bbs_log.ldf),否則恢復(fù)將報(bào)錯(cuò)19樓互動(dòng)空間2c!?%S4oP7u
    6、修改完成后,點(diǎn)擊下面的確定進(jìn)行恢復(fù),這時(shí)會(huì)出現(xiàn)一個(gè)進(jìn)度條,提示恢復(fù)的進(jìn)度,恢復(fù)完成后系統(tǒng)會(huì)自動(dòng)提示成功,如中間提示報(bào)錯(cuò),請(qǐng)記錄下相關(guān)的錯(cuò)誤內(nèi)容并詢問(wèn)對(duì)SQL操作比較熟悉的人員,一般的錯(cuò)誤無(wú)非是目錄錯(cuò)誤或者文件名重復(fù)或者文件名錯(cuò)誤或者空間不夠或者數(shù)據(jù)庫(kù)正在使用中的錯(cuò)誤,數(shù)據(jù)庫(kù)正在使用的錯(cuò)誤您可以嘗試關(guān)閉所有關(guān)于SQL窗口然后重新打開(kāi)進(jìn)行恢復(fù)操作,如果還提示正在使用的錯(cuò)誤可以將SQL服務(wù)停止然后重起看看,至于上述其它的錯(cuò)誤一般都能按照錯(cuò)誤內(nèi)容做相應(yīng)改動(dòng)后即可恢復(fù)

    三、收縮數(shù)據(jù)庫(kù)

    一般情況下,SQL數(shù)據(jù)庫(kù)的收縮并不能很大程度上減小數(shù)據(jù)庫(kù)大小,其主要作用是收縮日志大小,應(yīng)當(dāng)定期進(jìn)行此操作以免數(shù)據(jù)庫(kù)日志過(guò)大
    i YZJf$@8J1ez4M01、設(shè)置數(shù)據(jù)庫(kù)模式為簡(jiǎn)單模式:打開(kāi)SQL企業(yè)管理器,在控制臺(tái)根目錄中依次點(diǎn)開(kāi)Microsoft SQL Server-->SQL Server組-->雙擊打開(kāi)你的服務(wù)器-->雙擊打開(kāi)數(shù)據(jù)庫(kù)目錄-->選擇你的數(shù)據(jù)庫(kù)名稱(如論壇數(shù)據(jù)庫(kù)Forum)-->然后點(diǎn)擊右鍵選擇屬性-->選擇選項(xiàng)-->在故障還原的模式中選擇“簡(jiǎn)單”,然后按確定保存19樓互動(dòng)空間&p _7e6feV5V
    2、在當(dāng)前數(shù)據(jù)庫(kù)上點(diǎn)右鍵,看所有任務(wù)中的收縮數(shù)據(jù)庫(kù),一般里面的默認(rèn)設(shè)置不用調(diào)整,直接點(diǎn)確定
    P%IELCD`03、收縮數(shù)據(jù)庫(kù)完成后,建議將您的數(shù)據(jù)庫(kù)屬性重新設(shè)置為標(biāo)準(zhǔn)模式,操作方法同第一點(diǎn),因?yàn)槿罩驹谝恍┊惓G闆r下往往是恢復(fù)數(shù)據(jù)庫(kù)的重要依據(jù)

    四、設(shè)定每日自動(dòng)備份數(shù)據(jù)庫(kù)

    強(qiáng)烈建議有條件的用戶進(jìn)行此操作!19樓互動(dòng)空間S@Q"b"P {3@;n#P
    1、打開(kāi)企業(yè)管理器,在控制臺(tái)根目錄中依次點(diǎn)開(kāi)Microsoft SQL Server-->SQL Server組-->雙擊打開(kāi)你的服務(wù)器
    .bY?,{ llm0t02、然后點(diǎn)上面菜單中的工具-->選擇數(shù)據(jù)庫(kù)維護(hù)計(jì)劃器19樓互動(dòng)空間1Y e:\r`;g/L1F
    3、下一步選擇要進(jìn)行自動(dòng)備份的數(shù)據(jù)-->下一步更新數(shù)據(jù)優(yōu)化信息,這里一般不用做選擇-->下一步檢查數(shù)據(jù)完整性,也一般不選擇19樓互動(dòng)空間dx f'asp0C N]
    4、下一步指定數(shù)據(jù)庫(kù)維護(hù)計(jì)劃,默認(rèn)的是1周備份一次,點(diǎn)擊更改選擇每天備份后點(diǎn)確定
    ({"}/Gf${:HA05、下一步指定備份的磁盤目錄,選擇指定目錄,如您可以在D盤新建一個(gè)目錄如:d:\databak,然后在這里選擇使用此目錄,如果您的數(shù)據(jù)庫(kù)比較多最好選擇為每個(gè)數(shù)據(jù)庫(kù)建立子目錄,然后選擇刪除早于多少天前的備份,一般設(shè)定4-7天,這看您的具體備份要求,備份文件擴(kuò)展名一般都是bak就用默認(rèn)的19樓互動(dòng)空間 z J/DN!G'^ @ A
    6、下一步指定事務(wù)日志備份計(jì)劃,看您的需要做選擇-->下一步要生成的報(bào)表,一般不做選擇-->下一步維護(hù)計(jì)劃歷史記錄,最好用默認(rèn)的選項(xiàng)-->下一步完成
    \Cf8e*ZU%o07、完成后系統(tǒng)很可能會(huì)提示Sql Server Agent服務(wù)未啟動(dòng),先點(diǎn)確定完成計(jì)劃設(shè)定,然后找到桌面最右邊狀態(tài)欄中的SQL綠色圖標(biāo),雙擊點(diǎn)開(kāi),在服務(wù)中選擇Sql Server Agent,然后點(diǎn)擊運(yùn)行箭頭,選上下方的當(dāng)啟動(dòng)OS時(shí)自動(dòng)啟動(dòng)服務(wù)
    5? a)[TP B08、這個(gè)時(shí)候數(shù)據(jù)庫(kù)計(jì)劃已經(jīng)成功的運(yùn)行了,他將按照您上面的設(shè)置進(jìn)行自動(dòng)備份

    修改計(jì)劃:
    4p#AuE-r|$|01、打開(kāi)企業(yè)管理器,在控制臺(tái)根目錄中依次點(diǎn)開(kāi)Microsoft SQL Server-->SQL Server組-->雙擊打開(kāi)你的服務(wù)器-->管理-->數(shù)據(jù)庫(kù)維護(hù)計(jì)劃-->打開(kāi)后可看到你設(shè)定的計(jì)劃,可以進(jìn)行修改或者刪除操作

    五、數(shù)據(jù)的轉(zhuǎn)移(新建數(shù)據(jù)庫(kù)或轉(zhuǎn)移服務(wù)器)

    一般情況下,最好使用備份和還原操作來(lái)進(jìn)行轉(zhuǎn)移數(shù)據(jù),在特殊情況下,可以用導(dǎo)入導(dǎo)出的方式進(jìn)行轉(zhuǎn)移,這里介紹的就是導(dǎo)入導(dǎo)出方式,導(dǎo)入導(dǎo)出方式轉(zhuǎn)移數(shù)據(jù)一個(gè)作用就是可以在收縮數(shù)據(jù)庫(kù)無(wú)效的情況下用來(lái)減小(收縮)數(shù)據(jù)庫(kù)的大小,本操作默認(rèn)為您對(duì)SQL的操作有一定的了解,如果對(duì)其中的部分操作不理解,可以咨詢動(dòng)網(wǎng)相關(guān)人員或者查詢網(wǎng)上資料
    R'j:rSP4D01、將原數(shù)據(jù)庫(kù)的所有表、存儲(chǔ)過(guò)程導(dǎo)出成一個(gè)SQL文件,導(dǎo)出的時(shí)候注意在選項(xiàng)中選擇編寫索引腳本和編寫主鍵、外鍵、默認(rèn)值和檢查約束腳本選項(xiàng)
    4R6yi:t?02、新建數(shù)據(jù)庫(kù),對(duì)新建數(shù)據(jù)庫(kù)執(zhí)行第一步中所建立的SQL文件
    (c3yyhR#N;t03、用SQL的導(dǎo)入導(dǎo)出方式,對(duì)新數(shù)據(jù)庫(kù)導(dǎo)入原數(shù)據(jù)庫(kù)中的所有表內(nèi)容

    利用數(shù)據(jù)庫(kù)日志恢復(fù)數(shù)據(jù)到時(shí)間點(diǎn)的操作19樓互動(dòng)空間#c%c'_Q.~ [4|jz)G
    由于不正常的數(shù)據(jù)丟失,而又不想使用備份數(shù)據(jù)還原,只要原來(lái)有備份且當(dāng)前日志保存完好,可以采用這個(gè)方法試試,說(shuō)不定可挽回?fù)p失……

    1,如果誤操作之前存在一個(gè)全庫(kù)備份(或已有多個(gè)差異備份或增量備份),首先要做的事就是進(jìn)19樓互動(dòng)空間2[P1dV)U!p'Bs&}X
    進(jìn)行一次日志備份(如果為了不讓日志文件變大而置trunc. log on chkpt.選項(xiàng)為1那你就死翹了)19樓互動(dòng)空間t5R$Y B.i#EaH
    backup log dbName to disk='fileName'
    #p.[cA%tK:YS"|!K02,恢復(fù)一個(gè)全庫(kù)備份,注意需要使用with norecovery,如果還有其他差異或增量備份,則逐個(gè)恢
    ;t\\ujA KM0復(fù)19樓互動(dòng)空間C.n.w4@ Y-S2H"?^
    restore database dbName from disk='fileName' with norecovery19樓互動(dòng)空間1vBH2t {1d@f
    3,恢復(fù)最后一個(gè)日志備份即剛做的日志備份,指定恢復(fù)時(shí)間點(diǎn)到誤操作之前的時(shí)刻19樓互動(dòng)空間y Y'`GS;Vv
    restore log dbName from disk='fileName'19樓互動(dòng)空間%s(YGzdc)f
    with stopat='date_time'

    以上這些操作都可以在SQL SERVER企業(yè)管理器里完成,難度不大。。。

    當(dāng)然,如果誤操作是一些不記日志的操作比如truncate table,select into等操作,那么是無(wú)法利19樓互動(dòng)空間1K-HgUEQ
    用上述方法來(lái)恢復(fù)數(shù)據(jù)的...

    SQL Server2000數(shù)據(jù)庫(kù)文件損壞時(shí)如何恢復(fù)
    G @-^ N*R\0S\/_$i0出現(xiàn)這樣的問(wèn)題是比較嚴(yán)重的了,能否修復(fù)只能看你的運(yùn)氣……

    SQL Server2000中,如果數(shù)據(jù)庫(kù)文件(非系統(tǒng)數(shù)據(jù)庫(kù)文件)遇到錯(cuò)誤的時(shí)候,僅適用于非master,msdb的數(shù)據(jù)庫(kù)。

    說(shuō)明如下:

    1 建一個(gè)測(cè)試數(shù)據(jù)庫(kù)test(數(shù)據(jù)庫(kù)類型為完全)19樓互動(dòng)空間Ay K?y$KJ4q6C
    2 建一個(gè)表,插入點(diǎn)記錄
    } TS? A7Jm4X\C0create table a(c1 varchar(2))19樓互動(dòng)空間5\&`0TQ2qvg
    go19樓互動(dòng)空間*xC4i U S-v[@Dg
    insert into a values('aa')
    r*B ~(mr4T~6O0go
    E,J#C H4h0insert into a values('bb')19樓互動(dòng)空間1z&t1_Ue cz
    go
    -{S!F Z8R2p}(i8j2h03 作完全備份,到文件test_1.bak19樓互動(dòng)空間} xI3qx$L.W!i9G-c$yE
    4 在作一點(diǎn)修改
    9M1C2j`MEWU _6u/I0insert into a values('cc')
    9O bL8l2?8u7u/Z0go19樓互動(dòng)空間%tbCO"D4bN1v"r$B4_
    create table b(c1 int)
    Hz"Zr+_1AT(g.}0go19樓互動(dòng)空間Z0}B0`}"f
    insert into b values(1)
    &L!a X6^t~+`z0go
    M$ex,k P AL%G4b0insert into b values(2)19樓互動(dòng)空間8uH0[ Mq'{m_7T0r1U
    go
    x_8l `"x05 shutdown 數(shù)據(jù)庫(kù)服務(wù)器
    ,y#T\0x,^ yrU.I Ct06 用ultraedit編輯數(shù)據(jù)庫(kù)文件test_data.mdf,隨便修改點(diǎn)字節(jié)內(nèi)容,相當(dāng)于數(shù)據(jù)庫(kù)遭到致命的損壞。19樓互動(dòng)空間6c#fMSEy0u0G
    7 啟動(dòng)數(shù)據(jù)庫(kù),并且運(yùn)行企業(yè)管理器,點(diǎn)開(kāi)數(shù)據(jù)庫(kù),看到test變成灰色,而且顯示置疑。
    h |0U SBW_08 運(yùn)行isql -SLocalhost -Usa -P
    ws B8m]'nAP01> backup log test TO DISK='D:Program FilesMicrosoft SQL ServerMSSQLBACKUP
    +Ax ]L z#X"t%J0est_2.bak' WITH NO_TRUNCATE19樓互動(dòng)空間V!je*M5co8yTMWSa
    2>go19樓互動(dòng)空間D ~"c3z z'm2T
    已處理 2 頁(yè),這些頁(yè)屬于數(shù)據(jù)庫(kù) 'test' 的文件 'TEST_Log'(位于文件 1 上)。19樓互動(dòng)空間 V a8[A6vY
    BACKUP LOG 操作成功地處理了 2 頁(yè),花費(fèi)了 0.111 秒(0.087 MB/秒)。

    9 進(jìn)行恢復(fù)最老的完全備份
    1e CaD$gX&w01> RESTORE DATABASE test FROM DISK='D:Program FilesMicrosoft SQL ServerMSSQL19樓互動(dòng)空間HX Z.ow.o
    BACKUP est_1.bak' WITH NORECOVERY
    (G7M9K.Y1{MsT02> go
    ,L.x\RI"A.r0已處理 96 頁(yè),這些頁(yè)屬于數(shù)據(jù)庫(kù) 'test' 的文件 'TEST_Data'(位于文件 1 上)。19樓互動(dòng)空間v2i g} [
    已處理 1 頁(yè),這些頁(yè)屬于數(shù)據(jù)庫(kù) 'test' 的文件 'TEST_Log'(位于文件 1 上)。
    |u_;r:h2O_0RESTORE DATABASE 操作成功地處理了 97 頁(yè),花費(fèi)了 0.107 秒(7.368 MB/秒)。

    10 恢復(fù)最近的日志
    L8};Z'TZ9{"\4c3\01> RESTORE LOG test FROM DISK='D:Program FilesMicrosoft SQL ServerMSSQLBACKU
    u|4U:_!H)bp S.e*_ n ?0P est_2.bak' WITH RECOVERY
    ,i#l0Jf(z'f0y02> go
    GO9{4nwdh0已處理 2 頁(yè),這些頁(yè)屬于數(shù)據(jù)庫(kù) 'test' 的文件 'TEST_Log'(位于文件 1 上)。
    #V I8F2ht'n9bxo/L9L0RESTORE LOG 操作成功地處理了 2 頁(yè),花費(fèi)了 0.056 秒(0.173 MB/秒)。

    存儲(chǔ)過(guò)程編寫經(jīng)驗(yàn)和優(yōu)化措施
    MDj#ah qJ b0f[0經(jīng)驗(yàn)之談,看看……

    一、適合讀者對(duì)象:數(shù)據(jù)庫(kù)開(kāi)發(fā)程序員,數(shù)據(jù)庫(kù)的數(shù)據(jù)量很多,涉及到對(duì)SP(存儲(chǔ)過(guò)程)的優(yōu)化的項(xiàng)目開(kāi)發(fā)人員,對(duì)數(shù)據(jù)庫(kù)有濃厚興趣的人。  

      二、介紹:在數(shù)據(jù)庫(kù)的開(kāi)發(fā)過(guò)程中,經(jīng)常會(huì)遇到復(fù)雜的業(yè)務(wù)邏輯和對(duì)數(shù)據(jù)庫(kù)的操作,這個(gè)時(shí)候就會(huì)用SP來(lái)封裝數(shù)據(jù)庫(kù)操作。如果項(xiàng)目的SP較多,書寫又沒(méi)有一定的規(guī)范,將會(huì)影響以后的系統(tǒng)維護(hù)困難和大SP邏輯的難以理解,另外如果數(shù)據(jù)庫(kù)的數(shù)據(jù)量大或者項(xiàng)目對(duì)SP的性能要求很,就會(huì)遇到優(yōu)化的問(wèn)題,否則速度有可能很慢,經(jīng)過(guò)親身經(jīng)驗(yàn),一個(gè)經(jīng)過(guò)優(yōu)化過(guò)的SP要比一個(gè)性能差的SP的效率甚至高幾百倍。  

      三、內(nèi)容:  

      1、開(kāi)發(fā)人員如果用到其他庫(kù)的Table或View,務(wù)必在當(dāng)前庫(kù)中建立View來(lái)實(shí)現(xiàn)跨庫(kù)操作,最好不要直接使用“databse.dbo.table_name”,因?yàn)閟p_depends不能顯示出該SP所使用的跨庫(kù)table或view,不方便校驗(yàn)。  

      2、開(kāi)發(fā)人員在提交SP前,必須已經(jīng)使用set showplan on分析過(guò)查詢計(jì)劃,做過(guò)自身的查詢優(yōu)化檢查。  

      3、高程序運(yùn)行效率,優(yōu)化應(yīng)用程序,在SP編寫過(guò)程中應(yīng)該注意以下幾點(diǎn):   

      a)SQL的使用規(guī)范:

       i. 盡量避免大事務(wù)操作,慎用holdlock子句,提高系統(tǒng)并發(fā)能力。

       ii. 盡量避免反復(fù)訪問(wèn)同一張或幾張表,尤其是數(shù)據(jù)量較大的表,可以考慮先根據(jù)條件提取數(shù)據(jù)到臨時(shí)表中,然后再做連接。

       iii. 盡量避免使用游標(biāo),因?yàn)橛螛?biāo)的效率較差,如果游標(biāo)操作的數(shù)據(jù)超過(guò)1萬(wàn)行,那么就應(yīng)該改寫;如果使用了游標(biāo),就要盡量避免在游標(biāo)循環(huán)中再進(jìn)行表連接的操作。

       iv. 注意where字句寫法,必須考慮語(yǔ)句順序,應(yīng)該根據(jù)索引順序、范圍大小來(lái)確定條件子句的前后順序,盡可能的讓字段順序與索引順序相一致,范圍從大到小。

       v. 不要在where子句中的“=”左邊進(jìn)行函數(shù)、算術(shù)運(yùn)算或其他表達(dá)式運(yùn)算,否則系統(tǒng)將可能無(wú)法正確使用索引。

       vi. 盡量使用exists代替select count(1)來(lái)判斷是否存在記錄,count函數(shù)只有在統(tǒng)計(jì)表中所有行數(shù)時(shí)使用,而且count(1)比count(*)更有效率。

       vii. 盡量使用“>=”,不要使用“>”。

       viii. 注意一些or子句和union子句之間的替換

       ix. 注意表之間連接的數(shù)據(jù)類型,避免不同類型數(shù)據(jù)之間的連接。

       x. 注意存儲(chǔ)過(guò)程中參數(shù)和數(shù)據(jù)類型的關(guān)系。

       xi. 注意insert、update操作的數(shù)據(jù)量,防止與其他應(yīng)用沖突。如果數(shù)據(jù)量超過(guò)200個(gè)數(shù)據(jù)頁(yè)面(400k),那么系統(tǒng)將會(huì)進(jìn)行鎖升級(jí),頁(yè)級(jí)鎖會(huì)升級(jí)成表級(jí)鎖。   

      b)索引的使用規(guī)范:

       i. 索引的創(chuàng)建要與應(yīng)用結(jié)合考慮,建議大的OLTP表不要超過(guò)6個(gè)索引。

       ii. 盡可能的使用索引字段作為查詢條件,尤其是聚簇索引,必要時(shí)可以通過(guò)index index_name來(lái)強(qiáng)制指定索引

       iii. 避免對(duì)大表查詢時(shí)進(jìn)行table scan,必要時(shí)考慮新建索引。

       iv. 在使用索引字段作為條件時(shí),如果該索引是聯(lián)合索引,那么必須使用到該索引中的第一個(gè)字段作為條件時(shí)才能保證系統(tǒng)使用該索引,否則該索引將不會(huì)被使用。

       v. 要注意索引的維護(hù),周期性重建索引,重新編譯存儲(chǔ)過(guò)程。  

      c)tempdb的使用規(guī)范:

       i. 盡量避免使用distinct、order by、group by、having、join、cumpute,因?yàn)檫@些語(yǔ)句會(huì)加重tempdb的負(fù)擔(dān)。

       ii. 避免頻繁創(chuàng)建和刪除臨時(shí)表,減少系統(tǒng)表資源的消耗。

       iii. 在新建臨時(shí)表時(shí),如果一次性插入數(shù)據(jù)量很大,那么可以使用select into代替create table,避免log,提高速度;如果數(shù)據(jù)量不大,為了緩和系統(tǒng)表的資源,建議先create table,然后insert。

       iv. 如果臨時(shí)表的數(shù)據(jù)量較大,需要建立索引,那么應(yīng)該將創(chuàng)建臨時(shí)表和建立索引的過(guò)程放在單獨(dú)一個(gè)子存儲(chǔ)過(guò)程中,這樣才能保證系統(tǒng)能夠很好的使用到該臨時(shí)表的索引。

        v. 如果使用到了臨時(shí)表,在存儲(chǔ)過(guò)程的最后務(wù)必將所有的臨時(shí)表顯式刪除,先truncate table,然后drop table,這樣可以避免系統(tǒng)表的較長(zhǎng)時(shí)間鎖定。

        vi. 慎用大的臨時(shí)表與其他大表的連接查詢和修改,減低系統(tǒng)表負(fù)擔(dān),因?yàn)檫@種操作會(huì)在一條語(yǔ)句中多次使用tempdb的系統(tǒng)表。  

      d)合理的算法使用:   

      根據(jù)上面已提到的SQL優(yōu)化技術(shù)和ASE Tuning手冊(cè)中的SQL優(yōu)化內(nèi)容,結(jié)合實(shí)際應(yīng)用,采用多種算法進(jìn)行比較,以獲得消耗資源最少、效率最高的方法。具體可用ASE調(diào)優(yōu)命令:set statistics io on, set statistics time on , set showplan on 等。

    posted @ 2008-09-01 10:11 肖馬輝 閱讀(224) | 評(píng)論 (0)編輯 收藏
     
    select datediff(dd,'2008-06-01',dateadd(mm,1,'2008-06-01')
    posted @ 2008-08-28 16:12 肖馬輝 閱讀(112) | 評(píng)論 (0)編輯 收藏
     

    1、小富即安、目光短淺的校內(nèi)網(wǎng)

    在校內(nèi)開(kāi)放API之前,我看錯(cuò)了兩件事情:一個(gè)是低估了國(guó)內(nèi)web2.0小網(wǎng)站開(kāi)發(fā)app的熱情;一個(gè)是高估了國(guó)內(nèi)SNS網(wǎng)站商業(yè)眼光。

    校內(nèi)網(wǎng)在國(guó)內(nèi)能夠成功,我覺(jué)得機(jī)遇是主要的原因:王興搞校內(nèi)網(wǎng)的時(shí)候,國(guó)家教委開(kāi)始管制各大高校的BBS,在校學(xué)生們無(wú)處可去,校內(nèi)網(wǎng)剛好補(bǔ)上,而那些離校的學(xué)生面對(duì)ChinaRen和5460兩個(gè)爛得不能再爛的同學(xué)錄,也只能選擇校內(nèi)網(wǎng)。因此校內(nèi)網(wǎng)的成功與其說(shuō)是真人網(wǎng)絡(luò)和定位大學(xué)生市場(chǎng)的成功,還不如說(shuō)是國(guó)家教委和清華師兄張朝陽(yáng)賜了王興這個(gè)機(jī)會(huì)。而王興離開(kāi)校內(nèi)創(chuàng)辦海內(nèi)至今沒(méi)有起色,也很說(shuō)明了這個(gè)問(wèn)題,校內(nèi)的成功不是網(wǎng)站模式的拷貝成功,而是機(jī)遇的成功。

    BTW:我個(gè)人覺(jué)得互聯(lián)網(wǎng)創(chuàng)業(yè)當(dāng)中的機(jī)遇是很重要的,王志東離開(kāi)新浪以后至今沒(méi)有翻身已經(jīng)很說(shuō)明問(wèn)題了。互聯(lián)網(wǎng)成功的創(chuàng)業(yè)人士離開(kāi)原來(lái)公司獨(dú)自創(chuàng)業(yè)失敗的例子我手里還有兩個(gè),因?yàn)檎J(rèn)識(shí)就不方便點(diǎn)名了。總之,成功的人不要覺(jué)得自己很了不起,你的成功多半是走了狗屎運(yùn)。我到很佩服馬化騰和丁磊,從不諱言自己是走了狗屎運(yùn)的。

    校內(nèi)網(wǎng)本質(zhì)不是Facebook模式,而是社區(qū)網(wǎng)站,雖然他也做了必要的隔離,但是總體而已,UGC在校內(nèi)還是占了很重要的部分,特別是校內(nèi)和mop整合的很緊密。我看過(guò)王興創(chuàng)辦海內(nèi)的一個(gè)采訪:記者問(wèn)他為什么創(chuàng)辦海內(nèi),他說(shuō)校內(nèi)網(wǎng)雖然抄襲Facebook,但是本質(zhì)上還是抄襲MySpace的,而他更看好Facebook,所以創(chuàng)辦海內(nèi),真正抄襲Facebook。這段話我當(dāng)時(shí)不理解,但是后來(lái)我明白了,你仔細(xì)研究校內(nèi)網(wǎng),他的確是一個(gè)披了Facebook皮的MySpace網(wǎng)站,他的社區(qū)性質(zhì)很明顯。

    校內(nèi)的社區(qū)性質(zhì)決定了他絕不會(huì)走Facebook的商業(yè)模式,為什么呢?如果你像我一樣自己辛辛苦苦創(chuàng)辦了一個(gè)社區(qū)網(wǎng)站,積累了這么多會(huì)員出來(lái),那么你絕對(duì)沒(méi)有開(kāi)放網(wǎng)站、開(kāi)放用戶的決心。因?yàn)檫@樣一個(gè)社區(qū)已經(jīng)可以讓你真金白銀的賺很多錢了,如果你現(xiàn)在徹徹底底的轉(zhuǎn)型搞應(yīng)用平臺(tái),等于是放棄了現(xiàn)在可以觸手可及的利益,而去博一個(gè)更偉大的賭注。或者用武俠小說(shuō)的典故來(lái)形容就是,你想修煉吸星大法絕世神功的話,就必須先把自己辛苦練了二十年的內(nèi)功廢掉,你說(shuō)除非逼到絕路,誰(shuí)會(huì)愿意冒這個(gè)險(xiǎn)?

    校內(nèi)的兩難困境就在這里,不過(guò)對(duì)于陳一舟來(lái)說(shuō),他一點(diǎn)不為難,因?yàn)樗且粋€(gè)連眼前利益都不肯放棄的人。所以校內(nèi)的霸王條款一點(diǎn)都不奇怪,奇怪的只是把別人當(dāng)傻瓜這究竟是自己的智商問(wèn)題,還是別人的智商問(wèn)題呢?

    不過(guò)坦白說(shuō),校內(nèi)現(xiàn)在的條件很好,積累了足夠多的用戶,又融了4.5億美元的資金,完全有資格去做平臺(tái),而不必?fù)?dān)心什么風(fēng)險(xiǎn),更何況國(guó)內(nèi)web2.0小網(wǎng)站空前高漲的app開(kāi)發(fā)熱情和淘寶網(wǎng)的經(jīng)驗(yàn)也證明了Facebook的商業(yè)戰(zhàn)略在中國(guó)完全有實(shí)現(xiàn)的可能性。但是以陳一舟的性格和現(xiàn)在校內(nèi)網(wǎng)的做法,我可以斷定校內(nèi)會(huì)親自切入若干垂直領(lǐng)域,例如電子商務(wù),旅游,網(wǎng)絡(luò)招聘,web網(wǎng)游,在賺那么丁點(diǎn)小錢的同時(shí),放棄了成為真正的中國(guó)Facebook的可能性。我想,如果把陳一舟換成了馬云,馬云一定會(huì)選擇走平臺(tái)的道路,所以說(shuō)性格決定命運(yùn)呀。


    2、命運(yùn)難測(cè)的開(kāi)心網(wǎng)

    前面說(shuō)了開(kāi)心網(wǎng)是真正氣質(zhì)上符合Facebook克隆的網(wǎng)站,實(shí)際上開(kāi)心網(wǎng)成功的唯一秘訣就是抄襲Facebook抄的最謙虛,最真誠(chéng),抄到了位。開(kāi)心網(wǎng)最火的買賣朋友和爭(zhēng)車位這兩個(gè)應(yīng)用都是抄襲自Facebook的“Friends for sale”和“Parking War”,號(hào)稱開(kāi)心網(wǎng)貼心的注冊(cè)后提示郵箱登錄鏈接,其實(shí)也是原封不動(dòng)的抄了Facebook。而開(kāi)心網(wǎng)不過(guò)是忠實(shí)的抄襲了Facebook就已經(jīng)驚人的成功了,由此可見(jiàn)國(guó)內(nèi)互聯(lián)網(wǎng)的作弊家們,給點(diǎn)專業(yè)精神好不好,你抄也得抄像點(diǎn)嘛。

    開(kāi)心網(wǎng)唯一的問(wèn)題就是商業(yè)模式,CPC廣告在國(guó)內(nèi)更加行不通,如果說(shuō)Facebook還能用CPC賺到1.45億的話,那么開(kāi)心壓根就不用指望廣告費(fèi)。如果走Facebook的平臺(tái)戰(zhàn)略,構(gòu)建一個(gè)巨大的應(yīng)用平臺(tái),通過(guò)app商家來(lái)收費(fèi)的話,這條路太長(zhǎng)了,需要的投資太大。馬云的成功畢竟也有孫正義和Yahoo累計(jì)十多億美元的砸錢。孫正義已經(jīng)給陳一舟砸了4.5億了,不可能再給開(kāi)心網(wǎng)了。

    所以我猜測(cè)開(kāi)心網(wǎng)的商業(yè)模式會(huì)走第三條路,就是自己做web小游戲,最終轉(zhuǎn)型成為一個(gè)SNS型的休閑web網(wǎng)絡(luò)游戲網(wǎng)站。但是這條路會(huì)走的很累:一是web網(wǎng)游市場(chǎng)競(jìng)爭(zhēng)的激烈程度完全不低于SNS網(wǎng)站;二是純做小游戲的開(kāi)發(fā)成本很高。

    目前開(kāi)心網(wǎng)的小游戲都是自己開(kāi)發(fā)的,但是這種小游戲是有一個(gè)新鮮期的,用戶一開(kāi)始玩活躍度很高,但是過(guò)了新鮮期,就逐漸覺(jué)得沒(méi)有意思了,用戶經(jīng)過(guò)了一段時(shí)間的活躍期,就會(huì)逐漸消沉下去,開(kāi)心網(wǎng)現(xiàn)在已經(jīng)開(kāi)始出現(xiàn)這種問(wèn)題了。所以傳統(tǒng)網(wǎng)游的生命周期即便不斷更新也不過(guò)3-5年而已,這種web小游戲的生命周期就更短了,不過(guò)1-3個(gè)月而已。你要保持網(wǎng)站用戶的活躍度,就要不停的開(kāi)發(fā)下去,因此開(kāi)發(fā)成本會(huì)越來(lái)越高。

    Facebook最聰明的地方就是他自己不開(kāi)發(fā)app,只鼓勵(lì)app開(kāi)發(fā)商去開(kāi)發(fā),因此Facebook沒(méi)有這個(gè)開(kāi)發(fā)成本的巨大負(fù)擔(dān)。開(kāi)心網(wǎng)要想擺脫這個(gè)困境,還是必須走Facebook平臺(tái)戰(zhàn)略,可以說(shuō)開(kāi)心不走平臺(tái)戰(zhàn)略就沒(méi)有大的前途,但是開(kāi)心要走平臺(tái)戰(zhàn)略,這個(gè)目標(biāo)就太大,實(shí)現(xiàn)難度過(guò)高。所以Facebook的模式不是那么容易抄的,你真想做Facebook的話,你不開(kāi)放平臺(tái)是根本玩不下去的,但你開(kāi)放平臺(tái)你沒(méi)有足夠的資金支撐,你也玩不下去。


    3、失敗的海內(nèi)網(wǎng)

    王興現(xiàn)在的處境很尷尬。王興創(chuàng)辦海內(nèi)網(wǎng)的時(shí)候,已經(jīng)意識(shí)到要避免成為一個(gè)社區(qū)網(wǎng)站了,但是由于他一開(kāi)始沒(méi)有從app切入,導(dǎo)致了海內(nèi)以他不期望的方式成為了一個(gè)IT同人社區(qū)了。但是他又非常不愿意接受這一點(diǎn),極力擺脫。不過(guò)他不做IT同人社區(qū),有的是人做,于是5GSNS出來(lái)了,海內(nèi)上面的大批IT大牛都跑了。不知道現(xiàn)在王興究竟是高興多一點(diǎn),還是失落多一點(diǎn)呢。

    海內(nèi)網(wǎng)和下面要提到的所有SNS克隆網(wǎng)站相比,有一個(gè)本質(zhì)不同:海內(nèi)不提供網(wǎng)站公共信息的廣播,你看不到朋友之外的信息,他還是以Facebook那種模式,引導(dǎo)你去和自己熟人去社交。但不幸的是海內(nèi)的用戶們畢竟是在中國(guó)BBS泡大的一代,你不用app去勾引他們,他們?cè)诤?nèi)只想著臥底發(fā)文搞UGC,而不是拉自己的哥們上來(lái)虛情假意的社交。失敗,這真的是很失敗呀。

    4、畫虎類犬的UCHome、一起、螞蟻、5GSNS等等

    一言以蔽之,這些網(wǎng)站的創(chuàng)始人心里都有一個(gè)執(zhí)念:“BBS是可恥的,BBS是沒(méi)有商業(yè)價(jià)值的,BBS是沒(méi)品的,我作為一個(gè)有品的互聯(lián)網(wǎng)資深人士,我得創(chuàng)造有品的互聯(lián)網(wǎng)生活方式”

    小戴同學(xué)在discuz!論壇上面寫了很長(zhǎng)的一篇帖子(不過(guò)比我這篇文章短),講他為什么要開(kāi)發(fā)UCHome,中心思想就是BBS過(guò)時(shí)了,BBS缺點(diǎn)太大,我發(fā)現(xiàn)Facebook做社區(qū)比BBS更優(yōu)越,所以我現(xiàn)在開(kāi)發(fā)了UCHome。

    謝文就不用說(shuō)了,一直鼓吹他的三個(gè)代表精神:代表互聯(lián)網(wǎng)的物質(zhì)生活,代表互聯(lián)網(wǎng)的精神生活,代表互聯(lián)網(wǎng)的社會(huì)生活的一個(gè)超級(jí)web2.0社區(qū),不知道他還有沒(méi)有八榮八恥?總之謝文導(dǎo)師明槍明棒的要搞社區(qū),結(jié)果卻套了一個(gè)Facebook的皮上來(lái)。其實(shí)您大可不必,你要是不抄Facebook的皮,我就把你和豆瓣、51.com放在一起看了。這搞的不倫不類的,還不如光明正大的說(shuō)我要抄Facebook呢,何必呢?自己都沒(méi)有搞清楚自己要干啥的人。

    麥田師兄比謝導(dǎo)師還沒(méi)方向感,整天琢磨poke小藥丸去了。我記得麥田說(shuō)過(guò)一句話,說(shuō)他之所以搞螞蟻,就是因?yàn)樗珶〣BS了,麥田的優(yōu)點(diǎn)就是太天真,天真的隨便講真話。

    5GSNS這個(gè)就不說(shuō),還不如用discuz!得了。

    那么他們?yōu)槭裁匆肍acebook的皮來(lái)做社區(qū)呢?

    1、BBS的確有很大的缺陷
    凡是運(yùn)營(yíng)過(guò)BBS的人都知道BBS的“劣幣驅(qū)逐良幣”的問(wèn)題,低手充斥會(huì)導(dǎo)致高手的離開(kāi)、社區(qū)的衰落。用Facebook的皮可以很大程度上隔離用戶,解決BBS最大的痼疾。

    2、可以改進(jìn)很多BBS沒(méi)有做好的功能
    比方說(shuō)集中的信息更新通知功能,個(gè)性化推薦,更好的社區(qū)好友互動(dòng)功能等等。

    這些好處都是看得見(jiàn)的,再加上很多人本身對(duì)BBS的強(qiáng)烈排斥,更加傾向于用Facebook之皮來(lái)做社區(qū)網(wǎng)站了。我得必須承認(rèn),雖然UCHome這個(gè)克隆完全曲解了Facebook之本意,但是UCHome也不失為一個(gè)不錯(cuò)的改良版本的社區(qū)軟件。

    但是我得說(shuō),作為一個(gè)非盈利性質(zhì)的社區(qū)來(lái)說(shuō),用UCHome可能比BBS更好,但是對(duì)于一個(gè)有商業(yè)期望的網(wǎng)站來(lái)說(shuō),用UCHome做社區(qū),無(wú)疑于自殺。為什么呢?

    因?yàn)镕acebook之皮本身是用來(lái)實(shí)現(xiàn)熟人之間的社交的,因此他是一個(gè)封閉的工具,非常不利于信息的傳播!

    傳統(tǒng)的BBS要盈利,已經(jīng)有兩條被證明過(guò)康莊大道:

    1、BBS轉(zhuǎn)型做網(wǎng)絡(luò)媒體,以BBS為基礎(chǔ)成為網(wǎng)絡(luò)媒體的成功案例簡(jiǎn)直多得數(shù)不過(guò)來(lái):

    新浪網(wǎng)的前身就是一個(gè)四通利方體育沙龍BBS;
    網(wǎng)易的前身也是一個(gè)大BBS,我在98年還注冊(cè)過(guò)賬號(hào)灌水;
    IT媒體類的網(wǎng)站,最近被收購(gòu)的IT168,PCPOP哪個(gè)不是靠BBS起家的?太平洋電腦網(wǎng)也是BBS起家;
    CSDN也是BBS起家,一開(kāi)始是程序員大本營(yíng)光盤的技術(shù)支持論壇;
    被IT168買過(guò)去的ITPUB,ChinaUnix也是BBS;
    JavaEye也是BBS起家;

    2、BBS轉(zhuǎn)型做電子商務(wù)

    阿里巴巴網(wǎng)站一開(kāi)始就是一個(gè)BBS,是馬云親自敲定要做BBS的;
    籬笆網(wǎng)也是BBS,不用說(shuō)了;
    搜房網(wǎng)也是BBS起家

    BBS起家的互聯(lián)網(wǎng)網(wǎng)站太多了,這本來(lái)就是一條光明的大道。為什么這些互聯(lián)網(wǎng)資深人士畏之如虎呢?

    1、BBS的運(yùn)營(yíng)難度和成本都比較高
    要運(yùn)營(yíng)好一個(gè)BBS,站長(zhǎng)需要非常高超的平衡能力,以及一個(gè)得力的運(yùn)營(yíng)團(tuán)隊(duì),能把一個(gè)BBS運(yùn)營(yíng)好是極難的事情,這里面的門檻非常高,太多人想回避這個(gè)難度走捷徑,造假,灌水,吵做,流量是上來(lái)了,社區(qū)的商業(yè)價(jià)值沒(méi)有了。而且BBS需要持續(xù)不斷的投入,一旦運(yùn)營(yíng)投入不足,BBS的人氣就難以為繼。

    2、越是互聯(lián)網(wǎng)資深人士越希望用網(wǎng)站獨(dú)特的功能取勝,不戰(zhàn)而屈人之兵,越想避免商業(yè)上的短兵相接和踏實(shí)的運(yùn)營(yíng)。
    對(duì)互聯(lián)網(wǎng)特別有感覺(jué)的人,往往希望用自己的長(zhǎng)處作為核心競(jìng)爭(zhēng)力,希望用卓越的網(wǎng)站功能和體驗(yàn)去吸引用戶,戰(zhàn)勝對(duì)手,而不屑于沒(méi)有技術(shù)含量的日常運(yùn)營(yíng)工作和類似傳統(tǒng)銷售的營(yíng)銷方式。我感覺(jué)自己身上就存在這樣的毛病,而且我也從上述很多人的言論當(dāng)中感受到了這一點(diǎn)。網(wǎng)站畢竟是公司,要遵守商業(yè)規(guī)則,踏踏實(shí)實(shí)的運(yùn)營(yíng)和賺錢比整天想著用殺手锏網(wǎng)站功能去擊敗對(duì)手更重要。

    而且我也強(qiáng)烈的感覺(jué)到一點(diǎn):走捷徑成功的網(wǎng)站往往商業(yè)模式會(huì)難產(chǎn),一點(diǎn)一點(diǎn)打拼上來(lái)的網(wǎng)站商業(yè)模式都是順理成章的。上面提到這么多從BBS起家的網(wǎng)站哪個(gè)不是踏踏實(shí)實(shí)運(yùn)營(yíng)了五六年以后成功的?而2005年風(fēng)光無(wú)限的博客網(wǎng)站現(xiàn)在紛紛倒閉,博客網(wǎng)站的運(yùn)營(yíng)難度根本無(wú)法和BBS相比,因此催生商業(yè)模式也更難。


    用Facebook之皮運(yùn)營(yíng)的社區(qū)網(wǎng)站,其用戶創(chuàng)造內(nèi)容的傳播途徑是受阻的,因此無(wú)法成功的轉(zhuǎn)型成為一個(gè)網(wǎng)絡(luò)媒體,這BBS第一條商業(yè)模式就堵死了;其做電子商務(wù)網(wǎng)站其用戶傳播的途徑又受限于朋友之內(nèi),傳播范圍太小,無(wú)法形成有效營(yíng)銷,這BBS第二條商業(yè)模式也堵死了。5GSNS要搞網(wǎng)絡(luò)招聘,但是網(wǎng)絡(luò)招聘市場(chǎng)的水非常深,我可以告訴大家的就是:截止目前為止,所有的垂直招聘社區(qū)無(wú)一成功的,5GSNS在走一條沒(méi)有商業(yè)前途的路,真要搞招聘,不能按照5GSNS現(xiàn)在這種搞法。


    六、社區(qū)網(wǎng)站做SNS

    Facebook的前景是光明的,但是中國(guó)能不能出一個(gè)Facebook,現(xiàn)在看來(lái)并不是那么樂(lè)觀。

    大多數(shù)披著Facebook皮的社區(qū)網(wǎng)站都是瞎湊熱鬧,如果作為興趣愛(ài)好搞搞Facebook之皮類型的社區(qū)網(wǎng)站,玩玩也好,但是要想搞一個(gè)有商業(yè)前景的社區(qū)網(wǎng)站,我奉勸一句,還是別用UCHome,這是一條死路。

    另外還有一個(gè)有意思的趨勢(shì):一些以BBS起家的社區(qū)網(wǎng)站也開(kāi)始SNS化,開(kāi)始引入Facebook模式:

    一個(gè)是TechWeb用UCHome架設(shè)了一個(gè)社區(qū),這個(gè)我就覺(jué)得很搞笑了,明明有自己的BBS,還搞UCHome自己搶自己的用戶?

    另外一個(gè)稍微高明一點(diǎn),CSDN把個(gè)人空間和個(gè)人博客改用Facebook之皮來(lái)實(shí)現(xiàn)了。其實(shí)這層皮并不重要,重要的是你怎么給社區(qū)的用戶提供好的個(gè)性化推薦、好的個(gè)人信息聚合、好的朋友交流工具,這些我在CSDN個(gè)人空間尚未看到。


    七、SNS之我見(jiàn)

    國(guó)內(nèi)真正在做SNS的網(wǎng)站并不多,SNS這條也不好走,但如果能成功,就是一個(gè)the big thing,但是還看不出來(lái)候選者。

    那些批著Facebook之皮的社區(qū)網(wǎng)站,我預(yù)測(cè)將有一半以上在兩年之內(nèi)死掉,另外一半會(huì)改回BBS。

    社區(qū)網(wǎng)站做SNS悠著點(diǎn)好,先想清楚了再做,要做就做得有點(diǎn)創(chuàng)新,別蠻干,上來(lái)就扒別人的按鈕和CSS。 SNS是2008年中國(guó)互聯(lián)網(wǎng)最火爆的現(xiàn)象了,無(wú)數(shù)的SNS網(wǎng)站一夜之間紛紛涌現(xiàn),前仆后繼,慰為壯觀:校內(nèi)、海內(nèi)、開(kāi)心、一起、螞蟻以及無(wú)數(shù)的Facebook克隆SNS網(wǎng)站陷入了一場(chǎng)空前慘烈的廝殺當(dāng)中,每個(gè)人都生怕錯(cuò)過(guò)互聯(lián)網(wǎng)下一個(gè)the big thing的機(jī)會(huì),一波接一波的抄襲、炒做和競(jìng)爭(zhēng)令人應(yīng)接不暇、眼花繚亂。我也未能免俗,從2006年就一直關(guān)注SNS網(wǎng)站的發(fā)展,在2007年下半年就開(kāi)始用Facebook,也一直在不斷思索:究竟SNS網(wǎng)站的未來(lái)是什么呢?這場(chǎng)空前混亂的SNS大戰(zhàn)會(huì)有什么樣的結(jié)果呢?在中國(guó),一個(gè)成功的SNS模式應(yīng)該是什么樣的呢?先闡述一下自己的觀點(diǎn),期待拋磚引玉:


    一、引子

    早在博客概念還如日中天的2005年,國(guó)內(nèi)就已經(jīng)有一大批克隆MySpace的SNS網(wǎng)站了,比方說(shuō)uuzone,圈網(wǎng)等等,當(dāng)2006年MySpace以5.8億美元的高價(jià)被新聞集團(tuán)收購(gòu)之后,國(guó)內(nèi)的Myspace克隆網(wǎng)站達(dá)到了一個(gè)高潮。但是這種類型的SNS網(wǎng)站模式在國(guó)內(nèi)一直不太成功,難以病毒式傳播,需要依靠大規(guī)模用戶推廣和不斷的線下活動(dòng)組織,所以逐漸式微了。除了已經(jīng)關(guān)門的之外,其他的已經(jīng)無(wú)一例外的改頭換面克隆Facebook了。此時(shí)當(dāng)其他網(wǎng)站還在盯著博客概念和MySpace的時(shí)候,王興已經(jīng)全盤克隆Facebook推出了校內(nèi)網(wǎng),眼光很獨(dú)到。

    但是直到2007年微軟以2.4億美元購(gòu)買了Facebook的1.5%股份,這才真正引爆了國(guó)內(nèi)的Facebook熱潮,此前言必稱MySpace的謝文也從此改口,言必稱Facebook了。從2007到現(xiàn)在一年時(shí)間不到,國(guó)內(nèi)的Facebook克隆SNS網(wǎng)站已經(jīng)是忽如一夜VC來(lái),千萬(wàn)SNS繽紛開(kāi)了。這些眾多的SNS網(wǎng)站當(dāng)中,除了51.com和豆瓣之外,幾乎無(wú)一例外的先后抄襲MySpace和Facebook,特別是從王興開(kāi)始,把抄襲發(fā)展到了毫無(wú)道德底線的程度:連按鈕和CSS樣式表都直接拿來(lái)就用,開(kāi)創(chuàng)了互聯(lián)網(wǎng)抄襲無(wú)底褲的新時(shí)代,從中國(guó)互聯(lián)網(wǎng)的歷史貢獻(xiàn)來(lái)說(shuō),王興可以和周鴻祎相提并論,都是劃時(shí)代的開(kāi)創(chuàng)者。

    現(xiàn)在的SNS都長(zhǎng)著一副Facebook的嘴臉,這真的十分無(wú)趣,國(guó)外的Web2.0網(wǎng)站類型非常豐富,光是SNS類型的還有twitter,friendfeed,friendster,ning等等,干嗎光盯著Facebook抄阿?所以我的第一個(gè)話題是:


    二、Facebook的成功秘訣是什么?

    這幾年時(shí)不時(shí)有人問(wèn)我:JavaEye的成功秘訣是什么?也有很多人告訴我他們發(fā)現(xiàn)了JavaEye成功的秘密是XXX,在他們看來(lái),只要按照這個(gè)XXX去做,也可以創(chuàng)辦一個(gè)成功的技術(shù)網(wǎng)站,但我沒(méi)有發(fā)現(xiàn)有人成功過(guò):這不是因?yàn)樗麄冋义e(cuò)了秘訣,而是因?yàn)榫W(wǎng)站的成功并不是光靠一個(gè)秘訣。

    JavaEye的發(fā)展歷史分為幾個(gè)階段:從2003年9月創(chuàng)立到2006年8月是第一個(gè)階段,這個(gè)階段的JavaEye靠的是個(gè)人鐵腕管理;從2006年9月到2007年9月是第二個(gè)階段,這個(gè)階段的JavaEye靠的是web2.0概念的社區(qū)改造;從2007年10月開(kāi)始是第三個(gè)階段,這個(gè)階段的JavaEye靠的是不斷精益求精的功能和品質(zhì)服務(wù)。以后JavaEye還會(huì)有很多發(fā)展階段,跨越每個(gè)不同的發(fā)展階段都需要獨(dú)特的核心競(jìng)爭(zhēng)力(或者說(shuō)秘訣)。

    現(xiàn)在國(guó)內(nèi)克隆Facebook的一些SNS網(wǎng)站就犯了上面同樣的問(wèn)題:王興認(rèn)為Facebook的成功秘訣是發(fā)展大學(xué)生用戶市場(chǎng),所以他搞了校內(nèi)網(wǎng);當(dāng)王興賣掉校內(nèi)創(chuàng)辦海內(nèi)的時(shí)候,他又認(rèn)為Facebook的成功秘訣是真人社區(qū),這一點(diǎn)也被謝文反復(fù)的吹捧;而戴志康顯然認(rèn)為Facebook的成功秘訣是去中心化的社區(qū)形態(tài),所以他搞了一個(gè)UCenter Home出來(lái);而從開(kāi)心網(wǎng)開(kāi)始,大家又突然發(fā)現(xiàn)Facebook的成功秘訣原來(lái)是上面的Web小游戲,于是一窩蜂的抄襲Facebook的熱門小游戲;當(dāng)然還有很多人認(rèn)為Facebook的成功秘訣在于開(kāi)放平臺(tái);不過(guò)最搞笑的還是麥田師兄(他是我大學(xué)同系高4屆的學(xué)長(zhǎng)),把一個(gè)poke功能當(dāng)成了Facebook成功的全部秘密,很有點(diǎn)像古代學(xué)會(huì)寫一二三,就以為“萬(wàn)”字要寫一萬(wàn)筆的笨學(xué)生。所以不同的人看Facebook,會(huì)得出不同的結(jié)論,所謂:“橫看成嶺側(cè)成峰,遠(yuǎn)近高低各不同”。

    其實(shí)這些看法都對(duì),但是又都不準(zhǔn)確:Facebook在每個(gè)發(fā)展階段都有導(dǎo)致他成功的原因:在Facebook發(fā)展的第一個(gè)階段,面向校園市場(chǎng)和實(shí)名注冊(cè)是他成功的原因;在Facebook發(fā)展的第二個(gè)階段,采用去中心化的封閉式設(shè)計(jì)又能夠很好的隔離不同類型的用戶;在Facebook發(fā)展的第三個(gè)階段,是開(kāi)放平臺(tái)推動(dòng)了他的騰飛,是web小游戲讓他的用戶群迅速的擴(kuò)大。因此就算要抄襲Facebook,也應(yīng)該認(rèn)識(shí)到Facebook成功的每個(gè)階段,要抄就抄得全面點(diǎn),別把著一個(gè)poke就以為自己得到了成仙藥丸。


    三、Facebook究竟是什么?

    那么Facebook本質(zhì)上是什么東西呢?現(xiàn)在的Facebook對(duì)用戶來(lái)說(shuō)是一個(gè)社交工具,而不是一個(gè)社區(qū);如果我們拋開(kāi)用戶的身份,從互聯(lián)網(wǎng)網(wǎng)站類型去看,F(xiàn)acebook是一個(gè)應(yīng)用平臺(tái),而不是一個(gè)社區(qū)網(wǎng)站。因此目前國(guó)內(nèi)的SNS網(wǎng)站當(dāng)中,只有開(kāi)心網(wǎng)最接近Facebook,只有開(kāi)心和海內(nèi)沒(méi)有企圖去成為一個(gè)社區(qū)網(wǎng)站,其他所有的SNS網(wǎng)站都背離了這一點(diǎn)。

    我在2007年下半年,總是不斷的收到一些朋友的Facebook郵件邀請(qǐng),一開(kāi)始不為所動(dòng),到后來(lái)開(kāi)始不勝其擾,最后注冊(cè)了一個(gè)賬號(hào)。但是注冊(cè)賬號(hào)以后發(fā)現(xiàn)Facebook就是一個(gè)空白的網(wǎng)站,根本不知道可以干嗎,于是又是長(zhǎng)期的不登陸,直到一個(gè)朋友給我發(fā)來(lái)了Facebook上面的Vampire的app邀請(qǐng),Vampire是一個(gè)吸血鬼的小游戲,你可以咬別人組建你的吸血鬼軍隊(duì),還可以和別的軍隊(duì)作戰(zhàn)。就這么一個(gè)小游戲,立馬讓我明白了Facebook是怎么個(gè)玩法,馬上促使你把自己的MSN/Gtalk的朋友都拉過(guò)來(lái)玩,于是一個(gè)你熟識(shí)朋友的在線圈子很快就組成了。

    現(xiàn)在很多的開(kāi)心網(wǎng)用戶看到上面這一段,肯定覺(jué)得似曾相識(shí),他們就是這樣開(kāi)始用開(kāi)心的,這里的互動(dòng)關(guān)鍵點(diǎn)是什么呢?是作為一個(gè)網(wǎng)站,用戶為什么會(huì)來(lái)你的網(wǎng)站?

    因?yàn)槟愕木W(wǎng)站有大牛?還是因?yàn)槟愕木W(wǎng)站有高質(zhì)量的文章和討論?還是因?yàn)槟愕木W(wǎng)站提供了很多吸引他的機(jī)會(huì)和資源?

    如果用戶是因?yàn)檫@樣的理由來(lái)你的網(wǎng)站,那你抄襲Facebook就太失敗了。因?yàn)槟愕木W(wǎng)站核心競(jìng)爭(zhēng)力還是在于“內(nèi)容”,還是要依靠UGC。那么一個(gè)封閉的社區(qū)、一個(gè)去中心化隔離用戶的社區(qū)要?jiǎng)?chuàng)造高質(zhì)量的UGC就太難了。
    Facebook靠的是你的朋友在上面活動(dòng),你可以參與他們的活動(dòng),這就是全部的理由。至于搞什么活動(dòng)不重要,寫不寫什么文字也不重要,唯一重要的是你需要Facebook這樣一個(gè)tool來(lái)保持和你朋友之間的關(guān)系。

    雖然Facebook不僅僅限于認(rèn)識(shí)的朋友,但是其主要目的就是提供給熟識(shí)的朋友進(jìn)行交流之用,因此Facebook本身并不提供任何全站的公共信息廣播,也不開(kāi)放匿名訪問(wèn),你和自己認(rèn)識(shí)的朋友之間的交流本來(lái)就是私密性的,這些信息本來(lái)就是被保護(hù)起來(lái)的。

    而且尤其重要的一點(diǎn)就是Facebook并不鼓勵(lì)UGC(用戶創(chuàng)造內(nèi)容),這是和其他web2.0網(wǎng)站的本質(zhì)區(qū)別。Facebook真正鼓勵(lì)是你和你的朋友在Facebook上面“發(fā)生了互動(dòng)的行為”,而不是“互動(dòng)的所創(chuàng)造的內(nèi)容”。

    用這個(gè)標(biāo)準(zhǔn)你去衡量一下,就會(huì)發(fā)現(xiàn)開(kāi)心網(wǎng)是唯一神似Facebook的網(wǎng)站,而其他網(wǎng)站,特別是UCenter Home簡(jiǎn)直就是拙劣的Facebook模仿者,他完全沒(méi)有領(lǐng)會(huì)Facebook的本質(zhì),完全用自己做社區(qū)軟件的思路去套Facebook,搞出來(lái)的UCHome壓根就是一個(gè)社區(qū)網(wǎng)站,這一點(diǎn)大家看看5GSNS:

    1、你為什么去5GSNS,因?yàn)槟阆肟磌eso或者其他大牛寫的文章
    2、你為什么去5GSNS,因?yàn)槟阒纊eso或者其他大牛現(xiàn)在在干嗎
    3、你為什么去5GSNS,因?yàn)樯厦嬗谢ヂ?lián)網(wǎng)行業(yè)的招聘信息

    說(shuō)白了就是一句話:高質(zhì)量的內(nèi)容和資源在吸引你,所以要保持高質(zhì)量的內(nèi)容和資源,你必須依靠高質(zhì)量的會(huì)員持續(xù)的UGC,那么我請(qǐng)問(wèn)你,這和一個(gè)BBS有本質(zhì)區(qū)別嗎?或者我這樣問(wèn)你,keso不用UCHome,而是discuz!,會(huì)妨礙你訪問(wèn)5GSNS嗎?會(huì)妨礙你泡在這個(gè)網(wǎng)站上面并且發(fā)貼嗎?所以小戴同學(xué)換湯不換藥呀。


    四、Facebook怎么賺錢?

    據(jù)說(shuō)Facebook現(xiàn)在全球注冊(cè)會(huì)員有6000多萬(wàn)了吧,網(wǎng)站流量也排名全球前10了,這樣的網(wǎng)站賺錢是不難的,難的是用簡(jiǎn)單的商業(yè)模式持續(xù)的賺大錢。無(wú)論是Facebook在網(wǎng)站上面搞搞電子商務(wù)賣賣商品也好,搞搞網(wǎng)絡(luò)招聘賣賣人頭也好,搞搞游戲賣賣道具也好,都能賺錢,但是這些商業(yè)模式有問(wèn)題:

    1、無(wú)論是電子商務(wù)、網(wǎng)絡(luò)招聘、網(wǎng)絡(luò)游戲或者其他的什么商業(yè)模式,都是劃分具體的用戶群體去賺特定人群的錢,無(wú)形之中,潛在客戶就少了一大半,F(xiàn)acebook坐擁6000萬(wàn)會(huì)員,商業(yè)模式的覆蓋面必須廣,去賺小眾的錢就是個(gè)失敗的商業(yè)模式。

    2、進(jìn)入特定的分眾領(lǐng)域,以Facebook這樣的通用SNS網(wǎng)站來(lái)說(shuō),競(jìng)爭(zhēng)力根本不及專業(yè)的垂直網(wǎng)站,你做電子商務(wù)做不過(guò)ebay,做網(wǎng)絡(luò)招聘做不過(guò)monster,做網(wǎng)絡(luò)游戲做不過(guò)爆雪,都只能吃點(diǎn)殘羹冷炙。而且這種專業(yè)領(lǐng)域,你Facebook根本沒(méi)有積累,你需要花多么大的代價(jià)才能摸清楚這里面的水有多深呀。

    3、你做這些垂直領(lǐng)域的生意,其實(shí)就是和Facebook平臺(tái)上面的開(kāi)發(fā)商在搶生意,這是一個(gè)大忌,會(huì)破壞整個(gè)Facebook平臺(tái)的商業(yè)生態(tài)鏈條。而這個(gè)大忌,校內(nèi)網(wǎng)正在不遺余力的去犯。

    那Facebook怎么辦?靠廣告嗎?廣告是一條路,但光靠廣告不行。Facebook在2007年廣告收入是1.45億美元。這個(gè)收入水平和Yahoo這樣的門戶網(wǎng)站無(wú)法相提并論,也遠(yuǎn)遠(yuǎn)不足以盈利和上市。

    其實(shí)在網(wǎng)絡(luò)廣告市場(chǎng),已經(jīng)被證明的廣告模式只有兩種:搜索引擎的關(guān)鍵字廣告和媒體網(wǎng)站的媒體廣告,也就是Google模式和Yahoo模式,或者說(shuō)國(guó)內(nèi)的百度模式和新浪模式。前者依靠拍賣廣告關(guān)鍵字賺錢,后者依靠網(wǎng)絡(luò)媒體內(nèi)容平臺(tái)傳播影響力。

    而Facebook的精準(zhǔn)廣告投放只能依靠CPC(每點(diǎn)擊成本)來(lái)計(jì)費(fèi),而我們知道Google的adsense收入是非常可憐的,他的主要廣告收入來(lái)自競(jìng)價(jià)排名。Facebook的非UGC特性決定了他是一個(gè)沒(méi)有內(nèi)容的網(wǎng)站,無(wú)法像媒體網(wǎng)站那樣賣內(nèi)容廣告,作為一個(gè)對(duì)比,開(kāi)放式的SNS網(wǎng)站MySpace就不同了,他的網(wǎng)站互動(dòng)產(chǎn)生了巨大的UGC,所以他的廣告收入是Facebook的3倍以上。因此光靠廣告收入,對(duì)于Facebook來(lái)說(shuō)非常的不夠。

    那么Facebook的錢途在哪里?

    Facebook的真正錢途在于從app開(kāi)發(fā)商身上賺錢!我們看看淘寶網(wǎng)是怎么賺錢的就知道了:淘寶網(wǎng)開(kāi)店不收費(fèi),但是你想成為誠(chéng)信商家,你想進(jìn)駐淘寶商城,你想在淘寶的搜索上面靠前,你想獲得淘寶的高級(jí)服務(wù),那么請(qǐng)乖乖交錢。而淘寶上面的大商家是很愿意掏這筆錢的,因?yàn)樘詫氝@個(gè)平臺(tái)可以讓他賺到更多的錢。

    Facebook現(xiàn)在就是一門心思做平臺(tái),不做應(yīng)用,盡量能開(kāi)放的數(shù)據(jù)全部開(kāi)放出去,不遺余力的培養(yǎng)app開(kāi)發(fā)商,為app開(kāi)放商創(chuàng)造最好的賺錢途徑。Facebook就是一個(gè)巨大的網(wǎng)店,而app開(kāi)發(fā)商就是上面免費(fèi)租賃店面的商家,兜售自己的玩具,吸引用戶來(lái)玩。app開(kāi)發(fā)商可以去做網(wǎng)絡(luò)招聘、app開(kāi)發(fā)商可以去做機(jī)票預(yù)定、app開(kāi)發(fā)商可以去做電子商務(wù),現(xiàn)在Facebook上面已經(jīng)有幾萬(wàn)個(gè)app了,其中真正賺錢的app還不是特別豐富。等到Facebook平臺(tái)上面有100萬(wàn)個(gè)賺錢的app商家的時(shí)候,F(xiàn)acebook再面向app商家推出增值服務(wù),你可以想像一下到時(shí)候Facebook賺錢是多么容易的事情。

    所以Facebook并不需要直接從注冊(cè)用戶身上賺錢,而是把面向用戶的細(xì)分垂直領(lǐng)域的賺錢機(jī)會(huì)統(tǒng)統(tǒng)留給app商家,同時(shí)也把這些細(xì)分領(lǐng)域的成本、風(fēng)險(xiǎn)和時(shí)間統(tǒng)統(tǒng)節(jié)省了,F(xiàn)acebook只要把自己的平臺(tái)做的足夠好,給app商家提供足夠好的免費(fèi)服務(wù)和增值服務(wù),就可以坐在家里收錢了,壓根不需要自己親自一個(gè)細(xì)分領(lǐng)域一個(gè)細(xì)分領(lǐng)域辛苦的開(kāi)拓。從這一點(diǎn)來(lái)看,校內(nèi)是多么的愚蠢和短視。為什么現(xiàn)在Facebook這么全心全意的伺候app開(kāi)發(fā)商,當(dāng)然是因?yàn)閍pp開(kāi)發(fā)商將來(lái)就是Facebook的衣食父母呀。

    posted @ 2008-08-01 11:29 肖馬輝 閱讀(215) | 評(píng)論 (1)編輯 收藏
     
    說(shuō)是支持1億pv/天,也許有點(diǎn)夸張,也是為了吸引您能點(diǎn)進(jìn)來(lái),如果您能認(rèn)真看完相信也不會(huì)讓您失望,當(dāng)然,肯定有很多“高手”會(huì)對(duì)此會(huì)嗤之以鼻,沒(méi)關(guān)系,有很多眼高手低的人總喜歡評(píng)論別人卻從不會(huì)看清自己。

    如果大家真想支持我、支持中國(guó)人開(kāi)源項(xiàng)目,請(qǐng)把該文貼到自己的博客中或者收藏本文,記得包含文檔的下載地址!!!!!!!謝謝。

    我說(shuō)的系統(tǒng)主要是構(gòu)建在hibernate之上的高效數(shù)據(jù)庫(kù)緩存系統(tǒng),其中包含了分布式解決方案,該系統(tǒng)已經(jīng)應(yīng)用在舍得網(wǎng)上了,沒(méi)有發(fā)現(xiàn)大問(wèn)題,本人也相信該系統(tǒng)已經(jīng)足夠強(qiáng)大,應(yīng)付數(shù)百萬(wàn)IP/天的應(yīng)用都不是問(wèn)題,我這么說(shuō)肯定有人會(huì)對(duì)此表示懷疑,其實(shí)系統(tǒng)到底能撐多少IP/天不在于系統(tǒng)本身而是在于使用該系統(tǒng)的人。

    代碼看上去很簡(jiǎn)單,其實(shí)卻是兩年經(jīng)驗(yàn)的總結(jié),整過(guò)過(guò)程也遇到了很多難點(diǎn),最后一一解決了,所以也請(qǐng)各位珍惜他人的勞動(dòng)成果。本系統(tǒng)非常簡(jiǎn)潔易用,主程序 BaseManager.java不到1000行代碼,用“精悍”來(lái)形容絕對(duì)不為過(guò),1000行代碼卻包含了數(shù)據(jù)庫(kù)對(duì)象的緩存、列表和長(zhǎng)度的緩存、按字段散列緩存、update延時(shí)更新、自動(dòng)清除列表緩存等功能,用它來(lái)實(shí)現(xiàn)像論壇、博客、校友錄、交友社區(qū)等絕大部分應(yīng)用網(wǎng)站都足夠了。

    我在理想狀態(tài)下做了壓力測(cè)試,在沒(méi)有數(shù)據(jù)庫(kù)操作的jsp頁(yè)面(舍得網(wǎng)新首頁(yè))里可以完成2000多requests每秒(正常情況可能有1/1000的 request有數(shù)據(jù)庫(kù)查詢,其余999/1000都是直接從緩存里讀取),物品詳情頁(yè)每秒可完成3000多requests,純靜態(tài)html頁(yè)面也只能完成7000多requests/秒,我對(duì)首頁(yè)進(jìn)行了三個(gè)小時(shí)的壓力測(cè)試,完成了24850800個(gè)requests,java一點(diǎn)事都沒(méi)有,內(nèi)存沒(méi)有上漲。按照2000個(gè)requests/秒算,一天按15小時(shí)計(jì)算,那么每天能完成3600*15*2000=1億零8百萬(wàn)requests,當(dāng)然這是理想狀態(tài),實(shí)際狀態(tài)就算打一折,還能完成1000萬(wàn)pv/天,要知道,這只是一個(gè)普通1萬(wàn)3千塊錢買的服務(wù)器,內(nèi)存4G,CPU2個(gè),LinuxAS4系統(tǒng), apache2.0.63/resin2.1.17/jdk6.0的環(huán)境。

    現(xiàn)在進(jìn)入正題。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

    為什么要用緩存?如果問(wèn)這個(gè)問(wèn)題說(shuō)明你還是新手,數(shù)據(jù)庫(kù)吞吐量畢竟有限,每秒讀寫5000次了不起了,如果不用緩存,假設(shè)一個(gè)頁(yè)面有100個(gè)數(shù)據(jù)庫(kù)操作, 50個(gè)用戶并發(fā)數(shù)據(jù)庫(kù)就歇菜,這樣最多能支撐的pv也就50*3600*15=270萬(wàn),而且數(shù)據(jù)庫(kù)服務(wù)器累得半死,搞不好什么時(shí)候就累死了。我的這套緩存系統(tǒng)比單獨(dú)用memcached做緩存還要強(qiáng)大,相當(dāng)于在memcached上再做了兩級(jí)緩存,大家都知道m(xù)emcached很強(qiáng)了,但是吞吐量還是有限,每秒20000次get和put當(dāng)遇到超大規(guī)模的應(yīng)用時(shí)還是會(huì)歇菜,本地HashMap每秒可執(zhí)行上百萬(wàn)次put和get,在這上面損耗的性能幾乎可以忽略不記了。溫馨提示:能不用分布式的時(shí)候就不要用分布式,非用分布式的時(shí)候再考慮用memcached,我的緩存系統(tǒng)在這方面都已經(jīng)實(shí)現(xiàn)了,改個(gè)配置就可以了,有興趣的可以仔細(xì)測(cè)試測(cè)試!

    一般數(shù)據(jù)庫(kù)緩存在我看來(lái)包含四種。第一種:?jiǎn)蝹€(gè)對(duì)象的緩存(一個(gè)對(duì)象就是數(shù)據(jù)庫(kù)一行記錄),對(duì)于單個(gè)對(duì)象的緩存,用HashMap就可以了,稍微復(fù)雜一點(diǎn)用LRU算法包裝一個(gè)HashMap,再?gòu)?fù)雜一點(diǎn)的分布式用memcached即可,沒(méi)什么太難的;第二種:列表緩存,就像論壇里帖子的列表;第三種:長(zhǎng)度的緩存,比如一個(gè)論壇板塊里有多少個(gè)帖子,這樣才方便實(shí)現(xiàn)分頁(yè)。第四種:復(fù)雜一點(diǎn)的group,sum,count查詢,比如一個(gè)論壇里按點(diǎn)擊數(shù)排名的最HOT的帖子列表。第一種比較好實(shí)現(xiàn),后面三種比較困難,似乎沒(méi)有通用的解決辦法,我暫時(shí)以列表緩存(第二種)為例分析。

    mysql和hibernate的底層在做通用的列表緩存時(shí)都是根據(jù)查詢條件把列表結(jié)果緩存起來(lái),但是只要該表的記錄有任何變化(增加/刪除/修改),列表緩存要全部清除,這樣只要一個(gè)表的記錄經(jīng)常變化(通常情況都會(huì)這樣),列表緩存幾乎失效,命中率太低了。

    本人想了一個(gè)辦法改善了列表緩存,當(dāng)表的記錄有改變時(shí),遍歷所有列表緩存,只有那些被影響到的列表緩存才會(huì)被刪除,而不是直接清除所有列表緩存,比如在一個(gè)論壇版(id=1)里增加了一個(gè)帖子,那么只要清除id=1這個(gè)版對(duì)應(yīng)的列表緩存就可以了,版id=2就不用清除了。這樣處理有個(gè)好處,可以緩存各種查詢條件(如等于、大于、不等于、小于)的列表緩存,但也有個(gè)潛在的性能問(wèn)題,由于需要遍歷,CPU符合比較大,如果列表緩存最大長(zhǎng)度設(shè)置成10000,兩個(gè)4核的CPU每秒也只能遍歷完300多次,這樣如果每秒有超過(guò)300個(gè)insert/update/delete,系統(tǒng)就吃不消了。

    在前面兩種解決辦法都不完美的情況下,本人和同事經(jīng)過(guò)幾個(gè)星期的思索,總算得出了根據(jù)表的某幾個(gè)字段做散列的緩存辦法,這種辦法無(wú)需大規(guī)模遍歷,所以 CPU符合非常小,由于這種列表緩存按照字段做了散列,所以命中率極高。思路如下:每個(gè)表有3個(gè)緩存Map(key=value鍵值對(duì)),第一個(gè)Map是對(duì)象緩存A,在A中,key是數(shù)據(jù)庫(kù)的id,Value是數(shù)據(jù)庫(kù)對(duì)象(也就是一行數(shù)據(jù));第二個(gè)Map是通用列表緩存B,B的最大長(zhǎng)度一般1000左右,在B中,key是查詢條件拼出來(lái)的String(如start=0,length=15#active=0#state=0),Value是該條件查詢下的所有id組成的List;第三個(gè)Map是散列緩存C,在C中,key是散列的字段(如根據(jù)userId散列的話,其中某個(gè)key就是userId= 109這樣的String)組成的String,value是一個(gè)和B類似的HashMap。其中只有B這個(gè)Map是需要遍歷的,不知道說(shuō)明白了沒(méi)有,看完小面這個(gè)例子應(yīng)該就明白了,就用論壇的回復(fù)表作說(shuō)明,假設(shè)回復(fù)表T中假設(shè)有字段id,topicId,postUserId等字段(topicId就是帖子的id,postUserId是發(fā)布者id)。

    第一種情況,也是最常用的情況,就是獲取一個(gè)帖子對(duì)應(yīng)的回復(fù),sql語(yǔ)句應(yīng)該是象
    select id from T where topicId=2008 order by createTime desc limit 0,5
    select id from T where topicId=2008 order by createTime desc limit 5,5
    select id from T where topicId=2008 order by createTime desc limit 10,5
    的樣子,那么這種列表很顯然用topicId做散列是最好的,把上面三個(gè)列表緩存(可以是N個(gè))都散列到key是topicId=2008這一個(gè)Map 中,當(dāng)id是2008的帖子有新的回復(fù)時(shí),系統(tǒng)自動(dòng)把key是topicId=2008的散列Map清除即可。由于這種散列不需要遍歷,因此可以設(shè)置成很大,例如100000,這樣10萬(wàn)個(gè)帖子對(duì)應(yīng)的所有回復(fù)列表都可以緩存起來(lái),當(dāng)有一個(gè)帖子有新的回復(fù)時(shí),其余99999個(gè)帖子對(duì)應(yīng)的回復(fù)列表都不會(huì)動(dòng),緩存的命中率極高。

    第二種情況,就是后臺(tái)需要顯示最新的回復(fù),sql語(yǔ)句應(yīng)該是象
    select id from T order by createTime desc limit 0,50
    的樣子,這種情況不需要散列,因?yàn)楹笈_(tái)不可能有太多人訪問(wèn),常用列表也不會(huì)太多,所以直接放到通用列表緩存B中即可。

    第三種情況,獲取一個(gè)用戶的回復(fù),sql語(yǔ)句象
    select id from T where userId=2046 order by createTime desc limit 0,15
    select id from T where userId=2046 order by createTime desc limit 15,15
    select id from T where userId=2046 order by createTime desc limit 30,15
    的樣子,那么這種列表和第一種情況類似,用userId做散列即可。

    第四種情況,獲取一個(gè)用戶對(duì)某個(gè)帖子的回復(fù),sql語(yǔ)句象
    select id from T where topicId=2008 and userId=2046 order by createTime desc limit 0,15
    select id from T where topicId=2008 and userId=2046 order by createTime desc limit 15,15
    的樣子,這種情況比較少見(jiàn),一般以topicId=2008為準(zhǔn),也放到key是topicId=2008這個(gè)散列Map里即可。

    總結(jié):這種緩存思路可以存儲(chǔ)大規(guī)模的列表,緩存命中率極高,因此可以承受超大規(guī)模的應(yīng)用,但是需要技術(shù)人員根據(jù)自身業(yè)務(wù)邏輯來(lái)配置需要做散列的字段,一般用一個(gè)表的索引鍵做散列(注意順序,最散的字段放前面),假設(shè)以u(píng)serId為例,可以存儲(chǔ)N個(gè)用戶的M種列表,如果某個(gè)用戶的相關(guān)數(shù)據(jù)發(fā)生變化,其余N -1個(gè)用戶的列表緩存紋絲不動(dòng)。以上說(shuō)明的都是如何緩存列表,緩存長(zhǎng)度和緩存列表思路完全一樣,如緩存象select count(*) from T where topicId=2008這樣的長(zhǎng)度,也是放到topicId=2008這個(gè)散列Map中。如果再配合好使用mysql的內(nèi)存表和memcached,加上F5設(shè)備做分布式負(fù)載均衡,該系統(tǒng)對(duì)付像1000萬(wàn)IP/天這種規(guī)模級(jí)的應(yīng)用都足夠了,除搜索引擎外一般的應(yīng)用網(wǎng)站到不了這種規(guī)模。

    再次申明:系統(tǒng)到底是不是強(qiáng)大不在系統(tǒng)本身而在于使用該系統(tǒng)的人!!!

    這個(gè)緩存系統(tǒng)是我和同事幾年經(jīng)驗(yàn)的總結(jié),看似簡(jiǎn)單,其實(shí)也沒(méi)那么簡(jiǎn)單,把它作為開(kāi)源有下面幾個(gè)目的:第一,真的希望有很多人能用它;第二:希望更多的人能夠完善和改進(jìn)它;第三:希望大家能聚到一起為通用高效數(shù)據(jù)庫(kù)緩存構(gòu)架作出貢獻(xiàn),畢竟,數(shù)據(jù)庫(kù)操作是各種應(yīng)用最常用的操作,也是最容易產(chǎn)生性能瓶頸的地方。

    Zip包中包含了配置方法和測(cè)試用的jsp,只要把它配置成一個(gè)web應(yīng)用就可以快速調(diào)試并看到緩存的力量了,文檔和下載地址是http://shedewang.com/akaladocs/api/com/akala/dbcache/core/BaseManager.html。群組的地址是http://groups.csdn.net/shedewang_db_cache

    配置說(shuō)明文件在docs/開(kāi)始配置.txt里有說(shuō)明。

    最后啰嗦一句,如果大家真想支持我、支持中國(guó)人開(kāi)源項(xiàng)目,請(qǐng)把該文貼到自己的博客中或者收藏本文,記得包含文檔的下載地址!!!!!!!謝謝。thank you and Good luck。
    posted @ 2008-07-28 10:16 肖馬輝 閱讀(302) | 評(píng)論 (0)編輯 收藏
     
    select * from bookReview a where rid=(select top 1 rid from bookReview where isbn=a.isbn order by commendtimes desc,rid desc)
    posted @ 2008-07-25 14:30 肖馬輝 閱讀(121) | 評(píng)論 (0)編輯 收藏
     
    --死鎖 /****************************************************************************************************************************************************** 死鎖指兩個(gè)以上事務(wù)相互阻塞相互等待對(duì)方釋放它們的鎖,SQL Server會(huì)通過(guò)回滾其中一個(gè)事務(wù)並返回一個(gè)錯(cuò)誤來(lái)自已解決阻塞問(wèn)題,讓其他事務(wù)完成它們的工作。 整理人:中國(guó)風(fēng)(Roy) 日期:2008.07.20 ******************************************************************************************************************************************************/ set nocount on ; if object_id('T1') is not null drop table T1 go create table T1(ID int primary key,Col1 int,Col2 nvarchar(20)) insert T1 select 1,101,'A' insert T1 select 2,102,'B' insert T1 select 3,103,'C' go if object_id('T2') is not null drop table T2 go create table T2(ID int primary key,Col1 int,Col2 nvarchar(20)) insert T2 select 1,201,'X' insert T2 select 2,202,'Y' insert T2 select 3,203,'Z' go 生成表數(shù)據(jù): /* T1: ID Col1 Col2 ----------- ----------- -------------------- 1 101 A 2 101 B 3 101 C T2: ID Col1 Col2 ----------- ----------- -------------------- 1 201 X 2 201 Y 3 201 Z */ 防止死鎖: 1、 最少化阻塞。阻塞越少,發(fā)生死鎖機(jī)會(huì)越少 2、 在事務(wù)中按順序訪問(wèn)表(以上例子:死鎖2) 3、 在錯(cuò)誤處理程式中檢查錯(cuò)誤1205並在錯(cuò)誤發(fā)生時(shí)重新提交事務(wù) 4、 在錯(cuò)誤處理程式中加一個(gè)過(guò)程將錯(cuò)誤的詳細(xì)寫入日誌 5、 索引的合理使用(以上例子:死鎖1、死鎖3) 當(dāng)發(fā)生死鎖時(shí),事務(wù)自動(dòng)提交,可通過(guò)日誌來(lái)監(jiān)視死鎖 死鎖1(索引): --連接窗口1 --1步: begin tran update t1 set col2=col2+'A' where col1=101 --3步: select * from t2 where col1=201 commit tran --連接窗口2 --2步: begin tran update t2 set col2=col2+'B' where col1=203 --4步: select * from t1 where col1=103 commit tran --連接窗口1:收到死鎖錯(cuò)誤,連接窗口2得到結(jié)果: /* 訊息 1205,層級(jí) 13,狀態(tài) 51,行 3 交易 (處理序識(shí)別碼 53) 在 鎖定 資源上被另一個(gè)處理序鎖死並已被選擇作為死結(jié)的犧牲者。請(qǐng)重新執(zhí)行該交易。 */ --連接窗口2:得到結(jié)果 /* ----------- ----------- -------------------- 3 103 C */ 處理方法: --在t1、t2表的col1條件列建索引 create index IX_t1_col1 on t1(col1) create index IX_t2_col1 on t2(col1) go --連接窗口1 --1步: begin tran update t1 set col2=col2+'A' where col1=101 --3步: select * from t2 with(index=IX_t2_col1)where col1=201 --因表數(shù)據(jù)少,只能指定索引提示才能確保SQL Server使用索引 commit tran --連接窗口2 --2步: begin tran update t2 set col2=col2+'B' where col1=203 --4步: select * from t1 with(index=IX_t1_col1) where col1=103 --因表數(shù)據(jù)少,只能指定索引提示才能確保SQL Server使用索引 commit tran --連接窗口1: /* ID Col1 Col2 ----------- ----------- -------------------- 1 201 X (1 個(gè)資料列受到影響) */ --連接窗口2 /* ID Col1 Col2 ----------- ----------- -------------------- 3 103 C (1 個(gè)資料列受到影響) */ 死鎖2(訪問(wèn)表順序): --連接窗口1: --1步: begin tran update t1 set col1=col1+1 where ID=1 --3步: select col1 from t2 where ID=1 commit tran --連接窗口2: --2步: begin tran update t2 set col1=col1+1 where ID=1 --4步 select col1 from t1 where ID=1 commit tran --連接窗口1: /* col1 ----------- 201 (1 個(gè)資料列受到影響) */ --連接窗口2: /* col1 ----------- 訊息 1205,層級(jí) 13,狀態(tài) 51,行 1 交易 (處理序識(shí)別碼 54) 在 鎖定 資源上被另一個(gè)處理序鎖死並已被選擇作為死結(jié)的犧牲者。請(qǐng)重新執(zhí)行該交易。 */ 處理方法: --改變?cè)L問(wèn)表的順序 --連接窗口1: --1步: begin tran update t1 set col1=col1+1 where ID=1 --3步: select col1 from t2 where ID=1 commit tran --連接窗口2: --2步: begin tran select col1 from t1 where ID=1--會(huì)等待連接窗口1提交 --4步 update t2 set col1=col1+1 where ID=1 commit tran 死鎖3(單表): --連接窗口1: while 1=1 update T1 set col1=203-col1 where ID=2 --連接窗口2: declare @i nvarchar(20) while 1=1 set @i=(select col2 from T1 with(index=IX_t1_col1)where Col1=102);--因表數(shù)據(jù)少,只能指定索引提示才能確保SQL Server使用索引 --連接窗口1 /* 訊息 1205,層級(jí) 13,狀態(tài) 51,行 4 交易 (處理序識(shí)別碼 53) 在 鎖定 資源上被另一個(gè)處理序鎖死並已被選擇作為死結(jié)的犧牲者。請(qǐng)重新執(zhí)行該交易。 */ 處理方法: 1、刪除col1上的非聚集索引,這樣影響SELECT速度,不可取. drop index IX_t1_col1 on t1 2、建一個(gè)覆蓋索引 A、drop index IX_t1_col1 on t1 B、create index IX_t1_col1_col2 on t1(col1,col2) 通過(guò)SQL Server Profiler查死鎖信息: 啟動(dòng)SQL Server Profiler——連接實(shí)例——事件選取範(fàn)圍——顯示所有事件 選擇項(xiàng): TSQL——SQL:StmtStarting Locks——Deadlock graph(這是SQL2005新增事件,生成包含死鎖信息的xml值) ——Lock:DeadlockChain 死鎖鏈中的進(jìn)程產(chǎn)生該事件,可標(biāo)識(shí)死鎖進(jìn)程的ID並跟蹤操作 ——Lock:Deadlock 該事件發(fā)生了死鎖


    阻塞分析:
    http://blog.csdn.net/roy_88/archive/2008/07/21/2682044.aspx
    posted @ 2008-07-22 12:59 肖馬輝 閱讀(204) | 評(píng)論 (0)編輯 收藏
     
    本文來(lái)自:http://www.cnblogs.com/sumtec/archive/2008/06/26/1223460.html
    博客園技術(shù)帖子太多了,這是我真實(shí)的感受。也許是因?yàn)椴┛蛨@定位于技術(shù)博客,所以會(huì)把其他內(nèi)容劃分到別的區(qū)里面,這一直是我覺(jué)得最不爽的地方。因?yàn)檫@樣,有可能很多優(yōu)秀的文章就被埋沒(méi)了。其實(shí)完全可以都集中在首頁(yè)顯示,不好的刷下來(lái),好的頂上去。以前說(shuō)是沒(méi)有人管,那也確實(shí)是有心無(wú)力。現(xiàn)在有點(diǎn)人力資源了,我覺(jué)得還是希望趕緊考慮一下這方面的事情。我寫這個(gè)隨筆的時(shí)候,就猶豫,該不該發(fā)在首頁(yè)?最后還是覺(jué)得發(fā)吧,我覺(jué)得我想和大家交流的這些內(nèi)容,估計(jì)還是會(huì)對(duì)一部分人產(chǎn)生一定幫助的。其實(shí),我還想聽(tīng)聽(tīng)dudu的創(chuàng)業(yè)經(jīng)驗(yàn)談。

    好,牢騷發(fā)完了,回到正題。

    今天一晚上連著看了十幾個(gè)簡(jiǎn)歷,看得我頭都大了。什么?不就是看看簡(jiǎn)歷么,有什么好頭痛的?沒(méi)錯(cuò),以前我也這么想的,可最近公司做了一個(gè)有關(guān)招聘的培訓(xùn),才知道面試之前、之中、之后的工作事項(xiàng)有這么多。于是,最近的面試就要好好做功課準(zhǔn)備準(zhǔn)備了。可當(dāng)我真看這么多簡(jiǎn)歷的時(shí)候,就有點(diǎn)麻木了。不是么?平時(shí)已經(jīng)夠忙的了,各種大小事務(wù)紛涌而至,而且我所在部門還是“重要且緊急”甚至“不重要但緊急”事項(xiàng)的窗口。可想而知,當(dāng)你看一堆的簡(jiǎn)歷的時(shí)候,就多么的期望你面前的簡(jiǎn)歷最好能夠回答你一切想要知道的問(wèn)題。可是偏偏最頭痛的是,大部分的簡(jiǎn)歷給我?guī)?lái)的問(wèn)題,比我想要知道的答案還要多。

    舉例說(shuō)明之前,先說(shuō)說(shuō)我從培訓(xùn)中得到的知識(shí)吧:
    一個(gè)公司,尤其是靠腦力掙錢的公司,其人力相關(guān)成本是極高的。這里面,自然也包含了招聘和解雇的成本。不要以為招聘成本就是一個(gè)HR員工的成本,還應(yīng)該包括:
    1、因?yàn)槊嬖嚕枰加玫娜肆Y源成本;
    2、因?yàn)樵囉檬。Ц兜馁Y金成本和時(shí)間成本;
    3、因?yàn)樽罱K雇傭了錯(cuò)誤的人,所造成的資金損失,人力資源損失等。

    具體數(shù)字我還真忘了,但是可以肯定的是,最終找到的合適員工,和你面試過(guò)的候選人之比,是非常小的,所以說(shuō)招聘成本高。這還不包含招聘后,該員工所占用空間所需要花費(fèi)的資金成本,該員工造成規(guī)模擴(kuò)大之后的管理成本等。由此可見(jiàn),招聘是一件多么重要的事情。比如說(shuō),找到一個(gè)合適的人,可以完成十個(gè)不合適的員工才能完成的工作量,前者的人力成本比后者的要明顯低很多。那么為什么我們不多花一點(diǎn)經(jīng)歷,來(lái)認(rèn)真對(duì)待招聘的事情呢?據(jù)我所知,很多公司的招聘工作,可能主要是HR那邊出力,然后具體相關(guān)部門的主管進(jìn)行面試。實(shí)際上這是有很大問(wèn)題的,應(yīng)該是相關(guān)部門主管要在面試前做很多的功課,具體做什么這里不多說(shuō)了,只說(shuō)一個(gè):你打算問(wèn)候選人什么問(wèn)題?

    問(wèn)題有哪些呢?這個(gè)我也不多列,至少得有下面這幾個(gè)吧(不限于此):
    1、簡(jiǎn)歷中有什么疑點(diǎn)?例如工作經(jīng)歷斷檔等;
    2、過(guò)去的工作中,面對(duì)了什么問(wèn)題,如何處理(而不是假大空的問(wèn):如果你是經(jīng)理,你能面對(duì)壓力嗎?回答:能!@_@)

    其中,我發(fā)現(xiàn)最有趣的一個(gè)問(wèn)題是,很多人的簡(jiǎn)歷中普遍存在一個(gè)(套)疑點(diǎn):你回報(bào)的上級(jí)是什么人,職責(zé)是什么,你管理多少人,職責(zé)是什么,在你所在的工作中具體做什么事情?
    很多人的簡(jiǎn)歷都是這么列的:
    2007.1-2008.1   北京XXX公司
    職位:程序員
    工作內(nèi)容:用ABC.NET、OrnDB技術(shù)以及JUNK語(yǔ)言,構(gòu)建了一個(gè)BC結(jié)構(gòu)的XXX項(xiàng)目,該項(xiàng)目采用了0.5層的技術(shù),實(shí)現(xiàn)了XXX、YYY、ZZZ的功能。全程參與了該項(xiàng)目的開(kāi)發(fā)。

    那么,我上面的疑點(diǎn),一個(gè)都沒(méi)有解決。還有一個(gè)更嚴(yán)重的問(wèn)題,是使用大量爛掉的關(guān)鍵字,例如:熟悉、精通、理解——當(dāng)我面對(duì)這些詞的時(shí)候,幾乎已經(jīng)看到發(fā)膩,甚至都搞不清楚到底是熟悉比精通厲害呢,還是理解才是萬(wàn)歲。最糟糕的莫過(guò)于列出了一大堆的熟悉精通理解,我看到這樣的情況,就想不明白,到底哪個(gè)才是你最強(qiáng)的方面,哪一個(gè)是你最弱的方面,基本上說(shuō)了等于沒(méi)說(shuō)一樣。

    好,反過(guò)來(lái)說(shuō),如果你是求職者,如何從幾百上千份的簡(jiǎn)歷中脫穎而出呢?除了不要犯上述的常識(shí)性錯(cuò)誤,還要注意突出你的不同之處。如何突出呢?要看你的工作經(jīng)驗(yàn)如何了。

    如果你是剛畢業(yè)的毛頭小子

    記住,不要列出一大堆的在校工作項(xiàng)目,尤其不要列你的畢設(shè)。中國(guó)大學(xué)的畢設(shè)水平有多爛,大家心知肚明,你又何苦把它統(tǒng)統(tǒng)列出來(lái)讓人鄙視一番呢?很不幸我當(dāng)年就犯了這個(gè)錯(cuò)誤。雖說(shuō)現(xiàn)在想起來(lái),我的畢設(shè)水平仍然有資格說(shuō)是比普通的學(xué)生好上那么一點(diǎn)點(diǎn),可是如果和真正的、成功的商業(yè)系統(tǒng)比起來(lái),那都是小菜一碟。你向往的某個(gè)公司真的會(huì)覺(jué)得你做過(guò)的文件拷貝程序感興趣嗎?那只是一個(gè)程序,不是系統(tǒng),因此人家不會(huì)覺(jué)得你做過(guò)什么。很不幸,我以前曾經(jīng)也做過(guò)類似的事情。不過(guò),我并不是說(shuō)不列,列出一條你認(rèn)為最自豪的就可以了。雖然比不上商業(yè)系統(tǒng),但這足以證明你是一個(gè)積極的人,真正做過(guò)一點(diǎn)事情的人,不是那種渾渾噩噩過(guò)一生的人。其他的項(xiàng)目,一筆帶過(guò)就行了,寫多了簡(jiǎn)直是浪費(fèi)你的精力和版面,也浪費(fèi)面試官的時(shí)間和感情。

    除此之外,你還可以提供程序的源代碼(全部或部分),這是展示你的程序風(fēng)格的一個(gè)很好的方式。不過(guò)建議你在給出這樣的代碼之前,仔細(xì)地考慮一下,你是否應(yīng)該規(guī)整規(guī)整,重構(gòu)重構(gòu)?對(duì)于一個(gè)企業(yè),要決定是否聘用一個(gè)員工,是一件很嚴(yán)肅的事情,因此真正面試之前,理應(yīng)進(jìn)行相應(yīng)的準(zhǔn)備工作。那么當(dāng)你去準(zhǔn)備面試的時(shí)候,也更應(yīng)該如此了。我收到過(guò)一個(gè)源代碼,里面寫了一些.NET其實(shí)已經(jīng)提供的功能,除此之外也出現(xiàn)了一些很長(zhǎng)的方法,還有一些遺留的、被注釋掉的代碼,寫著這個(gè)沒(méi)有做出來(lái)。這樣的代碼其實(shí)在向你的主顧宣示著:其實(shí)我很糟糕,看,我的代碼就是這么糟糕,甚至于我來(lái)面試了,我也不樂(lè)于稍微修飾一下。您覺(jué)得這樣能獲得你想要的工作嗎?如果是你不在乎的工作,那另當(dāng)別論,可你都不在乎這樣的工作,為什么要投這份簡(jiǎn)歷呢?
     
    你應(yīng)該重點(diǎn)展示什么呢?相對(duì)于有經(jīng)驗(yàn)的人來(lái)講,缺乏經(jīng)驗(yàn)是你的缺點(diǎn),同時(shí)也是你的優(yōu)點(diǎn)。在雇主看來(lái),你就是一張白紙,未來(lái)在這張白紙上可能會(huì)畫出一幅很棒的畫。可并不是每一張白紙都有同樣的結(jié)果,原因在于紙張的質(zhì)量。上好的紙張應(yīng)該是好的東西點(diǎn)撥一下,就能自然展開(kāi),而糟糕的東西不會(huì)被畫上去。糟糕的紙張則相反,美好的東西畫了半天沒(méi)反應(yīng),糟糕的東西不知道怎么自動(dòng)就有了。這個(gè)比喻還不太直接,直白的說(shuō),雇主期望你是這樣的一個(gè)人:
    1、你很勤奮并且你很好學(xué)
    2、你很好學(xué)并且一學(xué)就會(huì)
    3、你學(xué)會(huì)了不止,還學(xué)得很精
    4、學(xué)得很精了不止,還態(tài)度好

    一個(gè)不勤奮的不好學(xué)的人,如何展望未來(lái)能給公司帶來(lái)價(jià)值呢?一個(gè)好的公司,會(huì)有一些培訓(xùn),縱然沒(méi)有,也會(huì)要求你自學(xué)。如果你學(xué)了半天都不會(huì),你是勤奮好學(xué)那也沒(méi)有用。這個(gè)一學(xué)就會(huì),其實(shí)是平日長(zhǎng)時(shí)間進(jìn)行自學(xué)鍛煉的結(jié)果,我也沒(méi)有一個(gè)“銀彈”供你解決這個(gè)問(wèn)題。接下來(lái),你不僅僅要學(xué)會(huì)了,還要精。所謂的精,就是你能說(shuō)出道道來(lái),能說(shuō)出個(gè)所以然來(lái)。我非常頭痛的一點(diǎn)是,每次我面試都會(huì)問(wèn)“interface”你是怎么理解的,其結(jié)果十有八九就是大眼瞪小眼。可是這些人的簡(jiǎn)歷上,會(huì)寫著自己會(huì)X、Y、Z還會(huì)三層結(jié)構(gòu),那interface是干嘛使的、為什么存在怎么會(huì)說(shuō)不出來(lái)呢?每天花點(diǎn)時(shí)間,先把這些最基本的思想弄清楚了,你才可能找到一份好工作。也許會(huì)花你幾個(gè)月的時(shí)間,不過(guò)如果不花時(shí)間做這樣的事情,你花多少時(shí)間也找不到一份你覺(jué)得滿意的工作的。最后一點(diǎn)其實(shí)是很重要,有句話:態(tài)度決定行為,行為決定習(xí)慣,習(xí)慣決定性格,性格決定命運(yùn)。如果你整天懶懶散散,上面交待你做的事情不到最后一天不做,又或者沒(méi)有明確的利益你就不做事情,這樣的態(tài)度肯定會(huì)決定你沒(méi)有什么好命運(yùn)的(含著金鑰匙的除外,這種人不需要找工作)。

    上面這些是剛畢業(yè)的學(xué)生的寫簡(jiǎn)歷時(shí)的一些基本思路。

    如果你是工作幾年,有了一定經(jīng)驗(yàn),甚至是豐富經(jīng)驗(yàn)的人

    那么很顯然,你的優(yōu)勢(shì)在于經(jīng)驗(yàn)。這個(gè)經(jīng)驗(yàn)不在于你坐過(guò)了什么項(xiàng)目,而是你用什么知識(shí)、工具做了個(gè)多大規(guī)模的事情,其間遇到些什么樣的困難,最后如何克服了。很多的簡(jiǎn)歷里面,都只是說(shuō)作了一個(gè)什么項(xiàng)目。至于說(shuō)這個(gè)項(xiàng)目有多復(fù)雜,你負(fù)責(zé)其中的什么內(nèi)容,你在其間使用了什么知識(shí)和工具,遇到什么困難,統(tǒng)統(tǒng)不說(shuō)。這樣的結(jié)果就是我看完了還是等于什么都不知道,就算你說(shuō)我05-08年期間參與的項(xiàng)目有Windows Server 2008,Visual Studio 2008,那又怎么樣呢?我心里面也許會(huì)覺(jué)得,可能其實(shí)你只不過(guò)作了其中里面一個(gè)很小很小的部分,比如寫了一個(gè)計(jì)算器,或者 OpenFileDialog。這樣對(duì)于你是不利的,因?yàn)槿绻硪粋€(gè)和你競(jìng)爭(zhēng)的候選人,把他的經(jīng)歷寫得比較具體,那也許就會(huì)約見(jiàn)他而不約見(jiàn)你。

    當(dāng)我看過(guò)這么多的簡(jiǎn)歷之后,我就覺(jué)得,如果我再找工作的時(shí)候,我就會(huì)用PPT把我這幾年做的工作列出來(lái),把我參與過(guò)的最大的一個(gè)系統(tǒng)的拓?fù)鋱D畫出來(lái),把我遇到過(guò)并解決過(guò)的問(wèn)題舉一個(gè)出來(lái),把我參加過(guò)的某個(gè)重要培訓(xùn)以及心得列出來(lái)。這樣的PPT,至少讓人能看得津津有味,直到我參與過(guò)什么樣的事情,也能證明我能勝任我想要爭(zhēng)取的崗位。說(shuō)到這里,我也想提一下,我認(rèn)為,文字太多其實(shí)不是好事,所以簡(jiǎn)歷文字要精煉在精煉。詳細(xì)列出10個(gè)項(xiàng)目,你說(shuō)有多少人能耐著性子看完?幾乎沒(méi)有。詳細(xì)列出1個(gè)項(xiàng)目呢?我覺(jué)得大部分人應(yīng)該還是愿意看的。所以你覺(jué)得用同樣多的文字,粗略列出10個(gè)項(xiàng)目好呢,還是詳細(xì)介紹1個(gè)?我建議剩余的可以一筆帶過(guò),附帶說(shuō)明如果面試時(shí)有興趣了解,可以詳細(xì)說(shuō)明。同時(shí),圖片比文字的說(shuō)明力強(qiáng)多了,為什么不多擺幾個(gè)圖片呢?一個(gè)拓?fù)鋱D,基本上就能把你的項(xiàng)目復(fù)雜度給說(shuō)清楚了,用文字可得要寫好大一段,是否能看得明白還不一定。圖基本上瞄一眼就明白,文字可得要反復(fù)琢磨,對(duì)于面試官來(lái)講前者絕對(duì)是賞心悅目,后者絕對(duì)是折磨人。

    與剛出道的人比起來(lái),你的劣勢(shì)在于經(jīng)驗(yàn)。經(jīng)驗(yàn)多了難免容易坐享其成,不愿意接受新東西,或者有自覺(jué)牛X的感覺(jué)。
    先說(shuō)前者。我遇到過(guò)工作多年的候選人,面試時(shí)問(wèn)3.5的東西例如linq、WCF等一問(wèn)三不知,倒是不停的說(shuō)很古董的解決方案。不懂就算了,有的東西還強(qiáng)裝了解,說(shuō)出來(lái)的不對(duì)。其實(shí)不知道就不知道好了,多數(shù)企業(yè)需要的是踏實(shí)的人,不希望你掩蓋真相。俗話說(shuō)有問(wèn)題不可怕,有問(wèn)題不知道不解決才可怕。也許你也是對(duì)很多最新的知識(shí)不了解,畢竟工作經(jīng)驗(yàn)多的人,可能會(huì)負(fù)責(zé)比較多的事情。公司也可能不愿意冒風(fēng)險(xiǎn)使用新技術(shù),平時(shí)也沒(méi)有時(shí)間學(xué)習(xí),怎么辦?其實(shí)解決的辦法很簡(jiǎn)單:開(kāi)始投簡(jiǎn)歷之前,趕緊先多學(xué)習(xí)一些新的東西。寧愿少工作一兩個(gè)月,也要先把這些工作做好,磨刀不誤砍柴工嘛。再說(shuō)了,也算給自己放個(gè)假。當(dāng)然了,如果工作中有機(jī)會(huì),或者能夠爭(zhēng)取機(jī)會(huì),那是再好不過(guò)的。
    再說(shuō)后者。平時(shí)自己給自己打氣,沒(méi)人的時(shí)候,或者對(duì)著老婆的時(shí)候,你可以自覺(jué)牛X一下,但是寫簡(jiǎn)歷的時(shí)候千萬(wàn)不要。先不說(shuō)面試官是否比你厲害,這樣的感覺(jué)面試官至少會(huì)判斷你態(tài)度有問(wèn)題。其次,你要真那么牛X,為什么還要去面試呢?獵頭早該找上門來(lái)啦,準(zhǔn)東家早就對(duì)你求賢若渴啦,三顧茅廬啦。嗯,有人會(huì)覺(jué)得,牛X怎么可能寫簡(jiǎn)歷里面呢?我舉一個(gè)例子,我就看到一些簡(jiǎn)歷,會(huì)羅列很多會(huì)的東西。其實(shí)完全沒(méi)有必要,首先,這么十幾個(gè)技術(shù)知識(shí)里面,總有強(qiáng)弱之分,列出強(qiáng)的那么兩三個(gè)就夠了。再牛X,面試官也沒(méi)有時(shí)間問(wèn)你超過(guò)5個(gè)以上的技術(shù)知識(shí),所以你也沒(méi)必要列超過(guò)5個(gè)。其次,這就是一種想告訴別人“我其實(shí)是很牛 X的”。如果萬(wàn)一別人問(wèn)到的,就是你列出的那十幾個(gè)技術(shù)中最弱的那一個(gè),而恰好面試官最強(qiáng)的就是這項(xiàng),后果可想而知。

    工作經(jīng)歷比較多的人當(dāng)中,還有一部分的是有創(chuàng)業(yè)經(jīng)歷的,我也可以分享一下。對(duì)于這種候選人,面試官最擔(dān)心的恐怕是“你的心很野”的問(wèn)題。因此,如果你能夠把你的人生規(guī)劃說(shuō)清楚,也許更能打動(dòng)面試官。此外,由創(chuàng)業(yè)經(jīng)驗(yàn)的人,一定不是平常人。不是平常人有兩種:一種是非常優(yōu)秀,只是暫時(shí)失敗;還有一種,就是想法偏執(zhí),其實(shí)運(yùn)氣再好,也就那樣。前者后者該如何寫簡(jiǎn)歷,我沒(méi)有什么可以分享的,因?yàn)槲疫€沒(méi)有仔細(xì)想過(guò)。但有一點(diǎn),無(wú)論前者后者,都是很重要的:就是要承認(rèn)你的失敗,同時(shí)還要總結(jié)原因。理由是,不承認(rèn)失敗的人,感覺(jué)不太踏實(shí),或者不太現(xiàn)實(shí);而沒(méi)有總結(jié)的人,有可能就是總結(jié)能力欠缺,或者從來(lái)不做總結(jié)。當(dāng)然,其實(shí)這些問(wèn)題有沒(méi)有創(chuàng)業(yè)經(jīng)歷的候選人,都有這種“維度”——即需要衡量的方面。但是有創(chuàng)業(yè)經(jīng)歷在簡(jiǎn)歷上,無(wú)疑就在提醒面試官這方面的問(wèn)題。你不解答這些問(wèn)題,如果面試官忘了問(wèn),那么這個(gè)困惑就會(huì)存在,你就很可能會(huì)被刷下來(lái)。我已有的案例中,就有一個(gè)我覺(jué)得個(gè)方面都不錯(cuò)的,結(jié)果上司擔(dān)心他干一段時(shí)間還會(huì)再次創(chuàng)業(yè),于是沒(méi)有考慮。

    最后,當(dāng)你面試的時(shí)候,一定要想辦法弄清楚面試官的困惑點(diǎn),要解答這些困惑點(diǎn),才能得到你想要的工作。當(dāng)然了,我上面說(shuō)的那些,都是假設(shè)你已經(jīng)比較有料的情況。如果你自覺(jué)能力不足,簡(jiǎn)歷再好,面試能力再?gòu)?qiáng),也是不能解救的,試用期必定暴露問(wèn)題。因此,能力不足的,首先補(bǔ)能力,這篇文章恐怕對(duì)你幫助不大。
    posted @ 2008-07-21 16:58 肖馬輝 閱讀(125) | 評(píng)論 (0)編輯 收藏
     

     

    DECLARE @t TABLE(ID char(3),PID char(3),Name nvarchar(10))
    INSERT @t SELECT '001',NULL ,'山東省'
    UNION ALL SELECT '002','001','煙臺(tái)市'
    UNION ALL SELECT '004','002','招遠(yuǎn)市'
    UNION ALL SELECT '003','001','青島市'
    UNION ALL SELECT '005',NULL ,'四會(huì)市'
    UNION ALL SELECT '006','005','清遠(yuǎn)市'
    UNION ALL SELECT '007','006','小分市'

    --深度排序顯示處理
    --生成每個(gè)節(jié)點(diǎn)的編碼累計(jì)(相同當(dāng)單編號(hào)法的編碼)
    DECLARE @t_Level TABLE(ID char(3),Level int,Sort varchar(8000))
    DECLARE @Level int
    SET @Level=0
    INSERT @t_Level SELECT ID,@Level,ID
    FROM @t
    WHERE PID IS NULL
    WHILE @@ROWCOUNT>0
    BEGIN
        SET @Level=@Level+1
        INSERT @t_Level SELECT a.ID,@Level,b.Sort+a.ID
        FROM @t a,@t_Level b
        WHERE a.PID=b.ID
            AND b.Level=@Level-1
    END

    --顯示結(jié)果
    SELECT SPACE(b.Level*2)+'|--'+a.Name
    FROM @t a,@t_Level b
    WHERE a.ID=b.ID
    ORDER BY b.Sort

    posted @ 2008-07-10 09:42 肖馬輝 閱讀(327) | 評(píng)論 (0)編輯 收藏
     
    Dim MyReg As RegExp

    Private Sub Form_Activate()
    Text1.SetFocus
    End Sub

    Private Sub Form_Load()
    Set MyReg = New RegExp
    MyReg.IgnoreCase = True
    MyReg.Pattern = "^[\w-\.]+@\w+\.\w+$"
    End Sub

    Private Sub Text1_LostFocus()
    If Not MyReg.Test(Text1) Then
    MsgBox "無(wú)效的輸入"
    Text1.SetFocus
    End If
    End Sub
    其中Pattern定義了輸入的有效性規(guī)則,表示在@之前允許輸入字母、下劃線、數(shù)字及連接符,在小數(shù)點(diǎn)前后只能輸入字母、數(shù)字及下劃線。

     
    posted @ 2008-07-07 17:41 肖馬輝 閱讀(660) | 評(píng)論 (0)編輯 收藏
    僅列出標(biāo)題
    共7頁(yè): 上一頁(yè) 1 2 3 4 5 6 7 下一頁(yè) 
     
    主站蜘蛛池模板: 亚洲国产高清在线| 亚洲国产精品无码久久久久久曰 | 免费a级毛片无码av| 亚洲AV无码AV日韩AV网站| 成人午夜大片免费7777| 亚洲国产欧洲综合997久久| 巨胸喷奶水视频www网免费| 亚洲av永久无码精品秋霞电影秋| 免费被黄网站在观看| 婷婷亚洲综合五月天小说在线| 国产成人aaa在线视频免费观看 | 亚洲AV成人一区二区三区AV| 一级毛片免费观看| 亚洲人成免费电影| 毛片a级毛片免费播放100| 亚洲AV综合永久无码精品天堂| 亚洲AV中文无码乱人伦| 两个人看的www免费高清| 亚洲AV日韩精品久久久久久 | 亚洲国色天香视频| 在线a人片天堂免费观看高清| 精品视频免费在线| 亚洲热妇无码AV在线播放| 老汉精品免费AV在线播放| 亚洲免费黄色网址| 国产一级特黄高清免费大片| 国产乱子伦精品免费视频| 亚洲视频在线播放| 免费的一级黄色片| 久久免费观看视频| 亚洲国产成人久久99精品| 国产精品久久免费视频| 久久嫩草影院免费看夜色| 亚洲日本国产乱码va在线观看| 午夜dj在线观看免费视频| 国产精品1024在线永久免费| 亚洲精品国产肉丝袜久久| 国产成人青青热久免费精品| 久久99免费视频| AV激情亚洲男人的天堂国语| 久久久无码精品亚洲日韩蜜桃 |