程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SyBase數據庫 >> SyBase綜合文章 >> sybase問題整理

sybase問題整理

編輯:SyBase綜合文章
search論壇時,發現以前好多不錯的討論都沒了
所以粗略整理了一下,建議大家在浏覽本壇時,將不錯的貼子留下



1) 關於定事備份
http://www.chinaunix.Net/cgi-bin/bbs/topic.CGI?forum=10&topic=1233&show=390
crontab 中可以這樣寫:
00 23 * * * /sybase/ASE-12_0/bin/DUMPDB.sh >>/Sybase/ASE-12_0/install/DUMPDB.out

放那裡都無所謂,一個dumpdb.sh的例子:
#SUN Solaris 8
#!/bin/ksh
export SYBASE=/Sybase
export Sybase_FTS=FTS-12_0
export PATH=/sybase/ASE-12_0/bin:/sybase/OCS-12_0/bin:$PATH:/Sybase/ASE-12_0/install:/usr/sbin
export Sybase_OCS=OCS-12_0
export Sybase_ASE=ASE-12_0
export LM_LICENSE_FILE=/Sybase/SYSAM-1_0/licenses/license.dat:$LM_LICENSE_FILE
export LD_LIBRARY_PATH=/sybase/ASE-12_0/lib:/usr/local/openwin/lib:/sybase/FTS-12_0/lib:/sybase/OCS-12_0/lib:/usr/local/openwin/lib:/usr/lib:/Sybase/SQLRemote/lib:$LD_LIBRARY_PATH
export Sybase_SYSAM=SYSAM-1_0
export HOME=$Sybase
$SYBASE_OCS/bin/isql -Usa -SSybase -P <dump database YOURDBNAME to "/sybdump/dump.01"
stripe on "/sybdump/dump.02"
stripe on "/sybdump/dump.03"
stripe on "/sybdump/dump.04"
stripe on "/sybdump/dump.05"
go
!
這裡是一個典型的腳本,用於實現full備份!
#!/usr/bin/sh
# *************************************************************************
#for full backup after excuted dbcc Operation
# *************************************************************************
SHLIB_PATH=/opt/sybase/ASE-12_0/lib:/opt/sybase/FTS-12_0/lib:/opt/sybase/OCS-12_0/lib:/usr/lib:/lib:/usr/lib/Motif1.2:/opt/Sybase/SQLRemote/
lib
export SHLIB_PATH
Sybase_OCS=OCS-12_0
export Sybase_OCS
SYBASE=/opt/Sybase
export Sybase

ISQL="/opt/Sybase/OCS-12_0/bin"
ymd=`date +%y%m%d`
bk_user="unb"
bk_pwd="******"
bk_db="SYB_HP"
cd /Sybase/backup
mkdir $ymd
LOG="/Sybase/backup/$ymd"
echo $ymd >$LOG/backup.log
echo "\n11*************************" >>$LOG/backup.log
echo "Check database $bk_db..." >>$LOG/backup.log
d1=`date`
su - Sybase -c "isql -SSYB_HP -Usa -P****** <$LOG/dbcc-$ymd.log 2>&1
dbcc traceon(3604)
go
dbcc checkdb($bk_db)<br />go
dbcc traceoff(3604)
go
DBCC
echo $d1,`date` >>$LOG/backup.log
echo "\n22*************************" >>$LOG/backup.log
d1=`date`
dump_file="/Sybase/backup/$dump-unb-full-$ymd.dat"
echo "Dump database $bk_db to " $dump_file >>$LOG/backup.log
su - Sybase -c "isql -SSYB_HP -Usa -P****** <$LOG/dump-$ymd.log 2>&1
dump database $bk_db to "$dump_file"
go
DUMP
echo $d1,`date` >>$LOG/backup.log
echo "\n33*************************" >>$LOG/backup.log
請根據自身系統,調試後再使用!
至於備份日志的腳本與此類似,自己根據Sybase的相關語法,稍加變動即可!





2) 有個關於游標的問題,請教各位大蝦 
http://www.chinaunix.Net/cgi-bin/bbs/topic.CGI?forum=10&topic=429&sho
您正在看的sybase教程是:Sybase問題整理。w=390
在Sybase數據庫中用游標操作完表a的記錄後,關閉close游標,在free游標。但接著想drop此表a,結果失敗,顯示的錯誤信息是"游標在使用"(記得不是很清楚了,大概是這個意思)。
請碰到過這類問題的大蝦支持支持。在informix和Oracle中釋放游標是用free,在Sybase也是用free嗎?

Sybase 中正確操作游標的順序是:
1、DECLARE CUR_ACCTINFO CURSOR FOR SELECT ..... (定義)
2、OPEN CUR_ACCTINFO (打開)

3、WHILE @@SQLSTATUS = 0 (判斷是否成功)
BEGIN

4、 FETCH CUR_ACCTINFO INTO ....... (取數據)
IF @@SQLSTATUS <> 0
begin
......
end
...........
5、 CLOSE CUR_ACCTINFO (關閉)
6、 DEALLOCATE CURSOR CUR_ACCTINFO (釋放)



3) 在Sybase中有沒有進行數據類型轉換的函數 
http://www.chinaunix.Net/cgi-bin/bbs/topic.CGI?forum=10&topic=1346&show=330

四捨五入用round,如round(123.4567,1)=123.5或round(123.4567,0)=123或round(123.67,0)=124
去尾用floor,如floor(123.4567)=123
進尾用ceiling,如ceiling(123.4567)=124


4) 新手問題:為什麼我的Sybase的RUN_BACKUP老是自己DOWN啊!?
http://www.chinaunix.Net/cgi-bin/bbs/topic.CGI?forum=10&topic=1335&show=330
為什麼我的Sybase的RUN_BACKUP老是自己DOWN啊!?
我用NetTerm登陸運行,但只要一退出NetTerm,BACKUP就自己DOWN了
加&運行也不行,怎麼辦啊?


命令前加nohup 試試

那是因為你的backup進程是以你的登錄用戶起動的,所以當該用戶退出unix時,
進程也跟著退出操作系統了

5) 什麼是BYPASS RECOVERY mode? 
http://www.chinaunix.Net/cgi-bin/bbs/topic.CGI?forum=10&topic=1371&show=300


>在客戶端出現提示:
Attempt to BEGIN TRANsaction in database "****" failed because database is in BYPASS RECOVERY mode.
請問如何解決?



select name,status from master..sysdatabases where db_name="你所說的數據庫"
看status是否是-32768 ,若是,sysdatabases系統表相應記錄的status字段改為0,reboot數據庫服務器就可以了。

謝謝各位,問題已解決。中午去Sybase網站查找到有關這個問題的詳細信息,包括問題成因及解決辦法:
Error 3908
Severity
16
Error Message

Attempt to BEGIN TRANsaction in database '%.*s' failed because database is in BYPASS RECOVERY mode.
Explanation
Adaptive Server can start various types of transactions such as local (in response to a local command), internal (for the server's own use), external (started by an external clIEnt like a TP Monitor) and subordinate (child transactions started by a parent transaction in parallel).
Bypass recovery starts Adaptive Server without recovering one or more databases. A&n


您正在看的sybase教程是:Sybase問題整理。bsp;database in this mode can be accessed even though it is not recovered. You use this mode to allow Access to the database for problem analysis, to copy out data, and so on.
Error 3908 is raised when a transaction is attempted while the database is in bypass recovery. Although certain commands are permissible in this mode, no transactions - regardless of type - can be started when the database is in bypass recovery.
Error 3908 is raised in the following states:



State Meaning
1 Attempted to start a transaction when the database is not available for update. ApplIEs to all possible transaction types.
2 Attempted to start a subordinate transaction when the database is not available for update.
Action
Do not attempt to start a transaction while the database is in bypass recovery. Check if any automated jobs may have submitted a batch job that attempted such a transaction. First restore the database to the original working status it had (prior to bypass status) before attempting any transactions.
Use the following steps to reset the database status:
Note Although a status of zero is usually appropriate, it is not the only possible status value you can use. Reset the database to the actual, normal status it had prior to entering bypass recovery status.

1. Reset the database status to 0:
1> sp_configure "allow updates", 1
2> go
1> begin tran
2> go
1> use master
2> go
1> update sysdatabases set status=0 where name=
2> go
Check that the above update command affected only one row (if more than one row was affected, issue a rollback transaction.) Then commit the transaction and shut down Adaptive Server as follows:
1>commit tran
2>go
1>shutdown with nowait
2>go
2. Restart Adaptive Server. Run dbcc checkdb and dbcc checkalloc on the affected database to make sure there are no errors.
Version in Which This Error is Raised
All versions.
再次謝謝aladdin,freebob,changing。
6) 數據庫表BCP出來報錯 
http://www.chinaunix.Net/cgi-bin/bbs/topic.CGI?forum=10&topic=1326&show=300
數據庫表BCP出來報錯
DB-LIBRARY error
I/O error while writing bcp data-file
bcp出來的文件正好2GB,實際應該更大。
操作系統SCO&
您正在看的sybase教程是:sybase問題整理。nbsp;OpenServer5.0.4, Sybase 11.0.3
請問是何原因?謝謝。
當在後備數據量大於2GB的數據庫時,可能會遇到以下錯誤:
I/Oerror:
Operating system error,server device /backup/data. code 27 messages
file too large.
  這是由於後備文件的大小超出了操作系統的用戶最大文件限制。而有些操作系統不支持大於2GB的文件,這時可以使用Backup Server將一個數據庫後備到多個文件中。
  1>dump database pubs2 to "/usr/Sybase/pubs2_dump.1"
  2>stripe on "/usr/Sybase/pubs2_dump.2"
  3>stripe on "/usr/Sybase/pubs2_dump.3"
  4>go
  這種方法還可以提高後備及恢復的速度,但注意恢復也必須用相應多的設備。例如:
  1>load database pubs2 from "/usr/Sybase/pubs2_dump.1"
  2>stripe on "/usr/Sybase/pubs2_dump.2"
  3>stripe on "/usr/Sybase/pubs2_dump.3"
  4>go

7) Sybase的sa口令丟失怎樣恢復? 
http://www.chinaunix.Net/cgi-bin/bbs/topic.CGI?forum=10&topic=1239&show=270
在RUN-SERVER文件中加入一行-psa,重起dataserver,在控制台上可以看見新的口令
http://www.powerba.com/develop/database/Sybase/article/20010505001.htm

Sybase表中如何刪掉多條相同的記錄? 
http://www.chinaunix.Net/cgi-bin/bbs/topic.CGI?forum=10&topic=1438&start=0&show=180
Sybase表中如何刪掉多條相同的記錄?
由於表出問題,將沒有進行處理的*.txt文件bcp到表中,其中含有大量的重復記錄。
請問有沒有辦法將表中重復的記錄刪掉呢?

那好辦,那你就可以使用下面語句將唯一的記錄先插入到臨時表中:
select distinct a ,b,c,d ... into tempdb..tempdb_table from tablename
然後清空原表,把臨時表中的數據插入正式表中!
試試看

可以參考這種經典方法:
1---select * into tmp_tab from your_dup_tab where 1=2
2---若表無唯一性索引則建一個唯一性索引(一定能找到一個唯一性的索引建(復合索引))create unique index(列名1,列名2...) on tmp_tab with ignore_dup_key.
3----insert into tmp_tab from your_dup_tab
這樣在新表中將自動刪出重復記錄。但數據量過大請留意日志空間(sp_spaceused syslogs).
很使用的方法.try it!

9) 關於閥值
http://www.chinaunix.Net/cgi-bin/bbs/topic.CGI?forum=10&topic=1231&show=180
發告警或者水自動溢出,以保護系統不至於達到危險境界。對於數據庫而言,我們使用的存儲設備畢竟有限,如果任由數據或日志增長,數據或日志日久天長終將占用所有存儲設備,如果到了沒有空間的時候,系統將掛起,這樣業務將暫停。所以對於一些要求數據庫可用性很高的系統,必須保證在可預見的情況下數據段或者日志段不至於沒有空間!為做到這一點,傳統的數據庫一般都需要系統維護人員經常的定期的進行數據庫檢查,若數據段不夠了,轉儲一部分數據或者增加一些設備,若日志空間不夠了,轉儲日志!但這樣系統管理員就有點累了!
為減輕系統管理員的負擔,提高系統的自動化程度,Sybase提出了用閥值進行自動管理的這樣一種模式,只要在開始定義好各段的閥值,以及達到閥值後的處理存儲過程,就可以實現自動管理了!
不過,我先前也想這樣做,也研究了一陣子,但是後來還是放棄了這種懶惰的辦法。因為使用閥值管理可能出現一些意想不到的問題,什麼問題現在還沒想到,只是Sybase不推薦在大系統中這樣做!再加上本身系統有omni back備份軟件,何必自找麻煩呢!

10) 什麼Sybase安裝完後要增加TEMPDB的空間?
http://www.chinaunix.Net/cgi-bin/bbs/topic.CGI?forum=10&topic=1444&show=180
擴展後sp_helpdb tempdb看應改master設備上是data/log的
你use tempdb
sp_dropsegment 'default',tempdb,master
sp_dropsegment system,tempdb,master
sp_dropsegment logsegment,tempdb,master
後,
sp_helpdb tempdb
select db_name(dbid),segmap,lstart,size,vstart,pad,unreservedpgs
from sysusages
where dbid=2
貼出來
如果第一行中segmap為0,就ok


你們回答的什麼,驢唇不對馬嘴(呵呵,開玩笑)
一般情況下數據庫裝好之後,都要給tempdb增加空間,因為在用戶數據庫中的很多插入,刪除等操作需要用到tempdb數據庫作為臨時存儲空間,所以要增大他的空間,否則可能你的事務不能執行

http://www.chinaunix.Net/cgi-bin/bbs/topic.CGI?forum=10&topic=185&show=120

Sybase 臨時數據庫
缺省情況下,tempdb數據庫是放置在master設備上,容量為2M,而臨時數據庫是活動最為平凡的數據庫常常被用來排序、創建臨時表、重格式化等操作,所以tempdb的優化應該受到特別的關注。本篇文章目的在於使你掌握臨時數據庫的優化策略以及臨時表的優化使用。本文中,你將以調整臨時庫的位置開始,有步驟的完成臨時數據庫的優化,並在此過程中了解到優化臨時數據庫和臨時表的一些方法和規則。
實驗環境的要求:你應具有系統管理員的權限,系統中有auths和article表。
步驟:
第一步:調整臨時庫的位置
  tempdb數據庫缺省放在master設備上,將臨時數據庫發在分離的設備上是更可取的。
1) 初始化一個用來存放臨時數據庫的設備
disk init
name="tempdb_dev",
physname="d:\Sybase\example\tempdb.dat",
vdevno=13,
size=15360
(注意:如果將tempdb數據庫放在多個設備上,需初始化多個數據庫設備)
2)將臨時數據庫擴展到該一個設


您正在看的sybase教程是:Sybase問題整理。備上
alter database tempdb on tempdb_dev=30
3)打開tempdb數據庫,從段上刪除master設備
sp_dropsegment "default",tempdb,master
sp_dropsegment logsegment,tempdb,master
4)發出如下命令,檢查default段中是否不再包含master設備
select dbid,name,segmap from sysusages,sysdevices
where sysdevices.low<=syusages.size+vstart
and sysdevices.high>=sysusages.size+vstart-1
and dbid=2
and(status=2 or status=3)
說明:若將臨時數據庫放在多個磁盤設備上,可以更好的利用並行查詢特性來提高查詢性能。
第二步:將臨時數據庫與高速緩沖進行綁定。
  由於臨時表的創建、使用,臨時數據庫會頻繁地使用數據緩存,所以應為臨時數據庫創建高速緩存,從而可以使其常駐內存並有助於分散I/O:
1、創建命名高速緩存
sp_cacheconfig “tempdb_cache","10m","mixed"
2、重新啟動server
3、捆綁臨時數據庫到tempdb_cache高速緩存
sp_bindcache “tempdb_cache", tempdb
4、若有大的I/O,配置內存池
第三步:優化臨時表
大多數臨時表的使用是簡單的,很少需要優化。但需要對臨時表進行復雜的訪問則
應通過使用多個過程或批處理來把表的創建和索引分開。以下兩種技術可以改善臨時表的優化
slash; 在臨時表上創建索引
1) 臨時表必須存在
2) 統計頁必須存在(即不能在空表上創建索引)
slash; 把對臨時表的復雜的使用分散到多個批處理或過程中,以便為優化器提供信息
下面的這個過程需要進行優化:
create proc base_proc
as
select * into #huge_result from auths
select * from article, #huge_result where article.author_code=
#huge_result.author_code and sex="0"
使用兩個過程可以得到更好的性能
1)create proc base_proc
as
select *
into #huge_result
from auths
exec select_proc
2) create proc select_proc
as
select * from article,#huge_result
where article.author_code=#huge_result.author_code and sex="0"
說明:在同一個存儲過程或批處理中,創建並使用一個表時,查詢優化器無法決定這個表的大小。
結論:通過本實驗我們知道,臨時數據庫經過優化可以極大的提高系統性能。實際工作中,必須考慮具體應用的情況,需長時間經驗的積累。

11) 怎樣利用腳本自動關閉Sybase數據庫 
http://www.chinaunix.Net/cgi-bin/bbs/topic.CGI?forum=10&topic=1484&show=180
不知你什麼平台,如果是unix,ksh
#!/bin/ksh
LOGIN="`whoami`"
if [ "${LOGIN}" != "Sybase" ]; then
echo "`basename $0`: You should login as 'Sybase'\n"
exit 0
fi
echo "\n\n"
{
isql -Usa -P -Syourservername > /dev/null 2>&1 <use master
go
shutdown SYB_BACKUP
go
shutdown
go
ISQL
}

12) 請教存儲過程動態使用表 
http://www.chinaunix.Net/cgi-bin/bbs/topic.CGI?forum=10&topic=1488&show=180
你指動態sql
要12.0版本以上才支持
CREATE PROCEDURE dbo.mytt
(@c varchar(25))
AS
BEGIN
declare @cc varchar(25)
select @cc = "select * from " + @c
exec (@cc)
END

13) Sybase中的跨庫操作
http://www.chinaunix.Net/cgi-bin/bbs/topic.CGI?forum=10&topic=1489&show=150
假如本機server為loc_server,遠程server為re_server
在這兩個server 各自的interface文件裡都必須有定義
sp_configure "allow remote Access"是否為1;

在本機server上:
sp_addserver re_server
sp_addserver loc_server,LOCAL -這樣你select @@servername就有東西
在remote server 上:
sp_addserver loc_server
sp_addserver re_server,LOCAL
在2個server 上
sp_addremotelogin ......
檢查這兩個參數
number of remote sites
number of remote connections .
然後:


您正在看的sybase教程是:Sybase問題整理。如果isql從loc_server 到rs_server
connect to rs_server
disconnect
rs_server...sp_who在loc_server上執行rs_server 上的sp_who
http://www.chinaunix.Net/cgi-bin/bbs/topic.CGI?forum=10&topic=1560&start=15&show=90
這裡給你提供一篇這方面的資料:
如何實現兩個Sybase Adaptive Server之間的數據通信
在進行以Sybase作為後台數據庫的MIS系統開發時,經常會碰到需要在兩個Sybase Adaptive Server之間進行數據通信的問題。要解決這一問題通常由兩類方法:其一便是在前台來做;這種方法一般是通過建立多個事務,分別連接到不同的Server,在應用程序中通過編程實現數據的交換。這種方法的缺點在於可維護性差,還有一點是由於需要多個事務肯定也會影響效率。另外一類方法就是利用Sybase 的Transact SQL在後台來做。這類方法把數據的通信工作交給了SQL服務器自己去做。這種方法顯而易見的一種有點便是可維護性好,當業務發生變化或服務器設置改變時可以很少修改大部分情況是不用修改應用程序。下面舉一個簡單的例子來介紹一下如何利用Transact SQL在後台實現SQL服務器之間的數據通信。
---- 假設有兩台操作系統都是Windows NT的Sybase SQL服務器LocalServer、RemoteServer,兩者能夠相互訪問即應是通過網絡相連的;在LocalServer和RemoteServer上分別有數據庫LS_database和RS_database;在數據庫LS_database和RS_database裡分別有表LS_table和RS_table。
---- 假設現在業務規則是當LS_table更新時需要更新RS_table。
---- 要實現這種業務邏輯首先需要在RemoteServer的RS_database裡建立至少一個帶參數的存儲過程設為pro_upd_rst,用來更新RS_table;其次需要在表LS_table上建立三個觸發器:設為update_rst、delete_rst和insert_rst,在這些觸發器中調用RS_database中的存儲過程。即采用觸發器傳遞參數進行遠程存儲過程調用(Remote Procedure Calls)的技術來實現。當LS_table發生更新時觸發器update_rst、delete_rst和insert_rst中有一個會被觸發,通過臨時表inserted和deleted能夠得到更新的信息,賦給相應變量,傳遞參數給pro_upd_rst並調用之。
---- 需要提到的一點是Sybase數據庫的缺省安裝並沒有設置RPC,所以還要對LocalServer進行一些設置工作,這一點比較有必要強調尤其是對於初學者來說。這些設置工作主要有以下幾點:
運行LocalServer接口程序管理器Dsedit添加一個Server,Server Name設置為"RemoteServer"(可以是其他字符串),編輯Server Address,添加網絡協議和端口號,通常選擇TCP/IP協議,Network Address 設為"RemoteServer,5000",其中RemoteServer(這裡指的是該服務器在網絡中的機器名)可以用其IP地址來代替。試一試能否Ping通RemoteServer。Ping通後進行下面的工作。


在LocalServer添加一個遠程服務器,可以通過運行LocalServer的Sybase Central,打開LocalServer的"remote servers"文件夾,雙擊"Add Remote Server",在編輯框內輸入一個字符串設為"Remote_Local"(注意區分大小寫),在下面的下拉列表框中選擇"RemoteServer"(這是第1步中的Server Name),點擊下一步後在列表框中選擇"sql_server"完成。
重新設置LocalServer一些與RPC有關的參數,也可以通過Sybase Central。右鍵點擊LocalServer,單擊談出菜單的"configure",在下拉列表框種選擇"Component Integration Services",注意下面的兩個參數"cis rpc handling" 和 "enable cis",這兩個參數的缺省值都是"0",應該把它們都改為"1"。由於"enable cis"是靜態參數所以修改後需要重起數據庫才能生效。最後最好檢查一下RemoteServer的"enable remote Access"參數的值是否為"1"(缺省情況應該是"1"否則改為"1"。
---- 其中第1步可以通過編輯接口文件sql.ini(在Sybase根目錄的"ini"子目錄下)來代替,打開sql.ini在最後加入如下三行:
[RemoteServer] master=TCP,RemoteServer,5000 query= TCP,RemoteServer,5000
保存並關閉。
---- 第2、3步可以通過系統存儲過程"sp_configure"來代替,在SQL Advantage或isql中執行下列語句:
sp_addserver Remote_Local,null,RemoteServer
go sp_configure "enable cis",1 go sp_configure "cis rpc handling",1
go
---- LocalServer配置號以後應該測試一下,運行SQL Advantage或isql連接LocalServer執行下列語句"exec Remote_Local.master.dbo.sp_help",再次強調一點其中的Remote_Local區分大小寫。
---- 上面所舉的只是一個簡單的例子,只能在LocalServer上調用RemoteServer上的存儲過程,若要在RemoteServer調用上LocalServer上的存儲過程則要在RemoteServer進行同樣的設置(添加Remote Server、重新配置RemoteServer的參數等),並且要保證LocalServer的"enable remote Access"的值為"1"。



14) ASE在Windows xp/2000上安裝的二個注意的問題
http://www.chinaunix.Net/cgi-bin/bbs/topic.CGI?forum=10&topic=1522&show=150
本人近日在Windows xp上安裝Sybase ASE12.5開發版作學習之用。遇到了一點麻煩,現將解決辦法介紹給大家參考,如有還有類似的問題可聯系我:email: [email protected]
一、ASE12.4 在XP下中文亂碼解決辦法:
查看注冊表,在鍵:key_local_Machine\software\microsoft\Windows NT\CurrentVersion\CurrentVerison中,可知當前系統版本為5.1

進入Sybase源安裝目錄,查看run.bat文件,找到一行:set Java_HOME=.\shared-1_0\jre1.2.2


您正在看的sybase教程是:Sybase問題整理。,
然後進入: .\shared-1_0\jre1.2.2\lib目錄,將文件font.properties.zh.NT4.0的名稱改為font.propertIEs.zh.NT5.1即可。如果源目錄在光
盤上,將jre1.2.2目錄、run.bat文件拷到硬盤上,修改run.bat中的Java_HOME項,然後運行run.bat.

安裝後,基於中文的管理工具依然會出現亂嗎,按上面的方法更改%Sybase%\shared-1_0\jre1.2.2\lib中的font.propertIEs.zh.NT4.0文件
名。
一些Windows操作系統的版本號:
Windows9898
Windows nt4nt4.0
windwos 2000nt5.0
Windows xpnt5.1

二、網絡地址
安裝過程中,需要配置SQL Server和Sybase xp server的網絡地址。在安裝界面上,對網絡地址沒有什麼說明,如果輸入錯了,也沒什麼提
示。

它其實與協議類型有關,如果是TCP協議,它的構成為:機器名(或IP地址), 端口號。例如:myserver,9001 。在安裝後也可以用
“Dsedit"來編輯。網絡地址很重要,如果錯了,服務器無法啟動。
另:當啟動信息中含有:in module 'e:\rel12501\porttree\svr\sql\generic\ksource\strmio\n_winsock.c' 。不必為這句話迷惑,這是
Sybase程序的硬編碼輸出,與你的E盤有無此文件無關。
15) 關於數據庫鎖
http://www.chinaunix.Net/cgi-bin/bbs/topic.CGI?forum=10&topic=1118&show=120
Sybase 11.9以上的版本提供行級鎖。
鎖類型選擇的確是Sybase數據庫設計的一個需要重要考慮的問題!見大家討論的如此火熱,特上點干材支持一把,來點關於lock的借介紹性資料!

所支持的加鎖機制
2.1 全頁加鎖
  全頁加鎖既是一個新術語,它又是由ASE(Adaptive Server Enterprise)在過去所支持的一種加鎖類型。這種類型有下列特性:
對所有可被訪問的頁面在頁面級加鎖
當各種類型的頁面以任何方式發生改變時,對這些排它性的頁面進行加鎖;而且這種加鎖機制一直保持到該事務終止;
當下一個所需的頁面已經成功地獲得,對那些已經釋放的的當前訪問頁進行共享頁面加鎖(如果采用了第三層ANSI隔離,則把這種加鎖機制保持到該事務終止為止)
采用頁級時間印記(timestamp)以確定是否發生改變,詳細信息記錄在事務日志中,以便在系統恢復時以向前或向後方式使用。
  這種加鎖方式常常提供性能最高的解決方案,特別是當應用設計時已經考慮了這些特性時更是如此。但是,有一些應用系統,當發生某些活動時,這種對整個頁面進行加鎖的方式就可能會對系統性能產生有重大意義的影響。對於那些面對諸如文件系統或其它已經支持更細小尺度加鎖機制的數據庫廠家產品的一般環境而設計的應用系統而言,這種情況尤其如此。
  此外,還存在一系列問題,它們要圍繞著更加困難的條件進行工作。它們通常要采用更加具有Sybase特性的解決方案。對於商用的應用軟件制造廠商而言,對他們是一個挑戰,因為這將要求他們必須跨越他們所支持的數據庫平台,去完成維護其原代碼的工作,而這個工作有相當工作量。在這個領域的基本問題如下:
對已經按照升序值創建的非群聚性索引的最末端葉型頁面存在著爭議
對非群聚性索引的表進行插入和查詢時可能發生死鎖;
在按照群聚性的索引值進行更新和對非群聚性索引的表進行查詢訪問之間可能發生死鎖;
在沒有作索引的表的最後一行可能發生沖突(盡管對最後的特定地址可以使用分區) ;
有可能使行數很少的表之間發生潛在的沖突(盡管對特定的地址可以使用填充因子[ fillfactors]和每頁最大行數[ max_rows_per_page]這兩個參數)
對每個頁面兩邊進行加鎖的需要常常被分割開來;
如果一個表特別小,以致在一個單一頁面中進行駐留,那麼對單一行的訪問實際上將破壞對整個表的加鎖機制。
2.2 僅對數據加鎖
  僅對數據加鎖機制試圖去解決本文前一節所關注的主要問題(其他的議題將在其它功能領域中加以解決)。這種加鎖方式支持兩類不同的工作方式: 數據行加鎖和數據頁加鎖。在這兩種情況中,對於它們所支持的加鎖方式,都與以前的加鎖機制有所不同。僅對數據加鎖具有下列特性:
在索引頁面中不會破壞事務加鎖。相反,而是采用了一種稱之為鎖存的機制。鎖存是一種類似於旋轉鎖(spinlocks)的同步方法,它們與事務無關並且只保留很短的周期(一般而言,當一個任務在數據庫中物理上改變一小片數據時,這個周期相當於在共享存貯區中在一個2K的頁面改變某些字節數據的時間)一旦完成之後,這個任務將直接打開這個鎖存。當這種情況還可能臨時同其它組塊時 ,因為這種鎖存不能對服務器任務進行有上下文的切換,也不能涉及死鎖,並且只能保持主要的一小段時間,所以它們不能產生有顯著意義的爭用。
采用一個RID對單一行進行數據行加鎖(行標識[RID----Row ID]是邏輯頁號與所在頁面上該行號的組合);
支持固定的行標識 RIDs, 它可以是向前的,允許不進行其RID的改變,就完成數據行的移動。當一行變大超過了它的可用空間時,采用上述結果對非群聚索引不需要進行任何改變。
不需要進行任何爭用就可以在表的尾部進行插入操作,這一功能已經增加進來。.
支持采用范圍加鎖、下一個關鍵字加鎖和無限大加鎖等方式對邏輯范圍值進行加鎖
支持由最頂層操作所導致的頁面分割。這些情況直接加以提交,"系統"事務可以導致在更短一點的時間周期裡保持分裂的頁面處於鎖定狀態。
  為了支持這些變化,需要對采用的存貯表結構進行一系列改善。這些改進的主要效果如下:
群聚索引現在被存貯為象許多人所熟悉的IBM DB2產品所采用的"放置索引"("placement indexes.")方式。這種結構類似於非群聚性的索引,需要類似的空間總量。

這種修正的結構導致了在數據初始存貯時可以按照順序跨數據頁進行存儲,但是當發生插入時,它們就要盡可能緊密存放以便在正確的邏輯頁面中不存在頁面分割。此外,在數據頁中的數據順序在新行增加時是不進行維護整理的。這種索引的應用使每個群聚化的索引周游增加了一次I/O操作。
行位移表已經增加到索引頁和數據頁中。這種增加和新的行索引行存貯格式具有使每個索引頁面所存貯的索引條目個數減少的潛在能力。
固定行標識(RIDS)。當一行移動時,對於分配新行位置的向前地址被放在用於駐留該行的位置上。當這種移動需要改變非群聚性索引時,對該行的訪問需要增加一次I/O操作以得到'向前'的位置。
一般而言,索引將更小和更短,這是因為如下原因:
從每個葉級頁面中采用雙重鍵限制機制來限制雙重鍵(Duplicate key)例如,如果值"綠"("GREEN")在下列行標識(RIDs)值等於123-1,234-2,和345-3的行中, 就分別存貯值“綠”("GREEN"),123-1,234-2,345-3,而不是存貯值"綠"("GREEN,")三次。在每個索引頁中每個值只存貯一次。
在非群聚性索引樹的非葉型結點中將後綴實行壓縮(例如,如果鍵值是"GREEN"和"HAMILTON",而在這兩個值之間發生分裂,那麼就在非頁級索引頁面中存儲"G"和"H"sybase問題整理(圖一)
2.3 


您正在看的sybase教程是:Sybase問題整理。;數據頁和數據行加鎖
  只對數據加鎖機制支持兩種方式:數據頁加鎖和數據行加鎖。這些與它們的工作方式和所提供的功能相類似。這兩種方式僅在對數據訪問產生阻礙作用時,在加鎖的尺度上有所區別。在數據頁加鎖方式下再采用數據行加鎖方式具有兩種作用(一種起正向作用,另一種起反向作用)。首先,較小尺度加鎖機制的使用可能導致減少爭用與沖突,然而當大量數據發生變化時,就有可能對加鎖產生大量阻礙的情況發生。
2.4 特定使用的加鎖類型
  除非對配置參數加以特定,對所有的表都予置了隱含的全頁面加鎖機制。
sp_configure 'lock scheme', [allpages | datapages | datarows]
  當數據庫從原先版本的服務器中轉儲出來重新加載時,所有的表都被定義為全頁面加鎖的表。當建立一個新表時,可以不使用這個缺省值,可采用如下的句法格式:
create table … lock [allpages | datapages | datarows]
  為了在使用的一個表中改變加鎖類型,可以采用如下的句法格式:
alter table lock [allpages | datapages | datarows]
  在一個現存的表中改變加鎖方式,將引起下列三種行動後果發生:
首先,如果一張表從全頁加鎖轉變為僅對數據加鎖,或者從僅對數據加鎖轉變為全頁加鎖,在這兩種類型之間就要對表進行選擇以允許進行存貯格式改變。如果這是一個分區表,就要同時假定必要的並行級別和工作線程已經配置好的情況下,才能執行。
其次, 對表中的群聚性索引必須重新創建。因為我們能保證數據,所以如果從全頁加鎖方式轉換為只對數據加鎖時,這種重新創建可以通過"with sorted_data"來完成。然而,當從僅對數據加鎖機制轉換為全頁加鎖方式時,就要進行並行的索引創建操作。(請注意:如果這是一個分區表時,那麼並行等級和工作線程的數目必須加以配置才能允許進行這種改變,否則這種遷移將會失敗)
最後,非群聚性的索引將被重建,如果服務器已經為並行處理所加以配置,當進行本步驟時將加以采用。


  由於這些活動同潛在的工作量有關,從全頁加鎖機制改變為僅對數據加鎖或從僅對數據加鎖改變為全頁加鎖機制都可能是耗費時間的活動。為了標注這一點,有以下一些選擇:
如果可能的話,應該配置使用並行方式。這至少對執行非群聚性索引的哈斯(雜湊,即hashed)創建方法是必須的,但是如果可能的話,采用分區表和分區掃描將使系統得到更大的改進。
在選擇進入和創建群聚性的索引之後,該任務將被設置檢查點(checkpointed )所以,如果有充分的硬件資源,通過允許在任何一個時間點上,檢查點任務可以具有多於10個(系統缺省值)的異步I/O請求,利用dbcc進行調諧將能夠帶來有益的效果。('maxwritedes', number)
進一步作為降低使用檢查點成本的一種方法,在相關的高速緩沖池(cache pool)、大數據量的I/O操作中,采用對高淘汰程度進行標記的方法,並允許清潔程序(好象家庭主婦一樣)保持特別活躍的狀態,將為那些檢查點需要從高速緩沖池中刷新較"髒"的頁面的而增加的I/O操作次數,並因此花費了在檢查點上的時間,都能夠大大減少作出貢獻。
如果預先進行了配置,則可以對並行的選擇進入可以使用預先分配的盤區。所以,通過將sp_configure number of pre-allocated extents設置為16也將對系統性能有明顯的積極的效果。
  備注:在僅對數據加鎖類型之間進行改變不需要對數據進行備份, 而且執行起來只需很短的一段時間。
[以上為摘自Sybase公司站點上的資料]
據我個人使用經驗,我覺得對於並行性較高的應用要充分考慮使用行級鎖,這樣對於提高並發性能至關重要!當然,事務都存在利弊兩方面,使用行級鎖,也會帶來一些相應的弊端,比如使用的鎖越多,占用的內存也越多,在使用行級鎖的表上頻繁的進行數據刪除、插入操作久而久之會造成數據庫碎片的大量生成,數據庫性能會下降,這就需要定時進行reorg操作,但該操作比較耗時,且影響業務!
16) 請問!怎樣設置自動清log,和temp的閥值?
http://www.chinaunix.Net/cgi-bin/bbs/topic.CGI?forum=10&topic=1507&show=120

一般我們可以為某段設置多個閥值,但只需在達到最後機會閥值時作些空間清理的操作.
第一步,在你的數據庫中設置閥值,並指定達到閥值後的處理過程:
查看當前數據庫某段的最後機會閥值:
sp_helpthreshold "default"
或者察看其他段的信息。
修改某段的最後機會閥值:
sp_modifythreshold 數據庫名,段名,自由空間名,[新過程名[,新自由空間名[,新段名]]]
sp_modifythreshold mydb,"default",200,NULL,175
將最後機會閥值由200頁調整到175頁。
具體其他操作,可以參考相關手冊!
第二步,編寫閥值處理過程:
create procedure sp_thresholdaction
@dbname varchar(30),
@segmentname varchar(30),
@space_left int,
@status int
as
declare @SpaceLeft varchar(20),
@Status varchar(20)
select @SpaceLeft=str(@space_left,6,0)
select @Status=str(@status,6,0)
print "Log is dumpped('%1!' for '%2!',SpaceLeft:'%3!',Status:'%4)',
and is dumped.",@segmentname,@dbname,@SpaceLeft,@Status
dump transaction tempdb to with truncate_only
return

不過,我還是不建議用最後機會閥值來進行自動維護。



您正在看的sybase教程是:Sybase問題整理。17)

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved