sybase 基本操作
資料庫技巧 2010-08-10 18:13:49 閱讀750 評論0 字号:大中小 訂閱
1. 用sybase身份安裝:CD20045-55-1252-01.tgz
建立sybase,家目錄在/opt/sybase,加密碼。解壓到/tmp/inst/。修改/etc/hosts:ip tank
擴大共享記憶體參數,在/etc/sysctl.conf裡配置,如:kernel.shmmax = 335544320 ,然後執行sysctl -p指令使之生效。
2.用sybase登入,啟動xwindow,運作/tmp/inst/setup進行圖形安裝。
或者,用sybase登陸,執行/tmp/inst/setup -console進行文本界面安裝。
安裝過程中如果無法建立庫,則設定:export LD_POINTER_GUARD=0 後再建庫。
3。檢視SYBASE服務指令:
$showserver
4. 停止sybase服務:
$isql -Usa -STANK
>shutdown SYB_BACKUP --->停backupserver
>go
>shutdown ------->停dataserver
>go
>quit
5. 啟動sybase服務:
$cd ~ASE_125/install/
$startserver -f RUN_TANK
$startserver -f RUN_TANK_BS
$showserver
安裝 FOR WIN
類似一般程式安裝;在WIN服務管理裡設定啟動。
win下的SYBASE用戶端sql advantage和dsedit等無法啟動(本機LAN原因)解決方法:
修改本機 X:/sybase/locales/locales檔案裡NT選項的locale = zh_CN, us_english, iso_1,加入本機LAN即可(如zh_CN)
常用操作:
1.su - sybase -c "isql -Usa -STANK"
2.修改SA的密碼 (SA預設密碼為空):
用ISQL連接配接上後
sp_password null,"新密碼" or sp_password "舊密碼","新密碼"
3.開始和确認事務(注意:有些指令不可以在事務裡運作,見附錄)
begin transaction和commit transaction可将任意數目的SQL語句封裝起來,這兩名的簡單文法為:
begin transaction
commit transaction
or
begin tran
commit
ps:隻有執行了commit資料才是真正寫入庫裡。
4. 回退事務
在commit transaction指令送出前任何時候可取消或回退事務,該指令的簡單文法為:
rollback transaction
or
rollback
5.檢查事務狀态
全局變量@@transtate記錄了事務目前的狀态。在執行一個語句後SQL Server通過記錄所有事務變化來确定傳回何種狀态。
@@transtate可包含下列值:
值 意義
0事務進行中:一個顯式或隐式事務有效;上一語句執行成功
1事務完成:事務完成并送出其變化
2語句異常中止:上一語句異常終止;對事務無影響
3事務異常中止:事務異常中止并回退所有變化
舉例:在事務中,可在一個語句(如insert)後使用@@transtate确定該語句成功或失敗對事務的影響。commit transaction
Begin transaction
Insert into publishers(pub_id)values(‘9999’)
(1 row affected)
select @@transtate
…………………
commit transaction
select @@transtate
…………………
(1 row affected)
6.備份系統資料
SYBASE 系統的備份與恢複機制保證了在系統失敗時重新擷取資料的可能性。SQL Server 提供了兩種不同類型的恢複機制:一類是系統自動完成的恢複,這種措施在每次系統啟動時都自動進行,保證了在系統癱瘓前完成的事務都寫到資料庫裝置上,而未完成的事務都被回退;另一類是人工完成的恢複,這是通過 DUMP 和 LOAD 指令來執行人工備份和恢複工作。是以定期備份事務日志和資料庫是一項十分重要的日常維護工作。
7、備份資料庫
每一個資料庫都應在建立之後卸出,進而提供一個裝入基點。在此之後按排定的時間周期表卸出。比如每周五卸出資料庫。對一般資料庫系統卸出資料庫周期建議為每周一次。
除了按計劃周期卸出資料庫之外,還需在每次運作沒有日志的操作後卸出資料庫。例如:
·每次強制地運作了 DUMP TRAN WITH NO_LOG (因為資料庫的磁盤空溢出);
·每次用 sp_dboption 允許 select into/bulkcopy 做快速拷貝,或用 SELECT INTO 指令建立一個永久性的表,或使用了 WRITETEXT 指令。
卸出資料庫的指令為:
DUMP DATABASE database_name
TO dump_device
database_name 是要卸出的資料庫名稱,dump_device 是卸出裝置的名稱。用系統過程 sp_helpdevice 可以獲得裝置的資訊。
下面一條指令用來卸出資料庫 my_db :
DUMP DATABASE my_db
TO db_bk_dev
預設導出到 C:/WINDOWS/SYSTEM32/下了。也可以指定路徑。
8、備份事務日志
如果事務日志與資料庫放在同一個裝置上,則事務日志不應與資料庫分開備份。master 資料庫和小于 4M 的使用者資料庫就是這種情況。一般資料庫系統的資料庫和日志分别放在不同的裝置上,是以,可以用 DUMP TRAN 指令單獨備份日志。
備份事務日志的周期直接影響資料的恢複程度,是以建議每天備份。
備份事務日志的指令格式為:
DUMP TRANsaction database_name
[TO dump_device]
[WITH TRUNCATE_ONLY|WITH NO_LOG|WITH NO_TRUNCATE]
其中 database_name 是要備份事務的資料庫名稱,dump_device 是備份裝置名稱,僅當包含了 WITH TRUNCATE_ONLY 或 WITH NO_LOG 子句時,才可以備份到裝置。
注意:如果總是用 DUMP DATEBASE (備份資料庫及其日志),而不用 DUMP TRAN ,事務日志将不會重新整理,而變得非常龐大。
對于 master 資料庫和小型資料庫每次運作 DUMP DATEBASE 之後應當運作 DUMP TRANsaction 指令重新整理日志 。
下面一條指令備份資料庫 db160 的事務日志到備份裝置上:
DUMP TRANsaction db160
TO db_log_bk_dev
WITH TRUNCATE_ONLY
9、備份資料庫及其日志間的互相作用
在至少卸出一次資料庫前,卸出事務日志是毫無意義的。下圖顯示了備份資料庫及其日志間的關系
如果在星期二下午5:01出現非硬體故障,需要做的所有工作是裝入錄音帶5(參見下一節:資料恢複),由于錄音帶5是下午5:00剛備份的,是以隻有備份和裝入之間的一分鐘内的資料損失。
但是,如果在星期二下午4:49失效會怎麼樣呢?在這種情況下,要裝入錄音帶1(在星期五下午5:00的卸出)。然後,依次裝入錄音帶2,3以及 4。這樣,系統将恢複到星期二上午10:00點的狀态,星期二的大部分工作丢失了。此例顯示了經常卸出事務的重要性。
10、萬一系統失敗時恢複資料庫系統
如果使用者資料庫存儲的裝置失效,進而資料庫被破壞或不可存取,通過裝入最新的資料庫備份以及後來的事務日志備份可以恢複資料庫。假設目前的事務日志存在于一個并沒有毀壞的裝置上,帶着 WITH NO_TRUNCATE 選項的 DUMP TRANsaction 指令卸出它。
要恢複資料庫按如下步驟去做:
1)、如果日志存在于一個分離的裝置上,用帶着 NO_TRUNCATE 選項的 DUMP TRANsaction 指令卸出被毀壞的或者不可存取的使用者資料庫事務日志。
2)、用下面的查詢檢查裝置配置設定已毀壞資料庫的裝置使用情況。必須為同一目的賦同樣的空間塊。
下面的查詢顯示了配置設定給資料庫 mydb 裝置使用和尺寸情況:
SELECT segmap,size FROM sysusages
WHERE dbid =
( SELECT dbid FROM sysdatabases WHERE name = “mydb”)
3)、檢查查詢的輸出。在 segmap 列的 ‘3’代表資料配置設定,‘4’代表日志配置設定。size 列代表 2K 資料塊的數目。注意此資訊的次序、使用和尺寸部分。例如,輸出為:
4)、用 DROP DATABASE 指令删除毀壞裝置上的資料庫。如果系統報錯,用DBCC DBREPAIR 指令的 DROPDB 選項。
5)、删除資料庫後,用 sp_dropdevice 删除毀壞了的裝置。
6)、用 DISK INIT 初始化新的資料庫裝置。
7)、重建資料庫。用 CREATE DATABASE 指令從老的 sysusages 表拷貝所有的行,并包含第一邏輯裝置。
對上例,指令為:
CREATE DATABASE mydb
ON datadev1=20,datadev2=10
LOG ON logdev1=10
8)、用 ALTER DATABASE 指令重建其餘入口。在此例中,在datadev1上配置設定更多的空間,指令為:
ALTER DATABASE mydb ON datadev1=2
9)、用 LOAD DATABASE 重新裝入資料庫,然後用 LOAD TRAN 裝入前面卸出的日志。
LOAD DATABASE 指令文法是:
LOAD DATABASE database_name
FROM dump_device
LOAD TRANsaction 指令的文法是:
LOAD TRANsaction database_name FROM dump_device
卸出資料庫和事務日志的預設權限歸資料庫所有者,且可以傳遞給其他使用者;裝載資料庫和事務的權限也歸資料庫所有者,但不能傳遞。
11、産生使用者資訊表,并為資訊表授權;
系統維護人員的另一個日常事務是為使用者建立新的資訊表,并為之授權。建立表以及為表授權的方法已經在講過,在此隻将有關指令文法寫出來。
·建立表的指令為:
CREATE TABLE table_name
( column_1 datatype [NULL | NOT NULL | IDENTITY],
column_2 ……
)
go
ALTER TABLE table_name
ADD PRIMARY KEY (column_list)
go
·删除表的指令格式為:
DROP TABLE table_name
go
· 為表授權的指令格式為:
GRANT {ALL|permission_list}
ON table_name TO user_name
go
· 收回權限的指令格式為
REVOKE {ALL|permission_list}
ON table_name FROM user_name
go
12、監視系統運作狀況,及時處理系統錯誤;
系統管理者的另一項日常工作是監視系統運作情況。主要有以下幾個方面:
1)、監視目前使用者以及程序的資訊
使用系統過程:sp_who
說明:該指令顯示目前系統所有注冊使用者及程序資訊,如下表是某系統的資訊。
SpidStatusLoginamehostnameblkdbnamecmd
---------------------------------------------------------------
1RunningSascosysv0MasterSELECT
2SleepingNULL0MasterNETWORK HANDLE
3SleepingNULL0MasterDEADLOCK TUNE
4SleepingNULL0MasterMIRROR HANDLER
5SleepingNULL0MasterHOUSEKEEPER
6SleepingNULL0MasterCHECKPOINT SLEEP
從左向右依次顯示:程序号、目前狀态、注冊使用者名、主機名、占用塊數、資料庫名以及目前指令。
如果監視時發現程序總數接近最大連接配接數(用系統過程:sp_configure “user conn” 檢視)時,應下掉不活動或無關程序,以保證系統正常運做;另外亦可監視非法使用者或使用者使用不屬于自己使用範圍的資料庫等情況。
2)、監視目标占用空間情況
使用系統過程:sp_spaceused
說明:該過程顯示行數、資料頁數以及目前資料庫中由某個目标或所有目标所占用的空間。如下表是某資料庫日志表的資訊:
NameRow_totalreserveddataIndex_sizeunused
------------------------------------------------------------
SyslogsNot avail32KB32KB0KBNot avail
日常要監視的主要目标有:使用者資料庫、資料庫日志表(syslogs)以及計費原始資料表等。如果發現占用空間過大,對日志表要進行轉儲;對其他目标則應擴充空間或清楚垃圾資料。
3)、監視 SQL Server 統計數字
使用系統過程:sp_monitor
說明:sp_monitor 顯示SQL Server 的曆史統計數字,下表是某系統的統計數字:
Last_runCurrent_runSeconds
---------------------------------------------------------------
May 13 2000 1:27PMMay 13 2000 3:01PM5678
CPU_busyIO_busyIdle
---------------------------------------------------------------
16(6)-0%0(0)-0%5727(5672)-99%
Packets_receivedPackets_sentPacket_errors
---------------------------------------------------------------
21(17)100(97)0(0)
Total_readTotal_writeTotal_errorsConnections
--------------------------------------------------------
785(366)311(113)0(0)3(2)
上表依次給出該系統本次運作統計的上一次時間、本次時間、間隔秒數、CPU占用、IO占用、收發包情況、系統讀入寫出情況等資訊
13、保證系統資料安全,周期更改使用者密碼;
為保證系統資料的安全,系統管理者必須依據系統的實際情況,執行一系列的安全保障措施。其中,周期性的更改使用者密碼是比較常用且十分有效的措施。
更改使用者密碼是通過調用系統過程sp_password 來實作的。Sp_password 的文法為:
sp_password caller_password,new_password [,loginame]
其中caller_password 是登入密碼(老密碼),new_password是新密碼,loginame是登入名稱。
14.如何修改IP位址改變後的 interfaces檔案?
A.安裝SYBASE Adapive Server的機器IP位址改變後, 應修改 interfaces 檔案及有關的設定。
如果 interfaces 檔案中使用的是機器名而不是 IP 位址, 則不需要變動。 但如果用戶端聯結伺服器使
用的是伺服器的 IP 位址而不是機器名,那麼用戶端需修改聯結伺服器的 IP 位址.。
如果 interfaces 檔案中使用的是 IP 位址, 那麼需要修改 interfaces 檔案中和位址有關的部分,
可使用dscp 或 dsedit 進行修改。 如果用戶端聯結伺服器使用的是伺服器的位址而不是機器名,那麼客
戶端也需修改。
15。實作開機時自動裝載Sybase資料庫
原先要使Sybase SQL Server啟動,一般需要先以sybase使用者登入,然後運作$SYBASE/install目錄下的startserver指令啟動 SYBASE_XXXX服務程序和SYB_BACKUP_XXXX備份服務程序。
要實作Unix系統啟動時就能在背景裝載Sybase的功能,我們可在/etc/rc2.d/目錄下建立一檔案S99sybase,内容如下:
SYBASE=/usr/sybase
PATH=$PATH:$SYBASE/bin
export $SYBASE $PATH
$SYBASE/install/startserver -f $SYBASE/install/RUN_SYBASE_XXXX > /dev/null
$SYBASE/install/startserver -f $SYBASE/install/RUN_SYB_BACKUP_XXX >/dev/null
然後修改Sybase的權限,重新開機系統即可。
16.實作關機時自動解除安裝Sybase資料庫
為保證Sybase系統的正常運作,每次在關閉Unix系統時要先結束 Sybase SQL Server 的服務程序,從減輕系統管理人員操作的角度出發建立一使用者halt,修改/etc/passwd檔案,将halt使用者的uid改為0(或其他可運作 shutdown的使用者id),在/usr/halt/.profile中添加以下語句:
SYBASE=/usr/sybase
DSQUERY=SYBASE_XXXX
PATH=$PATH:$SYBASE/bin
export SYBASE DSQUERY PATH
isql -Usa -Pabcabc -ihalt.sql > /dev/null
shutdown -y -g0
其中“abcabc”為sa使用者的密碼,halt.sql是一簡單的文本檔案,内容如下:
shutdown
go
這樣每次隻要以halt使用者登入,就實作了自動卸下Sybase資料庫,然後關閉Unix系統。
17. Sybase UTF-8中文字元集設定
(這裡SYBASE的安裝路徑為c:/sybase)
1.c:/>cd /sybase/charsets/cp936
2.c:/sybase/charsets/cp936> charset -U使用者名 -P密碼 -S資料庫伺服器名稱 binary.srt cp936
更改預設字元集為cp936
3.在SQL環境中
1>select name,id from syscharsets(會列出字元集對應的id号)
2>go
找到name為cp936對應的 id(假設為171)
1>sp_configure "default character set id",171
2>go
5.重新開機server兩次
(注:第一次啟動後,server會自動宕掉,需要第二次重新開機後才能使用)
18. 建立使用者資料庫
若最大裝置檔案數太小,可以修改為大點的。
sp_configure 'number of devices',50 将最大裝置檔案數改為50個
go
以下通過一個建立資料庫的腳本說明建立資料庫的過程:
//建立資料庫裝置,裝置大小以頁(2K)為機關
disk init
name="test_dbdev",
physname="/home/bk/test_dbdev.dat",
vdevno=5,
size=10240
go
disk init
name="test_logdev",
physname="/home/bk/test_logdev.dat",
vdevno=6,
size=5120
go
// 建立資料庫TEST_DB,其大小為20M,日志大小為10M
create database TEST_DB
on test_dbdev=20
log on test_logdev=10
go
//打開資料庫
use TEST_DB
go
-----------
舉例說明:
DISK INIT
Name=’My_Device’,
Physname=’D:/database/My_device.dat’,
Vdevno=3
Size=5000
注釋:邏輯名、實體名、裝置虛拟号、裝置大小
------------------------
建立使用者資料庫
Create Database 資料庫名
On 裝置_1=Size_1,//機關:M
裝置_2=Size_2,
……
log on 日志裝置=Log_Size
[With Override]//在同一裝置上建立資料庫和事務日志時使用該選項
[For Load] //禁止使用者通路直到資料庫的裝入或恢複操作完成為止
舉例:
Create Database test_db
On data_dev=100,//機關:M
Index_dev=50
Log on log_dev=30
說明:
(1)将日志放在單獨的裝置上,有利于資料庫性能的提高;
(2)如果将資料庫和日志放在同一裝置上,就不能實作增量備份;
(3)通常将System和Default段縮減範圍到一個裝置上,如删除裝置Index_dev上的System段和Default段,建立新的段,用來存放專門的資料庫對象
19.備份和恢複DB資料
dump database mydb to '/u01/mydb_full.bk'
go
dump tranaction mydb to '/u01/mydb_tran.bk'
go
load database mydb from '/u01/mydb_full.bk'
load transaction mydb from '/u01/mydb_tran.bk'
online database mydb
go
ps:采用增量備份後,嚴禁日志截斷! 即禁止使用:dump transaction sctf truncate_only 指令!
增量備份必須是在完整備份後的或上一次增量備份後,中間若遇到日志截斷,後續的增量備份均告失敗!
增量備份可以根據需要,如每小時備份一次,每次備份所需時間約2-5秒,是以時間極快。
ps: 單引号和雙引号都能關閉shell對特殊字元的處理。不同的是,雙引号沒有單引号嚴格,單引号關閉所有有特殊作用的字元,而雙引号隻要求shell忽略大多數,具體的說,就是①美元符号②反引号③反斜杠,這3種特殊字元不被忽略。 不忽略美元符号意味着shell在雙引号内部也進行變量名替換。
*********************************************
下面資料來自SYBASE白皮書
1。用戶端字元集修改 locales.dat
2.可以通過設定CHARSET驅動程式屬性指定在應用程式中使用的字元集。
或者設定jconnect字元集的方法來設定。
3。檢視字元集:
SERVER:sp_helpsort
go
CLIENT:select @@client_csname
go
4.段+閥值:
預設是三個段: system default logsegment
system段: 資料庫系統表存放處
default段: 未指明段的對象都存放在這裡
logsegment 段:資料庫的事務日志存放處
閥值(threshold) :
建立閥值: sp_addthreshold 庫名,段名,自由空間,存儲過程名字
删除閥值: sp_dropthreshold 庫名,段名,自由空間頁
顯示閥值: sp_helpthreshold
管理閥值: sp_dboption
顯示段空間資訊:sp_helpsegment
閥值管理的流程如下:
先建存儲過程:(下面的是日志的存儲過程,原因:日志增長具有不可預見性,相比之下,資料增長具有可預見性,是以一般都建 logsegment的閥值管理,default的閥值管理可不建)
create procedure szjj
@dbname varchar (30),
@segmentname varchar (30),
@space_left int,
@status int
as
dump transaction @dbname to "/tmp/bb.dat"
go
ps:上面是日志的存儲過程,如果是資料的存儲則用dump database...
檢視目前日志自由空間情況:
sp_helpsegment logsegment
go
檢視目前資料庫資料自由空間情況:
sp_helpsegment default
go
檢視目前閥值情況:
sp_helpthreshold
go
檢視目前段情況:
sp_helpsegment
go
然後根據自由空間來定閥值參數:
sp_addthreshold test_db,logsegment,200,szjj
go
ps: 當日志段的最後機會閥值被超越後,試圖往該日志段上記日志的使用者程序預設是被挂起.用下面的指令修改MASTER庫參數,讓閥值被超越後事務就會滾.
use master
go
sp_dboption test_db,"abort tran on log full",true
go
5. 維護
1)對各ASE使用者擔當的角色和特權進行分派。
2)管理和監視磁盤空間的使用情況。
3)資料庫空間:
sp_helpdb 檢視各庫情況
alter database 擴充空間
dump tran 截斷日志
4)日常資料備份和恢複
5)SYBASE預設的伺服器:
adaptive server:管理整個資料庫系統,包括使用者 資料 資源等的管理和控制。
backup server: 在備份和恢複時執行資料庫的dump or load
xp server:執行擴充存儲過程
monitor server:為性能調試分析采集資料。
historical server:儲存來自monitor server的資料,以備将來分析。
6。單模式啟動SYBASE
1)停止ASE資料庫服務
2)*/install/startserver -f RUN_servername -m
ps:windows下在服務的屬性裡加-m。
7.license序列号
驗證許可軟體是否執行:*/bin/lmutil lmstat -c
手工啟動:*/bin/lmgrd -c $lm_license_file&
啟動許可管理器:*/bin/lmgr
運作:*/bin/lmutil lmreread
備注:SYBASE安裝後注冊步驟:
用sybase使用者登陸
$ /opt/sybase/SYSAM-1_0/bin/startd.sh $SYBASE/SYSAM-1_0
$ cd /opt/sybase/SYSAM-1_0
$ lmgr
輸入:
? 序列号
? 功能名
? 功能計數
? 軟體版本
? 授權代碼
Adaptive Server 軟體包中提供的認證資訊,列印在“Sybase 軟體資
産管理認證”中。
輸入了全部許可證以後,單擊“完成”!
檢驗軟體是否在運作:
當lmgrd 守護程式啟動時,它将自動啟動SYBASE守護程式。要檢驗許可
證管理軟體是否運作在系統上。使用:
$SYBASE/SYSAM-1_0/bin/lmutil lmstat -c
繼續安裝或啟動 Adaptive Server 前,先确認 lmgrd 和 SYBASE 在運作,
即“up”。
注意:為了保證系統啟動時啟動SySAM(Sybase 軟體資産管理器)許可機制
在:/etc/rc.d/rc.local中加入:
/opt/sybase/SYSAM-1_0/bin/startd.sh /opt/sybase/SYSAM-1_0
8.檢視邏輯頁大小
select @@maxpagesize
9.啟動關閉SYBASE
啟動:*/startserver -f RUN_servername
關閉:登入後shutdown關資料庫服務 shutdown SYB_BACKUP關備份伺服器
10。帳戶管理
SA帳戶初始密碼為空,具有SA和SSO角色。具有SSO的登入帳戶可以添加其他登入帳戶。
1)建立登入帳戶
sp_addlogin login_name使用者名,password密碼 [,defdb預設庫] [,deflanguage傳回提示資訊用的預設語言] [,fullname全名] [,passwdexp密碼有效期] [,minpwdlen最小密碼長度] [,maxfailedlogins最大嘗試次數] [,auth_mech??]
go
2) 修改帳戶密碼
sp_password caller_password(舊密碼,空密碼為NULL),new_password新密碼 [,login_name登入名,immediate是否立即生效(0 or 1,預設為1,立即生效)]
go
3)sp_modifylogin login_name登入名,待修改選項,選項新值
如:sp_modifylogin login_name,"defdb",db_name
go
4)鎖定登入使用者
sp_locklogin loginname 'lock'|'unlock'
go
5)顯示目前所有鎖定登入使用者
sp_locklogin
go
6)檢視登入使用者的登入屬性
sp_displaylogin [loginname]
go
7)删除登入使用者
sp_droplogin loginname
注意:下列情況下不能删除登入名
該登入名仍是某庫使用者
該登入名是最後一個管理者或安全員使用者
該登入名連線狀态
8)授予或者撤銷系統角色
注意:|系統角色有三個 sa_role系統管理者 sso_role系統安全員 oper_role備份管理者
|自定義角色任意了。
sp_role "grant"|“revoke",role_name,login_name
go
9)顯示登入使用者被授予的角色
sp_displayroles user_login_name
go
10)建立資料庫使用者組(類似OS裡的使用者組,友善管理使用者權限)
sp_addgroup groupname
go
sp_helpgroup [groupname]
go
注意:ASE預設組每個庫中都有個 public組,除此之外使用者可以自行建組。
改變資料庫使用者的組:
sp_changegroup grpname新組名,name_in_db使用者庫名
go
删除組:
sp_dropgroup grpname
go
11)建立資料庫使用者
sp_adduser loginname使用者名 [,name_in_db預設與登入名相同[,grpname所屬組]]
go
預設情況下是誰建庫誰就是屬主,但一般是SA建庫再賦給别的使用者。改變某庫的屬主:
sp_changedbowner loginname [,true]
go
注意:系統庫不可改變屬主;新屬主原來不能有庫;有也行,先sp_dropuser or sp_dropalias删再賦。
檢視資料庫使用者資訊:
sp_helpuser [name_in_db]
go
删除資料庫使用者:
sp_dropuser name_in_db
go
建删别名(即同一個庫使用者,它有多個登入名)
sp_addalias loginname登入名,name_in_db
go
sp_dropalias loginname [,force]
go
登入使用者相關系統表: master庫的syslogins表
資料庫使用者相關系統表: 個庫的sysusers表
系統中我是誰: select suser_id('登入名')
庫中我是誰: select suser_id('name_in_db')
獲得使用者統計資訊: sp_reportstats
清零使用者統計資訊: sp_clearstats
12)授權資料庫使用者
grant {all |command_list} to {public|name_list| role_name}
revoke {all |command_list} from {public|name_list| role_name}
查詢授權表: select * from sysprotects
13) 找回SA密碼
停止SYBASE服務--〉修改RUN_xxx,在指令行的最後加上-psa--〉startserver -f RUN_xxx-->啟動資訊的最後會出來密碼。
11。資料庫管理
1)資料庫選項的設定
sp_dboption[dbname,optname,{,true|false}]
2)建庫
create database dbname on data_device_name=size log on log_device_name=size
go
ps:size default is M
3)檢視庫大小 sp_helpdb dbname
4)改變庫的屬主 sp_changedbowner loginname[,true]
5)擴充資料庫
擴充資料空間:alter database db_name on device_name=容量
擴充日志空間: alter database db_name log on device_name=容量
6) 設定資料庫為單使用者模式/可以在使用者表中自動添加序号生成器/自動截斷事務日志模式
use master
go
sp_dboption db_name,"signle user",true
go
sp_dboption db_name,"trunc log on chkpt",true
go
sp_dboption db_name,"auto identity",true
use db_name
go
checkpoint
go
7)檢視目前庫的程序資訊
sp_who
附錄=====================================
Explanation
SQL commands are grouped into the following categories:
SQL commands that are not allowed in transactions at all.
SQL commands, such as Data Definition Language (DDL) commands, that are allowed in transactions only if the required database option (ddl in tran) is set to TRUE.
SQL commands that are allowed only if the transaction affects some other database. These commands include create table, drop table, and other commands that are run across databases to create or drop objects in another database when the database in which the objects are being created or dropped has the database option ddl in tran set to TRUE.
Error 226 occurs when Adaptive Server detects a command that is not allowed in a multi-statement transaction. A multi-statement transaction is a set of commands prefaced with the begin transaction command.
The following commands are never allowed in multi-statement transactions:
alter database
create database
dbcc reindex, dbcc fix_text
disk init
drop database
dump database, dump transaction
load database, load transaction
select into
set transaction isolation level
truncate table
update statistics
setuser
The following commands are not normally allowed in multi-statement transactions but you can use them if you use sp_dboption to set ddl in tran to TRUE first:
create default
create index
create procedure
create rule
create schema
create table
create trigger
create view
drop default
drop index
drop procedure
drop rule
drop table
drop trigger
drop view
grant
revoke
Action
If the command is allowed in a multistatement transaction when ddl in tran is set to TRUE, set ddl in tran to TRUE before running the transaction. Setting ddl in tran to TRUE causes locks on system tables and this can affect performance. You can check the current setting of ddl in tran with sp_helpdb.
If the command is never allowed in a multi-statement transaction, execute it outside the multi-statement transaction.
===================================================
1 資料庫安裝的優化
1.1 應用資料庫使用裸裝置
若在UNIX(UNIXWARE)作業系統下安裝資料庫伺服器,請将SYBASE應用資料庫的裝置(device)安裝成裸裝置。即在建立應用資料庫裝置(如:IVSP,DB160,NAP2000等)時用裸裝置,把檔案名指向 /dev/dsk/ 子目錄下的相應檔案。系統資料庫裝置(如:master等)仍然指向檔案系統。
1.2 更新檔程式
完成SYBASE資料庫的安裝,請注意原版的SYBASE軟體都會帶有最新的更新檔,一定要把更新檔打上,否則會出現一些莫名其妙的問題。FOR NT 版的更新檔是一個ZIP檔案,解壓至C:/SYBASE子目錄即可。
1.3 安裝 SYBASE 線上幫助
在安裝好 SYBASE 後,在安裝目錄下有一檔案:../scripts/ins_syn_sql,在伺服器上執行該腳本:
Sybase for Unix版: ./isql -Usa -P -i../scripts/ins_syn_sql
Sybase for Winnt版: isql -Usa -P -i/sybase/scripts/ins_syn_sql
執行完畢後,即可在任意的 SYBASE 用戶端上連接配接上 SQL SERVER ,線上取得任意指令的幫助:
sp_syntax "關鍵字"
如: sp_syntax "alter" 即可列出所有包含"alter"字元的指令
注意:如果執行“./isql -Usa -P -i../scripts/ins_syn_sql”時提示“There is not enough room in the default devices to create the sybsyntax”,則需先用disk init..指令擴個實體裝置并用create database sybsyntax on在這個實體裝置上建立sybsyntax庫,然後再執行導入語句。
2 資料庫配置的優化
2.1 優化master資料庫
首先加大master裝置空間,初始預設為30M,加大為150M。然後加大master資料庫空間,預設資料段和日志段各為5M大小,建議改為資料段100M,日志段50M。
alter database master on master=95
2.2 優化tempdb資料庫
首先建立tempdb裝置,配置設定給tempdb資料庫,預設tempdb資料庫資料段和日志段各為2M大小,并建立在 master裝置上,建議改為資料段200M,日志段50M,建立在tempdb裝置上。
alter database tempdb on tempdb=200
SQL SEVRER所有使用者都共享工作表和臨時表的tempdb資料庫,tempdb主要瓶頸是磁盤I/0。解決辦法是把tempdb放在更快的裝置上。在 UNIX環境中,把tempdb放在檔案系統中而不用原始的裝置。由于tempdb在建立資料時,自動在master裝置上建立為2M的資料庫,為了減少沖突,最好的辦法是把tempdb從master裝置中移走。為了達到上述目的,可采用如下辦法實作:
1:在單使用者狀态下啟動SQL SERVER
啟動單使用者方法:dataserver -dmaster.dat -m
2:以sa登入
3:在檔案系統中建立一個啞資料庫。
4:删除sysusages和 sysdatabase表中對現有tempdb資料庫的引用
5:擷取啞資料庫的資料庫ID,相應修改sysusages和 ysdatabase表對tempdb的引用
6:重新啟動資料庫
以在newdevice中建立200M的 tempdb資料庫為例,執行過程如下:
create database newtemp on newdevice=200
go
begin tran
go
delete sysusages where dbid = 2
delete sysdatabases where dbid = 2
go
select dbid from sysdatabases where name = ‘newtemp’
go
update sysusages set dbid = 2 where dbid=10
update sysdatabases set name=’tempdb’,dbid=2 where name=’newtemp’
go
select name,dbid, from sysdatabases where name = ‘tempdb’
select * from sysusages where dbid = 2
go
commit tran
go
這種方法隻對tempdb有效,其他資料庫不能采用這種方法。因為在SQL SERVER啟動時,tempdb每次都重新初始化。
2.3 優化系統參數
2.3.1. SYBASE 系統參數調整
0. 鎖
sp_configure "lock scheme" , 1,"datarows" 系統預設為表級鎖,優化為行鎖
sp_configure "number of locks" , 10000 加大最大鎖程序數, 預設為5000。(如果設定一個已經存在的表(tabel)的鎖方式為行鎖,則執行:alter table table_name lock datarows)
1.記憶體
sp_configure "max memory", 100000 優化資料庫的記憶體,應根據不同機器配置設定, 建議為一半的實體記憶體大小。以db_block為機關,即每個機關為2k,上例為200M,預設為24M.
sp_configure "allocate max shared mem",1 啟動的時候自動配置設定max memory指定的最大記憶體
sp_cacheconfig "default data cache","1500m" 設定資料緩存(設定為max memory的一半)
sp_cacheconfig "default data cache","cache_partition=2" 是CPU數量的倍數,對資料緩沖區分區
sp_poolconfig "default data cache","64m","16k" 設定16K 資料緩存
sp_poolconfig "default data cache","128m","8k" 設定8K 資料緩存
sp_configure "procedure cache size",90000 存儲過程資料緩存sp_cacheconfig 'tempdb_cache','200m','mixed' 建立命名高速緩存sp_bindcache 'tempdb_cache',tempdb 捆綁臨時資料庫到tempdb_cache高速緩存
2.cpu
sp_configure "number of engines at startup",1 啟動時使用CPU數量
3. 網絡
sp_configure "default network packet size",2048 設定網絡傳送包的大小(重新開機動生效)
sp_configure "max network packet size",2048
4. 其他資源使用
sp_configure "number of locks",100000 鎖使用數量
sp_configure "number of open indexes",5000 打開索引
sp_configure "number of open objects",5000 打開對象
sp_configure "number of user connections",1000 使用者連接配接數
sp_configure "number of device",100 建立裝置最大數量
sp_configure "number of open databases",20 最大打開資料庫個數,對于需在一台資料庫服務上打個多個資料庫則需加大此參數,預設為15
2.3.2. sybase 裝置調整
資料裝置與日志裝置必須分開,添加臨時資料庫裝置
1. 資料裝置
sp_deviceattr devname,"dsync",true
2. 日志裝置
sp_deviceattr devname,"dsync",false
3. 臨時資料庫裝置
sp_deviceattr devname,"dsync",false
2.3.3. sybase 資料結構調整
1. 資料庫對象表、索引。。
(1)對表建立合理的索引,定期分析表
update statistics tabname (不鎖表)
(2)整理資料庫空間 (鎖表,剩餘空間必須為最大表的1.2倍)
reorg rebuild tabname
recreate clustered index
(3)重新編譯存儲過程與觸發器
sp_recompile usertable (與表相關聯的存儲過程和觸發器)
2.3.4. sybase 資料庫監控
1. 資料庫死程序
select * from master..syslogshold
2.3.5. sybase 資料庫啟動參數
-T3607 master
-T3608 其他資料
Startserver –f run_filename –m 單使用者啟動
如果上述參數改動後SYBASE啟動不正常,則可檢查SYBASE的錯誤日志,把SYBASE.cfg中的相應選項修改為較小的值。
附:SYBASE SQL SERVER 記憶體的配置設定
1. SQL SERVER 可執行代碼 3-4M
2. SQL SERVER 使用的靜态記憶體 2.2-3.25M
3. 使用者可配置的參數所占用記憶體,以下示例(11.9.2版):
預設值 占用記憶體
使用者連接配接數(user connections) 25 每個 約70k
打開的資料庫數(open database) 12 每個 約60k
打開的對象數(open objects) 500 每個 約1k
打開的索引數(open indexs) 500 每個 約1k
鎖數目(locks) 5000 每個 約0.1k
資料庫裝置數(data device) 10 每個 約0.5k
4. 剩餘部份配置設定給
過程緩存 ( 由 procedure cache percent 決定,預設值為 20% )
資料緩存 ( 預設值為減去1、2、3項的 80% )
2.4 優化資料庫系統屬性
在sybase center中選擇資料庫屬性,将屬性中options選項中的下列項目選中。
allow select into/bulk copy
truncate log on checkpoint
checkpoint on recovery
abort transction on full log
free space accounting
allow nulls by default
auto identity column in non-unquie index
方法二:在SQLPLUS中執行下列SQL腳本
如:
sp_dboption mydb,"abort tran on log full",true(設定當資料庫的日志空間滿時,就終止該程序,使用 sa 使用者)
sp_dboption mydb," select into/bulkcopy ",true
sp_dboption mydb," trunc log on chkpt ",true
sp_dboption mydb," no chkpt on recovery",true
sp_dboption mydb," no free space acctg ",true
sp_dboption mydb,"allow nulls by default",true
??sp_dboption mydb," auto identity dbo use only ",true
2.5 建立 門檻值存儲過程
可根據不同的應用修改以下腳本或建立多個 門檻值存儲過程,并在配置 門檻值時指定相應的存儲過程。
create procedure sp_thresholdaction
@dbname varchar(30),@segmentname varchar(30), @free_space int,@status int
as dump transaction @dbname with no_log
print "LOG DUMP: '%1!' for '%2!' dumped",@segmentname,@dbname
go
2.6 配置多個 門檻值
方法一:
打開 Sybase Central,輕按兩下相應資料庫(database)的段 Segments ->; logsegment,在 Thresholds 頁面中可設定自動清除日志的閥值。其中有 Last Chance 的一行是系統預設的最後機會閥值,即系統日志空閑空間小于該值時為最後一次自動清除日志的機會。設定時閥值的大小可設為日志總空間大小的20%左右。
另外再增加多個 門檻值。
方法二:
1、使用如下指令查出資料庫中日志的容量(用頁表示)
select sum(size) from master..sysusages where dbid=db_id("database_name") and (segmap&4)=4
2、使用sp_addthreshold增加新的 門檻值,大小為日志容量的50%,如上面語句顯示值為2048
sp_addthreshold database_name,logsegment,1024,proc_dump_display
注意:因一個大事務時可能會越過目前的 threshold,是以必須加多個threshold,
使用指令select @@thresh_hysteresis檢視資料庫的滞後值,如結果為64頁,則下一個 門檻值設為"最近的 門檻值-(2*64)",請在所設 門檻值再按這種原則各增加兩個更小的 門檻值。
3 索引的優化
在良好的資料庫設計基礎上,需高效地使用索引,并經常的維護索引,下文介紹關于索引的相關内容。
3.1 建立索引
索引分為三類:聚簇索引(clustered indexes)、非聚簇索引(nonclustered indexes)、覆寫索引(covering indexes)
鑒于索引加快了查詢速度,但減慢了資料更新速度的特點。可通過在一個段上建表,而在另一個段上建其非聚簇索引,而這兩段分别在單獨的實體裝置上來改善操作性能。
create [unique][clustered|nonclustered] index index_name on table_name(column_name...)
3.2 重建索引
随着資料行的插入、删除和資料頁的分裂,有些索引頁可能隻包含幾頁資料,另外應用在執行大塊I/O的時候,重建非聚簇索引可以降低分片,維護大塊I/O的效率。重建索引實際上是重新組織B-樹空間。在下面情況下需要重建索引:
(1)、資料和使用模式大幅度變化。
(2)、排序的順序發生改變。
(3)、要進行大量插入操作或已經完成。
(4)、使用大塊I/O的查詢的磁盤讀次數比預料的要多。
(5)、由于大量資料修改,使得資料頁和索引頁沒有充分使用而導緻空間的使用超出估算。
(6)、dbcc檢查出索引有問題。
當重建聚簇索引時,這張表的所有非聚簇索引将被重建.
3.3 索引統計資訊的更新
當在一個包含資料的表上建立索引的時候,SQL Server會建立分布資料頁來存放有關索引的兩種統計資訊:分布表和密度表。優化器利用這個頁來判斷該索引對某個特定查詢是否有用。但這個統計資訊并不動态地重新計算。這意味着,當表的資料改變之後,統計資訊有可能是過時的,進而影響優化器追求最有工作的目标。是以,在下面情況下應該運作update statistics指令:
(1)、資料行的插入和删除修改了資料的分布。
(2)、對用truncate table删除資料的表上增加資料行。
(3)、修改索引列的值。
4 查詢優化
4.1 NOT IN子句
不知大家是否喜歡使用‘NOT IN’這樣的操作,如果是,那盡量使用(NOT) EXISTS 替代。
例子:
語句1
SELECT dname, deptno FROM dept WHERE deptno NOT IN (SELECT deptno FROM emp);
語句2
SELECT dname, deptno FROM dept WHERE NOT EXISTS (SELECT deptno FROM emp WHERE dept.deptno = emp.deptno);
明顯的,2要比1的執行性能好很多,因為1中對emp進行了full table scan,這是很浪費時間的操作。而且1中沒有用到emp的index,因為沒有where子句。而2中的語句對emp進行的是range scan。
4.2 海量查詢
在海量查詢時盡量少用格式轉換。
如用
WHERE a.order_no = b.order_no
而不用
WHERE TO_NUMBER (substr(a.order_no, instr(b.order_no, '.') - 1)= TO_NUMBER (substr(a.order_no, instr(b.order_no, '.') - 1)
3)查詢海量資料是可以使用 optimizer hints,例如
如
SELECT E.ENAME FROM EMP E WHERE E.JOB = 'CLERK';
而不是
SELECT E.ENAME FROM EMP E WHERE E.JOB || '' = 'CLERK';
4。3
sybase 查詢前10條記錄:
set rowcount 10 select * from tables2 where set rowcount 0
4。4
|
4。5
強行斷開使用者連接配接
1.sp_who
找到pid
2. kill pid
殺不需要連接配接使用者的pid
轉自:http://lancelill.blog.163.com/blog/static/19671716201071061349440/