1. 程式人生 > >SYBASE鎖型別與常用命令

SYBASE鎖型別與常用命令

alter table f_action_hist lock datarows

查殺鎖

-------------------------------------------------
sp_who
sp_lock 156
kill 156

dbcc traceon(3604)是把dbcc的結果輸出到螢幕上。
dbcc sqltext(pid)是看指定的sybase程序的操作語句。
pid是用sp_who sp_lock看到的sybase程序。

-------------------------------------------------
LockType列
-------------------------------------------------

sh_intent是意向鎖 sh_page共享頁面鎖

  Sh--共享鎖       Ex--獨佔鎖 
  table或intent---鎖發生在表 
  page---鎖發生在頁 
  row----鎖發生在行 
  blk----表明這個程序正在阻塞另一個需要獲取一個鎖的程序,一旦這個程序處理完成,其他程序就可   以繼續處理了 
  demand---表明這個程序正在試圖獲取一個鎖

常用的命令集合
一、配置命令
   1、檢查CPU使用情況:
      sp_sysmon "internal","model"
      internal是監視時間。例如:"00:01:00"
      model是模組的名稱。包括 'kernel','wpm','parallel','taskmgmt','appmgmt','esp','housekeeper','monaccess','xactsum','xactmgmt','indexmgmt','mdcache','locks','dcache','pcache','memory','recovery','diskio','netio'


   2、檢查使用的最大的引擎數(CPU)
      sp_configure "max online engines"
      此命令還可以改變sybase系統使用CPU的數量。
      注意:改變後需要重新啟動sybase才可以使培植生效。引擎的數量是總的CPU數量減一

   3、顯示引擎號、狀態、相關任務數以及引擎啟動的時間:
      select engine, status, affinitied, starttime from sysengines

   4、顯示每個使用者的繁忙程度
      sp_reportstats

   5、監視配置引數的執行情況
      sp_monitorconfig "open objects"

      引數見sp_monitorconfig中的值

二、許可權命令
   1、給一個使用者授所有的許可權
      grant all to user_name

   2、給一個使用者授對某張表的所有許可權
      grant all on table_name to user_name

   3、新增一個登入(login)
      sp_addlogin

三、TSQL使用
   1、統計資訊更新
      select "print '"+name+"'"+char(10)+"update statistics "+name+ char(10) + "go"
        from sysobjects
       where (type='U' or type='S')
       order by name

   2、顯示所有觸發器的名稱、建立時間
      SELECT USER_NAME(A.uid) 'Table Owner',
             B.name 'Table Name',
             A.name 'Trigger Name',
             CONVERT(char(10),A.crdate,101)+SUBSTRING(CONVERT(char(20),A.crdate,0),13,7) 'Create Date'
      FROM sysobjects A,
           sysobjects B
      WHERE A.type='TR'
        AND (A.id=B.instrig OR A.id=B.updtrig OR A.id=B.deltrig)

   3、關於參照
      --生成建立已有參照的SQL語句
      select distinct result_sql='alter table '+rtrim(object_name(tableid))+' add constraint '
      +rtrim(object_name(constrid))+' foreign key('+
      +col_name(sysreferences.tableid,sysreferences.fokey1)+substring(',',1,sysreferences.fokey2)
      +col_name(sysreferences.tableid,sysreferences.fokey2)+substring(',',1,sysreferences.fokey3)
      +col_name(sysreferences.tableid,sysreferences.fokey3)+substring(',',1,sysreferences.fokey4)
      +col_name(sysreferences.tableid,sysreferences.fokey4)+substring(',',1,sysreferences.fokey5)
      +col_name(sysreferences.tableid,sysreferences.fokey5)+substring(',',1,sysreferences.fokey6)
      +col_name(sysreferences.tableid,sysreferences.fokey6)+substring(',',1,sysreferences.fokey7)
      +col_name(sysreferences.tableid,sysreferences.fokey7)+') '
      +'references '+rtrim(object_name(reftabid))+'('
      +col_name(sysreferences.reftabid,sysreferences.refkey1)+substring(',',1,sysreferences.refkey2)
      +col_name(sysreferences.reftabid,sysreferences.refkey2)+substring(',',1,sysreferences.refkey3)
      +col_name(sysreferences.reftabid,sysreferences.refkey3)+substring(',',1,sysreferences.refkey4)
      +col_name(sysreferences.reftabid,sysreferences.refkey4)+substring(',',1,sysreferences.refkey5)
      +col_name(sysreferences.reftabid,sysreferences.refkey5)+substring(',',1,sysreferences.refkey6)
      +col_name(sysreferences.reftabid,sysreferences.refkey6)+substring(',',1,sysreferences.refkey7)
      +col_name(sysreferences.reftabid,sysreferences.refkey7)+')'
      +char(10)+"go"
       from sysreferences,syscolumns,sysobjects
      where sysreferences.tableid=sysobjects.id
        and sysobjects.id=syscolumns.id
        and sysobjects.type='U'
      order by sysobjects.name
      go
      --生成刪除參照的SQL語句
      select distinct result_sql='alter table '+rtrim(object_name(sysreferences.tableid))+' drop constraint '+rtrim(object_name(sysreferences.constrid))+char(10)+"go"
        from sysreferences,syscolumns,sysobjects
       where sysreferences.tableid=sysobjects.id
         and sysobjects.id=syscolumns.id
         and sysobjects.type='U'
       order by object_name(sysreferences.tableid)
      go

   4、關於表級鎖
      --列出所有鎖型別為行鎖的表
      select name
        from sysobjects
       where type='U'
         and sysstat2 & 57344 = 32768
         and name not like "XT%"
       order by name

      --調優的方法有:調整鎖型別,調整表的聚簇索引
      --調整表鎖型別為行鎖,可以提高對錶的併發訪問效能,但是同時也會佔用更多的系統資源
      --修改行鎖的SQL語句:alter table [table_name] lock [datarows|allpages]
      --
      --調整表的聚簇索引在資料插入時,降低對錶的最後一頁的爭用
      --Sybase規定一張表只能有一個聚簇索引,所以在調整聚簇索引時,要先刪除原有的聚簇索引,然後再建立新的
      --例如將SB_ZSXX表的在ZSXH上聚簇索引修改為在NSRSBH上的聚簇索引.
      --刪除原聚簇索引PK_SB_ZSXX
      drop index SB_ZSXX.PK_SB_ZSXX
      go
      create  nonclustered index PK_SB_ZSXX on SB_ZSXX(ZSXH)
      go
      -- 建立IDX_SB_ZSXX_NSRSBH的聚簇索引
      drop index SB_ZSXX.IDX_SB_ZSXX_NSRSBH
      go
      create  clustered index IDX_SB_ZSXX_NSRSBH on SB_ZSXX(NSRSBH)
      go
      --以上的索引資訊可以用sp_help命令列出

   5、求出指定欄位等於指定值的記錄數
      declare @lc_colname varchar(30)
      --declare @lc_colvalue /*定義欲求值的變數,隨著變數的型別定義不同的值*/
      --取包含指定列名的表
      select distinct name=object_name(id) into #AA from syscolumns where name = @lc_colname
      --生成SQL,求出指定欄位等於指定值的記錄數
      select "insert into #BB select tname='"+name+"',cnt=count(*) from "+name+" where " + @lc_colname + "='" + @lc_colvalue + "'"+char(10)+"go"
        from #AA
      --執行SQL
      --檢查記錄不為零的表,既為求出的表
      select * from #BB where cnt>0

   6、列出所有無主鍵的表
      select name from sysobjects
       where name not in (
                           SELECT object_name(id)
                           FROM   sysindexes
                           WHERE  indid > 0
                                  AND status2 & 2 = 2
                                  and status & 2048 = 2048
                         )
       and type="U"
     order by name

   7、關於使用者登入
      --鎖定使用者
      select "sp_locklogin "+name+",'lock'"+char(10)+"go"
        from syslogins
       where name not like "%prim%"
         and name not like "%maint%"
         and name not like "sa"
       order by name

       --解除鎖定的使用者
       select "sp_locklogin "+name+",'unlock'"+char(10)+"go"
        from syslogins
       where name not like "%prim%"
         and name not like "%maint%"
         and name not like "sa"
       order by name
   8、為ctais_maint授權
      select "grant all on "+name+" to ctais_maint"+char(10)+"go" from sysobjects where type="U"

   9、整理出欄位型別有text和image的表
      --text型別
      select distinct name=object_name(id)
        from syscolumns
       where type=35
         and id in (select id from sysobjects where type="U")
       order by object_name(id)

      --image型別
      select distinct name=object_name(id)
        from syscolumns
       where type=34
         and id in (select id from sysobjects where type="U")
       order by object_name(id)

   10、修改identity列的最大值
      --設定包含identity列的表為可直接插入記錄
      set identity_insert [table] [on|off]
      --插入一個比較大的值
      insert into [table] values([value])