安裝:FRO LINUX
1.用sybase身份安裝:CD20045-55-1252-01.tgz
建立sybase,家目錄在/opt/sybase,加密碼。解壓到/tmp/inst/。修改/etc/hosts:ip tank
2.用sybase登錄,啟動xwindow,運行/tmp/inst/setup進行圖形安裝。
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
…………………
0
commit transaction
select @@transtate
…………………
0
(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.創建用戶數據庫
以下通過一個建立數據庫的腳本說明建立數據庫的過程:
//創建數據庫設備,設備大小以頁(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
8.查看邏輯頁大小
select @@maxpagesize
9.啟動關閉SYBASE
啟動:*/startserver -f RUN_servername
關閉:登錄后shutdown關數據庫服務 shutdown SYB_BACKUP關備份服務器
10。帳戶管理
SA帳戶初始口令為空,具有SA和SSO角色。具有SSO的登錄帳戶可以添加其他登錄帳戶。
1)創建登錄帳戶
sp_addlogin login_name,password
go
2)修改帳戶密碼
sp_password caller_password,new_password,login_name
go
3)設置登錄帳戶的缺省數據庫(如果不指定,默認是master庫)
sp_addlogin login_name,password,default_db
go
or
sp_modifylogin login_name,"defdb",db_name
go
4)為登錄帳戶授予系統角色
sp_role "grant",role_name,login_name
go
or
grant role role_name to login_name
go
5)查看登錄帳戶的信息
sp_displaylogin login_name
go
6)SYBASE常用角色:sa sso oper
7)修改登錄密碼
sp_password caller_passwd,new_passwd[,login_name]
8)刪除sa_role的口令
alter role sa_role drop passwd
9)創建數據庫用戶
sp_adduser loginname[,name_in_db[,grpname]]
go
10)添加用戶并授予查詢權限
sp_adduser 權限 on 表名 to 用戶名
11)刪除別名
sp_dropalias loginname
12)創建用戶自定義組
sp_addgroup grpname
go
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.