不能停止

          運(yùn)動,游玩,學(xué)習(xí),我的愛不能停止

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            5 隨筆 :: 3 文章 :: 8 評論 :: 0 Trackbacks

          2005年10月26日 #

          數(shù)據(jù)庫日常維護(hù)工作是系統(tǒng)管理員的重要職責(zé)。其內(nèi)容主要包括以下幾個部分:

            一、備份系統(tǒng)數(shù)據(jù)

            sybase 系統(tǒng)的備份與恢復(fù)機(jī)制保證了在系統(tǒng)失敗時(shí)重新獲取數(shù)據(jù)的可能性。sql server 提供了兩種不同類型的恢復(fù)機(jī)制:一類是系統(tǒng)自動完成的恢復(fù),這種措施在每次系統(tǒng)啟動時(shí)都自動進(jìn)行,保證了在系統(tǒng)癱瘓前完成的事務(wù)都寫到數(shù)據(jù)庫設(shè)備上,而未完成的事務(wù)都被回退;另一類是人工完成的恢復(fù),這是通過 dump 和 load 命令來執(zhí)行人工備份和恢復(fù)工作。因此定期備份事務(wù)日志和數(shù)據(jù)庫是一項(xiàng)十分重要的日常維護(hù)工作。

            1、備份數(shù)據(jù)庫

            每一個數(shù)據(jù)庫都應(yīng)在創(chuàng)建之后卸出,從而提供一個裝入基點(diǎn)。在此之后按排定的時(shí)間周期表卸出。比如每周五卸出數(shù)據(jù)庫。對一般數(shù)據(jù)庫系統(tǒng)卸出數(shù)據(jù)庫周期建議為每周一次。

            除了按計(jì)劃周期卸出數(shù)據(jù)庫之外,還需在每次運(yùn)行沒有日志的操作后卸出數(shù)據(jù)庫。例如:

            ·每次強(qiáng)制地運(yùn)行了 dump tran with no_log (因?yàn)閿?shù)據(jù)庫的磁盤空溢出);

            ·每次用 sp_dboption 允許 select into/bulkcopy 做快速拷貝,或用 select into 命令創(chuàng)建一個永久性的表,或使用了 writetext 命令。

            卸出數(shù)據(jù)庫的命令為:

            dump database database_name

            to dump_device

            database_name 是要卸出的數(shù)據(jù)庫名稱,dump_device 是卸出設(shè)備的名稱。用系統(tǒng)過程 sp_helpdevice 可以獲得設(shè)備的信息。

            下面一條命令用來卸出數(shù)據(jù)庫 my_db :

            dump database my_db

            to db_bk_dev

            2、備份事務(wù)日志

            如果事務(wù)日志與數(shù)據(jù)庫放在同一個設(shè)備上,則事務(wù)日志不應(yīng)與數(shù)據(jù)庫分開備份。master 數(shù)據(jù)庫和小于 4m 的用戶數(shù)據(jù)庫就是這種情況。一般數(shù)據(jù)庫系統(tǒng)的數(shù)據(jù)庫和日志分別放在不同的設(shè)備上,因此,可以用 dump tran 命令單獨(dú)備份日志。

            備份事務(wù)日志的周期直接影響數(shù)據(jù)的恢復(fù)程度,因此建議每天備份。

            備份事務(wù)日志的命令格式為:

            dump transaction database_name

            [to dump_device]

            [with truncate_only|with no_log|with no_truncate]

            其中 database_name 是要備份事務(wù)的數(shù)據(jù)庫名稱,dump_device 是備份設(shè)備名稱,僅當(dāng)包含了 with truncate_only 或 with no_log 子句時(shí),才可以備份到設(shè)備。

            注意:如果總是用 dump datebase (備份數(shù)據(jù)庫及其日志),而不用 dump tran ,事務(wù)日志將不會刷新,而變得非常龐大。

            對于 master 數(shù)據(jù)庫和小型數(shù)據(jù)庫每次運(yùn)行 dump datebase 之后應(yīng)當(dāng)運(yùn)行 dump transaction 命令刷新日志 。

            下面一條命令備份數(shù)據(jù)庫 db160 的事務(wù)日志到備份設(shè)備上:

            dump transaction db160

            to db_log_bk_dev

            with truncate_only

            3、備份數(shù)據(jù)庫及其日志間的相互作用

            在至少卸出一次數(shù)據(jù)庫前,卸出事務(wù)日志是毫無意義的。下圖顯示了備份數(shù)據(jù)庫及其日志間的關(guān)系

            如果在星期二下午5:01出現(xiàn)非硬件故障,需要做的所有工作是裝入磁帶5(參見下一節(jié):數(shù)據(jù)恢復(fù)),由于磁帶5是下午5:00剛備份的,因此只有備份和裝入之間的一分鐘內(nèi)的數(shù)據(jù)損失。

            但是,如果在星期二下午4:49失效會怎么樣呢?在這種情況下,要裝入磁帶1(在星期五下午5:00的卸出)。然后,依次裝入磁帶2,3以及4。這樣,系統(tǒng)將恢復(fù)到星期二上午10:00點(diǎn)的狀態(tài),星期二的大部分工作丟失了。此例顯示了經(jīng)常卸出事務(wù)的重要性。

            二、萬一系統(tǒng)失敗時(shí)恢復(fù)數(shù)據(jù)庫系統(tǒng)

            如果用戶數(shù)據(jù)庫存儲的設(shè)備失效,從而數(shù)據(jù)庫被破壞或不可存取,通過裝入最新的數(shù)據(jù)庫備份以及后來的事務(wù)日志備份可以恢復(fù)數(shù)據(jù)庫。假設(shè)當(dāng)前的事務(wù)日志存在于一個并沒有毀壞的設(shè)備上,帶著 with no_truncate 選項(xiàng)的 dump transaction 命令卸出它。

            要恢復(fù)數(shù)據(jù)庫按如下步驟去做:

            1、如果日志存在于一個分離的設(shè)備上,用帶著 no_truncate 選項(xiàng)的 dump transaction 命令卸出被毀壞的或者不可存取的用戶數(shù)據(jù)庫事務(wù)日志。

            2、用下面的查詢檢查設(shè)備分配已毀壞數(shù)據(jù)庫的設(shè)備使用情況。必須為同一目的賦同樣的空間塊。

            下面的查詢顯示了分配給數(shù)據(jù)庫 mydb 設(shè)備使用和尺寸情況:

            select segmap,size from sysusages

            where dbid =

            ( select dbid from sysdatabases where name = “mydb”)

            3、檢查查詢的輸出。在 segmap 列的 ‘3’代表數(shù)據(jù)分配,‘4’代表日志分配。size 列代表 2k 數(shù)據(jù)塊的數(shù)目。注意此信息的次序、使用和尺寸部分。例如,輸出為:

            segmapsize

            --------------------

            310240//實(shí)際尺寸為:20m

            35120//實(shí)際尺寸為:10m

            45120//實(shí)際尺寸為:10m

            31024//實(shí)際尺寸為:2m

            42048//實(shí)際尺寸為:4m

            4、用 drop database 命令刪除毀壞設(shè)備上的數(shù)據(jù)庫。如果系統(tǒng)報(bào)錯,用dbcc dbrepair 命令的 dropdb 選項(xiàng)。

            5、刪除數(shù)據(jù)庫后,用 sp_dropdevice 刪除毀壞了的設(shè)備。

            6、用 disk init 初始化新的數(shù)據(jù)庫設(shè)備。

            7、重建數(shù)據(jù)庫。用 create database 命令從老的 sysusages 表拷貝所有的行,并包含第一邏輯設(shè)備。

            對上例,命令為:

            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 重新裝入數(shù)據(jù)庫,然后用 load tran 裝入前面卸出的日志。

            load database 命令語法是:

            load database database_name

            from dump_device

            load transaction 命令的語法是:

            load transaction database_name

            from dump_device

            卸出數(shù)據(jù)庫和事務(wù)日志的缺省權(quán)限歸數(shù)據(jù)庫所有者,且可以傳遞給其他用戶;裝載數(shù)據(jù)庫和事務(wù)的權(quán)限也歸數(shù)據(jù)庫所有者,但不能傳遞。

            二、產(chǎn)生用戶信息表,并為信息表授權(quán);

            系統(tǒng)維護(hù)人員的另一個日常事務(wù)是為用戶創(chuàng)建新的信息表,并為之授權(quán)。創(chuàng)建表以及為表授權(quán)的方法已經(jīng)在講過,在此只將有關(guān)命令語法寫出來。

            ·創(chuàng)建表的命令為:

            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

            ·為表授權(quán)的命令格式為:

            grant {all|permission_list}

            on table_name to user_name

            go

            ·收回權(quán)限的命令格式為

            revoke {all|permission_list}

            on table_name from user_name

            go

            三、監(jiān)視系統(tǒng)運(yùn)行狀況,及時(shí)處理系統(tǒng)錯誤;

            系統(tǒng)管理員的另一項(xiàng)日常工作是監(jiān)視系統(tǒng)運(yùn)行情況。主要有以下幾個方面:

            1、監(jiān)視當(dāng)前用戶以及進(jìn)程的信息

            使用系統(tǒng)過程:sp_who

            說明:該命令顯示當(dāng)前系統(tǒng)所有注冊用戶及進(jìn)程信息,如下表是某系統(tǒng)的信息。

            spidstatusloginamehostnameblkdbnamecmd

            ---------------------------------------------------------------

            1runningsascosysv0masterselect

            2sleepingnull0masternetwork handle

            3sleepingnull0masterdeadlock tune

            4sleepingnull0mastermirror handler

            5sleepingnull0masterhousekeeper

            6sleepingnull0mastercheckpoint sleep

            從左向右依次顯示:進(jìn)程號、當(dāng)前狀態(tài)、注冊用戶名、主機(jī)名、占用塊數(shù)、數(shù)據(jù)庫名以及當(dāng)前命令。

            如果監(jiān)視時(shí)發(fā)現(xiàn)進(jìn)程總數(shù)接近最大連接數(shù)(用系統(tǒng)過程:sp_configure “user conn” 查看)時(shí),應(yīng)下掉不活動或無關(guān)進(jìn)程,以保證系統(tǒng)正常運(yùn)做;另外亦可監(jiān)視非法用戶或用戶使用不屬于自己使用范圍的數(shù)據(jù)庫等情況。

            2、監(jiān)視目標(biāo)占用空間情況

            使用系統(tǒng)過程:sp_spaceused

            說明:該過程顯示行數(shù)、數(shù)據(jù)頁數(shù)以及當(dāng)前數(shù)據(jù)庫中由某個目標(biāo)或所有目標(biāo)所占用的空間。如下表是某數(shù)據(jù)庫日志表的信息:

            namerow_totalreserveddataindex_sizeunused

            ------------------------------------------------------------

            syslogsnot avail32kb32kb0kbnot avail

            日常要監(jiān)視的主要目標(biāo)有:用戶數(shù)據(jù)庫、數(shù)據(jù)庫日志表(syslogs)以及計(jì)費(fèi)原始數(shù)據(jù)表等。如果發(fā)現(xiàn)占用空間過大,對日志表要進(jìn)行轉(zhuǎn)儲;對其他目標(biāo)則應(yīng)擴(kuò)充空間或清楚垃圾數(shù)據(jù)。

            3、監(jiān)視 sql server 統(tǒng)計(jì)數(shù)字

            使用系統(tǒng)過程:sp_monitor

            說明:sp_monitor 顯示sql server 的歷史統(tǒng)計(jì)數(shù)字,下表是某系統(tǒng)的統(tǒng)計(jì)數(shù)字:

            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)

            上表依次給出該系統(tǒng)本次運(yùn)行統(tǒng)計(jì)的上一次時(shí)間、本次時(shí)間、間隔秒數(shù)、cpu占用、io占用、收發(fā)包情況、系統(tǒng)讀入寫出情況等信息

            四、保證系統(tǒng)數(shù)據(jù)安全,周期更改用戶口令;

            為保證系統(tǒng)數(shù)據(jù)的安全,系統(tǒng)管理員必須依據(jù)系統(tǒng)的實(shí)際情況,執(zhí)行一系列的安全保障措施。其中,周期性的更改用戶口令是比較常用且十分有效的措施。

            更改用戶口令是通過調(diào)用系統(tǒng)過程sp_password 來實(shí)現(xiàn)的。sp_password 的語法為:

            sp_password caller_password,new_password [,loginame]

            其中caller_password 是登錄口令(老口令),new_password是新口令,loginame是登錄名稱。

          posted @ 2005-10-26 17:46 快樂的射手 閱讀(998) | 評論 (1)編輯 收藏

          可能內(nèi)容有些沒章法。
          以前在壇上許過寫份學(xué)習(xí)資料出來。今天補(bǔ)上。望對學(xué)習(xí)者有幫助。

          簡介:
          對學(xué)習(xí)sybase和ms-sqlserver的體會,包括安裝、初始化、sql學(xué)習(xí),過程和觸發(fā)子創(chuàng)建,db-library和ct-library以及同oracle的不同之處,和細(xì)節(jié)注意對比。

          [不能上傳文件,只好列出內(nèi)容]
          Sybase學(xué)習(xí)體會
          原創(chuàng):戴黎鳴
          第一大塊:Sybase安裝 [redhat 7.2]
          Sybase rpm 包安裝順序 12.5.0.1 for linux
          sybase-common-12.5.0.1DE-1.i386.rpm
          sybase-ase-12.5.0.1ESD-1.i386.rpm
          sybase-efts-12.5.0.1ESD-1.i386.rpm
          sybase-openclient-12.5.0.1ESD-1.i386.rpm
          sybase-esql-12.5.0.1ESD-1.i386.rpm
          sybase-sqlremote-7.0.2-1.i386.rpm
          sybase-chinese-12.5.0.1ESD-1.i386.rpm
          安裝
          rpm -ivh sybase-common-12.5.0.3-7.i386.rpm
          rpm -ivh sybase-ase-12.5.0.3-7.i386.rpm [ -Uhv --nodeps]
          rpm -ivh sybase-efts-12.5.0.3-7.i386.rpm [ -Uhv --nodeps]
          rpm -ivh sybase-openclient-12.5.0.3-7.i386.rpm
          rpm -ivh sybase-esql-12.5.0.3-7.i386.rpm
          rpm -ivh sybase-sqlremote-7.0.2-1.i386.rpm
          卸載
          rpm -e sybase-efts-12.5.0.3-7
          rpm -e sybase-sqlremote-7.0.2-1
          rpm -e sybase-esql-12.5.0.3-7
          rpm -e sybase-openclient-12.5.0.3-7
          rpm -e sybase-openclient-12.5.0.3-7
          rpm -e sybase-ase-12.5.0.3-7
          rpm -e sybase-chinese-12.5.0.3-7
          rpm -e sybase-doc-12.5.0.3-7
          rpm -e sybase-common-12.5.0.3-7
          rpm -ql libstdc++
          安裝順序和依賴關(guān)系說明:
          sybase-common-12.5.0.1DE-1.i386.rpm The common package is a prerequisite to all other packages. It creates and installs the default runtime environment required by other packages, and includes tools to configure, install, and administer Adaptive Server and related components.
          NOTE: The sybase-common-12.5-3.i386.rpm is a pre-required package. You must install it before you install any other rpm package as all depend on the common package.

          sybase-ase-12.5.0.1ESD-1.i386.rpm This package installs all binary server components required to run Adaptive Server, Backup Server, XP Server, Monitor Server, Historical Server and related utilities and tools for database development and maintenance.

          sybase-efts-12.5.0.1ESD-1.i386.rpm The efts package installs the Enhanced Full-Text Search Specialty Data Store, which provides the capability to do complex searches on character and text data stored in the ASE. The performance of the searches can be orders of magnitude faster than using standard SQL searches.

          sybase-openclient-12.5.0.1ESD-1.i386.rpm The Open Client package installs the Sybase Open Client Software Development Kit (SDK). Open Client consists of programming interfaces and networking services for writing client applications for point-to-point communication to Sybase server products.

          sybase-esql-12.5.0.1ESD-1.i386.rpm The Embedded SQL package installs the Sybase ESQL binaries, libraries, include files and sample programs. It consists of the programming interfaces and networking services for writing client application in Embedded-SQL for point-to-point communication to ASE.
          NOTE: The sybase-esql-12.5.0.1ESD-1.i386.rpm package requires the sybase-openclient-12.5.0.1ESD-1.i386.rpm package.

          sybase-sqlremote-7.0.2-1.i386.rpm The SQL Remote package installs the Sybase SQL Remote for Adaptive Server Enterprise. SQL Remote is a data-replication technology designed for two-way replication between a consolidated data server and large numbers of remote databases, typically including many mobile databases.

          sybase-chinese-12.5.0.1ESD-1.i386.rpm
          sybase-french-12.5.0.1ESD-1.i386.rpm
          sybase-german-12.5.0.1ESD-1.i386.rpm
          sybase-japanese-12.5.0.1ESD-1.i386.rpm
          sybase-korean-12.5.0.1ESD-1.i386.rpm
          sybase-polish-12.5.0.1ESD-1.i386.rpm
          sybase-portuguese-12.5.0.1ESD-1.i386.rpm
          sybase-thai-12.5.0.1ESD-1.i386.rpm
          sybase-spanish-12.5.0.1ESD-1.i386.rpm
          NOTE: These packages cannot be installed on a platform that is running an incorrect version of Linux, kernel and run-time. These packages do allow for upgrade of previous released versions under Linux. These packages do not allow for degrading later installs.

          Consistency Check: Once the files have been transferred to the target machine, perform a consistency check before installing the packages. Enter:

          #rpm -- checksig *.rpm

          You should receive the following output:
          sybase-common-12.5.0.1DE-1.i386.rpm: md5 OK
          sybase-ase-12.5.0.1ESD-1.i386.rpm: md5 OK
          sybase-efts-12.5.0.1ESD-1.i386.rpm: md5 OK
          sybase-esql-12.5.0.1ESD-1.i386.rpm: md5 OK
          sybase-openclient-12.5.0.1ESD-1.i386.rpm: md5 OK
          sybase-sqlremote-12.5.0.1ESD-1.i386.rpm: md5 OK
          sybase-french-12.5.0.1ESD-1.i386.rpm: md5 OK
          sybase-german-12.5.0.1ESD-1.i386.rpm: md5 OK

          Refer to the Installation Guide for detailed installation instructions

          usage: isql [-b] [-e] [-F] [-p] [-n] [-v] [-X] [-Y] [-Q]
          [-a display_charset] [-A packet_size] [-c cmdend] [-D database]
          [-E editor [-h header [-H hostname [-i inputfile]
          [-I interfaces_file] [-J client_charset] [-K keytab_file]
          [-l login_timeout] [-m errorlevel] [-M labelname labelvalue]
          [-o outputfile] [-P password] [-R remote_server_principal]
          [-s col_separator] [-S server_name] [-t timeout] [-U username]
          [-V [security_options]] [-w column_width] [-z localename]
          [-Z security_mechanism]

          1、 Root用戶,先將rpm包解壓,解壓后的目錄為/opt/Sybase-12.5
          rpm -ivh *.rpm 順序?yàn)榍懊嫠龅捻樞颉?
          如果以前安裝過,用
          rpm -e 'rpm -qa|grep sybase'卸載
          2、 執(zhí)行$SYBASE/install/sybinstall.sh,它將創(chuàng)建sybase用戶和口令,用passwd將sybase的用戶口令修改為所要設(shè)定的口令。
          3、 在root用戶登錄文件中加入以下語句(以bash用戶,.bash_profile為例。更改系統(tǒng)內(nèi)存值為60M):echo "62914560" > /proc/sys/kernel/shmmax
          {
          1、 改/etc/sysctl.conf文件加入
          kernel.shmmax=10000
          fs.aio-max-size=10000
          2、 編輯$SYBASE/ASE/init/ sample_resource_files/ srvbuild.adaptive_server.rs文件
          其他服務(wù)建立文件也如此。
          注意輸入數(shù)據(jù)文件時(shí),如果沒有建立raw device 將要指定存放的目錄和數(shù)據(jù)庫數(shù)據(jù)文件。
          3、 修改后用svrbuildres -r $SYBASE/ASE/init/sample_resource_files/
          srvbuild.adaptive_server.rs執(zhí)行將建立數(shù)據(jù)庫。
          } /opt/sybase-12.5/ASE-12_5/bin/srvbuildres -r /opt/sybase-12.5/ASE-12_5/init/
          sample_resource_files/leon.adapative_server.rs
          4、 設(shè)置完成后,重新用sybase登陸[他會自動設(shè)定完成環(huán)境變量],建一個目錄存放日后的數(shù)據(jù)庫文件
          5、 重新restart computer
          6、 sybase登陸x-windows,執(zhí)行$SYBASE/ASE-12_5/bin/srvbuild,選擇完四個服務(wù)器,鍵入數(shù)據(jù),執(zhí)行創(chuàng)建。
          [
          在X-Windows中使用srvbuild工具配置ASE產(chǎn)品
          1、用sybase用戶登錄X-Windows,執(zhí)行sybase安裝目錄(/opt/sybase-11.9.2)下/bin/srvbuild命令。
          2、在srvbuild窗口中,選擇要安裝Server類型。把四種Server都選上。
          3、給Server命名。將Adaptive Server命名為TEST,相應(yīng)地,Backup Server自動命名為TEST_back,Monitor Server命名為TEST_mon,XP Server命名為TEST_XP。點(diǎn)擊OK按鈕,進(jìn)入各Server的配置過程。
          4、配置Adaptive Server。填寫或選擇以下內(nèi)容:
          Master device path(主設(shè)備路徑):/db/sybsystem/master.dat
          Master device size(MB)(主設(shè)備大小):60
          Master database size(MB)(主數(shù)據(jù)庫大小):20
          Sybsystemprocs device path(系統(tǒng)存儲過程設(shè)備路徑):/db/sybsystem/systemprocs.dat
          Sybsystemprocs device size(MB)(系統(tǒng)存儲過程設(shè)備大小):60
          Sybsystemprocs database size(MB)(系統(tǒng)存儲過程數(shù)據(jù)庫大小):60
          Error log path(錯誤日志路徑):/opt/sybase-11.9.2/install/TEST.log
          Transport type(傳輸協(xié)議類型):tcp
          Host name(主機(jī)名):192.168.0.1
          Port number(監(jiān)聽端口號):4100
          點(diǎn)擊OK按鈕,進(jìn)入下一配置過程。
          5、配置Backup Server。填寫或選擇以下內(nèi)容:
          Error log path:/opt/sybase-11.9.2/install/TEST_back.log
          Tape configuration file:/opt/sybase-11.9.2/backup_tape.cfg
          Language:(不填)
          Character set:(不填)
          Maximum number of network connections:25
          Maximum number of server connections:20
          Transport type:tcp
          Host name:192.168.0.1
          Port number:4200
          點(diǎn)擊OK按鈕,進(jìn)入下一配置過程。
          6、配置Monitor Server。填寫或選擇以下內(nèi)容:
          Maximum number of connections:5
          Error log path:/opt/sybase-11.9.2/install/TEST_mon.log
          Configuration file path:/opt/sybase-11.9.2/install/TEST_mon.cfg
          Share memory directory:/opt/sybase-11.9.2
          Transport type:tcp
          Host name:192.168.0.1
          Port number:4300
          點(diǎn)擊OK按鈕,進(jìn)入下一配置過程。
          7、配置XP Server。填寫或選擇以下內(nèi)容:
          Transport type:tcp
          Host name:192.168.0.1
          Port number:4400
          點(diǎn)擊Build Server按鈕,開始創(chuàng)建Server,這時(shí)出現(xiàn)一個窗口,你可以看到整個創(chuàng)建過程。如果有顯示以下類似信息,表示創(chuàng)建Server成功:
          ……
          Server TEST was successfully created.
          Done.
          ……
          8、創(chuàng)建Server成功后,系統(tǒng)就會問你是否將Server本地化(Localize),即是用另外一種語言代替默認(rèn)的us_english language,以及改變默認(rèn)的iso_1字符集和Binary索引順序。選擇是NO。為什么呢?曾經(jīng)把中文(eucgb)設(shè)為默認(rèn)字符集,反而不支持中文大字集,因?yàn)閑ucgb是基于GB2312標(biāo)準(zhǔn)的。查了Sybase的手冊中一些關(guān)于本地化的說明,得出的印象是,在ASE中有Unicode轉(zhuǎn)換機(jī)制,可以轉(zhuǎn)換來自不同字符集的服務(wù)器或客戶端的數(shù)據(jù)。應(yīng)用也證明,使用ASE的默認(rèn)的語言、字符集、索引順序來處理中文是可行的。
          9、安裝成功后要做的幾件事。首先在Linux控制臺模式下以sybase用戶登錄。
          ① 確認(rèn)Server是否在運(yùn)行。使用$SYBASE/install/下的showserver命令($SYBASE表示sybase的安裝目錄),應(yīng)該可看見系統(tǒng)有幾個sybase相關(guān)進(jìn)程。或者用$SYBASE/bin/下的isql -Usa -P -STEST命令來登錄Server,應(yīng)該可以看見isql的提示符"1>",再鍵入exit就可以退出了。
          ② 用sp_password null, 新口令
          go將sa的用戶口令改掉。
          ]
          7、 成功后將自動啟動數(shù)據(jù)庫。可用isql -Usa -Ppassword -Sserver_name連進(jìn)數(shù)據(jù)庫。
          isql -Usa -P -Ssybase
          8、 執(zhí)行1>sp_diskdefault master , defaultoff
          2>go
          將以后用戶數(shù)據(jù)庫數(shù)據(jù)文件不要建立在master所在的數(shù)據(jù)文件中。
          9、 用sp_password oldpassword,newpassword設(shè)定sa的用戶口令。
          a) sp_password null,Sybase
          b) go
          10、 用shutdown關(guān)閉數(shù)據(jù)庫。
          11、 重新啟動數(shù)據(jù)庫用$SYBASE/ASE/install/RUN_sybase啟動,這為前臺啟動方式。后臺啟動方式用。
          $SYBASE/ASE/install/startserver -f RUN_Sybase
          RUN_sybase例子:
          #!/bin/sh
          #
          # ASE page size (KB): 2048
          # Master device path: /opt/sybase-12.5/data/nextip.dat
          # Error log path: /opt/sybase-12.5/ASE/install/sybase.log
          # Configuration file path: /opt/sybase-12.5/ASE/sybase.cfg
          # Directory for shared memory files: /opt/sybase-12.5/ASE
          # Adaptive Server name: sybase
          #
          /opt/sybase-12.5/ASE/bin/dataserver \
          -d/opt/sybase-12.5/data/nextip.dat \
          -e/opt/sybase-12.5/ASE/install/sybase.log \
          -c/opt/sybase-12.5/ASE/sybase.cfg \
          -M/opt/sybase-12.5/ASE \
          -ssybase \

          關(guān)閉數(shù)據(jù)庫:
          用sa用戶進(jìn)入數(shù)據(jù)庫執(zhí)行shutdown命令即可完成數(shù)據(jù)庫的關(guān)閉。

          數(shù)據(jù)庫設(shè)備的建立
          重啟在sybase用戶下,
          1> use master
          2> go
          3> sp_diskdefault master , defaultoff
          4> go
          5> sp_helpdevice
          6> go
          1> disk init
          2> name='sybsyntaxdev',
          3> physname='/opt/sybase-12.5/data/user_data/testdb.dat',
          4> vdevno=4,
          5> size='30m'
          6>
          7> go
          建立數(shù)據(jù)庫設(shè)備后就可以建立用戶數(shù)據(jù)庫
          sa
          create database userdb on db_dev_name=size M

          1> disk init
          2> name='testdbdev',
          3> physname='/opt/sybase-12.5/data/user_data/testdb.dat',
          4> vdevno=6,
          5> size
          6> go
          8> use master
          9> go
          10> create database testdb on testdbdev=10
          11> go
          建立用戶數(shù)據(jù)庫的用戶
          1>sa connenction into database
          2>use testdb
          3>go
          4>sp_addlogin ldai, password, null, null, 'dailiming'
          5>go
          6>sp_adduser ldai,dlm
          7>go
          isql -Uldai -Ppassword1 -Ssybase就可以連進(jìn)testdb用戶數(shù)據(jù)庫了。
          注意口令長度不得小于6位,如果口令以數(shù)字開頭,還需要以單引號括起來。
          Sp_addlogin提供用戶能訪問數(shù)據(jù)庫的權(quán)限,如果沒有指定用戶具體訪問那個數(shù)據(jù)庫,則還需要在相應(yīng)數(shù)據(jù)庫中用sp_adduser user_name, user_password建一個相同名和口令的用戶。
          例如
          1> sp_adduser ldai, dlm
          2> go
          3>

          如果用sa用戶創(chuàng)建了一個用戶數(shù)據(jù)庫,想將他的所有者由sa改為其他用戶。
          確定其他用戶只具有addlogin,不具有adduesr。如果有addusers則要sp_dropuser刪除掉,否則不能賦給他所有者權(quán)限。
          Isql -Usa
          1> use testdb
          2> go
          3> sp_changedbowner ldai, testdb
          4> go
          5> sp_default ldai, testdb
          6> go
          7> sp_helpdb testdb
          8> go
          將更改數(shù)據(jù)庫owner了,注master不能更改

          建用戶有兩中方式,上面這一種是建立用戶帳號,再在具體數(shù)據(jù)庫中建立該數(shù)據(jù)庫應(yīng)用帳號。較為繁瑣。可通過sp_addlogin加其他參數(shù),一步到位將數(shù)據(jù)庫用戶建立起來。
          Sp_addlogin user_name,user_password,所用數(shù)據(jù)庫名稱,null, '用戶全名備注'
          例如:
          sp_addlogin nextip, nextip, NEXTIPDB, null, 'nextipdb's dba'

          Msg 5106, Level 16, State 6:
          Server 'sybase', Line 1:
          Parameter 'SIZE' requires value of type 'int'.
          1> disk init
          2> name='sybsyntaxdev',
          3> physname='/opt/sybase-12.5/data/user_data/sybsyntaxdev.dat',
          4> vdevno=4,
          5> size='10m'
          6> go
          00:00000:00008:2003/10/22 14:33:19.21 kernel Initializing virtual device 4, '/opt/sybase-12.5/data/user_data/sybsyntaxdev.dat' with dsync 'on'.
          00:00000:00008:2003/10/22 14:33:19.21 kernel Virtual device 4 started using asynchronous i/o.
          00:00000:00008:2003/10/22 14:33:19.22 kernel Initializing device /opt/sybase-12.5/data/user_data/sybsyntaxdev.dat from offset 0 with zeros.
          00:00000:00008:2003/10/22 14:33:19.25 kernel Finished initialization.
          1>

          初次建立數(shù)據(jù)庫對sa的口令要進(jìn)行修改。
          sp_password old_password, new_password, login name
          1> sp_password null, nextip, sa
          2> go
          3>

          sp_dboption 是用來打開或關(guān)閉數(shù)據(jù)庫的選項(xiàng) [select into/bulkcopy]。只用這樣數(shù)據(jù)庫才能執(zhí)行如select identity(int) id0,* into #temp1 from tablename這樣的sql語句。查看是否打開option用sp_helpdb就可以查看。Sp_dboption只能在master 數(shù)據(jù)庫中引用。是否允許列字段為空還是不為空也是用這個命令。
          1> use nextipdb
          2> go
          3> master..sp_dboption nextipdb,"select into/bulkcopy","true"
          4> go
          5> checkpoint
          6> go

          1> dbcc checkdb
          2> go
          3> dbcc checkcatalog
          4> go

          1、增加自定義的數(shù)據(jù)類型為sp_addtype datatypename ,"length",
          FE: sp_addtype tid, "char(6)", "not null"
          2、查看某一用戶是否有什么權(quán)限,sp_helprotect user_name
          4、 修改用戶出始登陸的數(shù)據(jù)庫,命令為sp_modifylogin
          5、 檢索identity字段可以用syb_identity=指定值來檢索,如
          t_dns_rezo_gs中有且一個identity字段[rzgs_id ],則可如下檢索
          select count(*) from t_dns_rezo_gs where syb_indentity=1
          6、 sp_dboption可設(shè)置數(shù)據(jù)庫通用的一些選項(xiàng)。
          7、 當(dāng)想要對表進(jìn)行手工插入identity時(shí),如果沒有set identity_insert table_name on/off打開,
          就要打開,如果一旦打開,每一筆記錄都要手工指明identity值,而不是自動插入形式,切記。如果變回off后,則identity記數(shù)從表中最大的identity值開始記數(shù)。例最大值為10,則記數(shù)從11開始,中間就有g(shù)ap出現(xiàn)了。
          8、 identity默認(rèn)精度為18位,如果達(dá)到了,就需要增加其精度。可用alter table table-name
          modify identity_col_name, numeric(20,0)進(jìn)行修改精度。
          9、 使數(shù)據(jù)庫自動為新建表建立一個隱藏的identity字段為sp_dboption db_name , "auto identity", "true"
          為identity設(shè)置精度,由管理員操作sp_configure "size of auto identity", 精度位數(shù)
          如sp_configure "size of auto identity",15
          10、 在當(dāng)前數(shù)據(jù)庫中創(chuàng)建另外一個數(shù)據(jù)庫的表或其他對象, create other_db_name..object_name
          如: create table newdb..t_dns_gs (name varchar(255))
          11、 select user_name() /user / db_name() 返回當(dāng)前用戶或數(shù)據(jù)庫
          12、 col_length("表名", "字段名") 返回指定字段的長度/ datalength("列名")實(shí)際存儲長度對varchar/期于是創(chuàng)建時(shí)指定的長度
          13、 isNull(exp1, exp_value) 為如果exp1為null則用exp_value替代
          14、 convert(轉(zhuǎn)換后的類型和長度,要轉(zhuǎn)換的類型值)
          如:select "my Test" + ""+convert(varchar(20),1211333)
          1> select mmm="my Test" + ""+convert(varchar(20),1211333)
          2> go
          mmm
          ----------------------------
          my Test 1211333

          (1 row affected)
          15、 獲取當(dāng)前時(shí)間為select getdate()
          16、 當(dāng)前變量申明 declare @變量名 類型
          賦值操作select @變量名=變量值
          如:
          declare @sIpad varchar(20),@iNum numeric(2,0)
          select @sIpad='0AC80001',@iNum=32
          17、 看過程的源碼sp_helptext 過程名
          例子:
          1> sp_helptext p_convert_num_to_char
          2> go
          # Lines of Text
          ---------------
          1
          (1 row affected)
          text
          ----------------------------------------------------------------------------------------------------------------------
          create procedure p_convert_num_to_char
          @cint numeric, @outchar varchar(10) output
          as
          if (@cint=4)
          select @outchar='Four'
          if (@cint=5)
          select @outchar='Five'
          if (@cint=6)
          select @outchar='Six'
          (1 row affected)
          (return status = 0)

          18、 oracle中查看源碼,查看該sources表
          19、 在一個過程中調(diào)用另外一個過程,
          例如:
          create procedure test_one @test_proc_name varchar(255)
          as exec @test_proc_name
          20、 記住在sybase中執(zhí)行sql是用'go'不是以';'為結(jié)束兼執(zhí)行
          21、 創(chuàng)建數(shù)據(jù)庫用戶:sa用戶 master庫中,sp_addlogin user,password,dbname
          22、 變更數(shù)據(jù)屬主::sa用戶進(jìn)入要變更的數(shù)據(jù)庫執(zhí)行 sp_changedbowner user,dbname
          23、 設(shè)置用戶的默認(rèn)登陸數(shù)據(jù)庫::sa用戶進(jìn)入要設(shè)定的數(shù)據(jù)庫執(zhí)行:
          sp_defaultdb user,dbname
          24、 以#開頭的臨時(shí)表只是在某一過程或sql操作中存在,一旦過程或sql操作結(jié)束,則臨時(shí)表就不存在了,如果再要訪問就回出錯。解決是不建立以#為preffix的表。
          25、 要想直接手工插入值到表中identity字段,需要打開該表的identity_insert選項(xiàng)。
          Set identity_insert 表名 on/off
          如:
          set identity_insert t_dns_rezo_gs on
          這樣insert into t_dns_rezo_gs(rzgs_id,rzgs_name) values(999,'12121')才會成功。
          26、 指定某個過程什么時(shí)候執(zhí)行后用waitfor delay "hh24:mi:ss",并且用了這種方式后該connection不會有什么響應(yīng)直到過程被執(zhí)行完成。
          如半個小時(shí)后執(zhí)行過程test_p
          begin
          waitfor delay "0:30:00"
          exec test_p
          end
          27、 調(diào)用帶返回參數(shù)的過程完整例子
          create procedure p_convert_num_to_char
          @cint numeric, @outchar varchar(10) output
          as
          if (@cint=4)
          select @outchar='Four'
          if (@cint=5)
          select @outchar='Five'
          if (@cint=6)
          select @outchar='Six'
          go

          declare @getchar varchar(10)
          exec p_convert_num_to_char 4,@outchar=@getchar output
          28、 過程中有返回參數(shù)時(shí),如果預(yù)先設(shè)定參數(shù)值,最終都會改變
          如:
          declare @First int
          select @First=123
          exec test_p @second=@First output
          //運(yùn)行結(jié)果為999
          則@second和@First 都為999
          29、 過程名改名sp_rename oldname, newName
          30、 ct-library編程,在sybase提供的linux中有,環(huán)境搭建要點(diǎn),要確定$SYBASE設(shè)定了,$SYBASE_OCS設(shè)定open client所在目錄即可不要是全目錄,還要設(shè)定平臺$SYBPLATFORM=linux; 具有這三個環(huán)境變量,open client提供的sample才可大部分編譯通過;其中有幾個程序由于找不到-lsrv,而編譯通不過。推測可能涉及了open server的東西,所以沒有通過。
          例子程序可以單獨(dú)編譯,如make 例子名 [F.E make firstapp
          ]
          設(shè)定LD_LIBRARY_PATH=$SYBASE/$SYBASE_OCS/lib

          編譯形式例如firstapp.c
          $SYBASE=/opt/sybase-12.5
          $SYBASE_OCS= OCS-12_5
          cc -o fist firstapp.c -I. -I/opt/sybase-12.5/OCS-12_5/include -L/opt/sybase-12.5/OCS-12_5/lib -rdynamic -ldl -lnsl -lm -lct -lcs -lsybtcl -lcomn -lintl
          31、 db-library編譯語句:
          cc -I. -I/opt/sybase-12.5/OCS/include example1.c /opt/sybase-12.5/OCS/lib/libsybdb.a -lm -o example1
          同樣要設(shè)好SYBASE SYBASE_OCS SYBPLATFORM
          并且要保證interface文件中連接服務(wù)器是對的。
          同時(shí)對于想要連接的服務(wù)器名要在環(huán)境變量DSQUERY中設(shè)好。
          如:
          export DSQUERY=accunetsvr

          注意,用hostname作為連接名時(shí),確保/etc/hosts中的IP和hostname有對應(yīng)且對應(yīng)正確。

          32、 db-library 經(jīng)實(shí)驗(yàn)數(shù)據(jù)庫連接結(jié)構(gòu)支持線程間的傳遞,將函數(shù)打包用下列樣式:
          gcc -c -I. -I/opt/sybase-12.5/OCS/include s_fcts.c
          ar r libleon.a s_fcts.o
          rm -rf *.o
          打包完畢
          調(diào)用函數(shù)進(jìn)行編譯樣式:
          cc -I. -I/opt/sybase-12.5/OCS/include ss_nip_checkUGandUser.c libleon.a
          /opt/sybase-12.5/OCS/lib/libsybdb.a -lm -o leon4
          或者
          cc -I. -I/opt/sybase-12.5/OCS/include -o leon4 ss_nip_checkUGandUser.c libleon.a
          /opt/sybase-12.5/OCS/lib/libsybdb.a -lm
          33、 DB-library的應(yīng)用程序運(yùn)行其他機(jī)上訪問另一臺機(jī)(數(shù)據(jù)庫所在的機(jī)器).在客戶機(jī)上需要裝sybase-comom 和syabse-openclient組件。需要設(shè)定對SYBASE / DSQUERY. 其中sybase要設(shè)定為指向interfaces文件的路徑,DSQUERY要設(shè)定為要遠(yuǎn)程訪問的主機(jī)名 (adapative_server_name).將遠(yuǎn)程主機(jī)的interfaces拷貝到客戶機(jī)上SYBASE指定的目錄即可。注意如果沒有設(shè)定 DSQUERY,則程序默認(rèn)去找sybase的數(shù)據(jù)庫,這時(shí)如果沒有該數(shù)據(jù)庫名字在interfaces文件中,程序就會不能運(yùn)行。
          [實(shí)際只需設(shè)定好DSQUERY環(huán)境變量和interface文件即可]
          34、 DB-library應(yīng)用在多線程中每次都要重新連接數(shù)據(jù)庫,否則一定時(shí)間后連接會被操作系統(tǒng)重置掉。 Connection reset by peer
          35、 DB-library的錯誤捕捉。系統(tǒng)提供一種系統(tǒng)錯誤信息函數(shù)自動在出現(xiàn)錯誤時(shí)去捕捉顯示錯誤信息。
          int msg_handler(dbproc, msgno, msgstate, severity, msgtext,
          srvname, procname, line)
          DBPROCESS *dbproc;
          DBINT msgno;
          int msgstate;
          int severity;
          char *msgtext;
          char *srvname;
          char *procname;
          int line;
          {};
          int err_handler(dbproc, severity, dberr, oserr, dberrstr, oserrstr)
          DBPROCESS *dbproc;
          int severity;
          int dberr;
          int oserr;
          char *dberrstr;
          char *oserrstr;
          {};

            dbmsghandle(msg_handler);
          dberrhandle(err_handler);

          除此之外,用戶如果想要自己控制錯誤信息可在dbsqlexec() 調(diào)用后并且while()處理完后,調(diào)用dbcount(dbproc)進(jìn)行錯誤信息判斷,如果等于-1則出現(xiàn)錯誤。特例調(diào)用沒有select的過程:: dbnocount設(shè)為on::沒有select的sql語句::sql寫錯::sql執(zhí)行錯誤等都可以出現(xiàn)-1所以要小心判斷處理。
          36、 Jdbc連接sybase。首先需要jconn2.jar和jTDS2.jar文件,在環(huán)境變量CLASSPATH設(shè)定好。
          Class.forName("com.sybase.jdbc2.jdbc.SybDriver");
          url結(jié)構(gòu)為: jdbc:sybase:Tds:dbserver_ip/dbserver_hostname:dbserver_port/dbname
          dbserver的端口為數(shù)據(jù)庫服務(wù)器上的interfaces文件中對應(yīng)的數(shù)據(jù)庫端口。
          例子:
          192.168.0.6
          interfaces
          [root@accunetsvr sybase-12.5]# more interfaces
          accunetsvr_text
          master tcp ether accunetsvr 4500
          query tcp ether accunetsvr 4500


          accunetsvr
          master tcp ether accunetsvr 4100
          query tcp ether accunetsvr 4100


          accunetsvr_back
          master tcp ether accunetsvr 4200
          query tcp ether accunetsvr 4200


          accunetsvr_mon
          master tcp ether accunetsvr 4300
          query tcp ether accunetsvr 4300


          ACCUNETSVR_XP
          master tcp ether accunetsvr 4400
          query tcp ether accunetsvr 4400

          可知dbserver_name是accunetsvr
          dbserver_ip 是192.168.0.6
          dbserver_port 是4100
          dbname為nextip
          url為 jdbc:sybase:Tds:192.168.0.6:4100/nextip
          37、 創(chuàng)建identity列,如果是create table 時(shí)一定是numeric型。如果想要創(chuàng)建數(shù)據(jù)庫自動為新建的所有表增加一個隱藏的identity字段,用[sp_dboption database_name, "auto identity", "true"]。在檢索數(shù)據(jù)的時(shí)候必須隱式加上SYB_IDENTITY_COL作為隱藏的identity列,例如select SYB_IDENTITY_COL, sn_name from t-subnet
          默認(rèn)的隱藏精度大小為10如果用戶想要增大其精度,可用[sp_configure "size of auto identity", 新的精度],例如: sp_configure "size of auto identity",15
          38、 從select into 創(chuàng)建一個新的idenetity列,這在sql語句分頁檢索用。
          Select idenetity_name=identity(精度) , * into new_table from old_table;
          如:
          select id0=identity(1icon_cool.gif,* into #subnets from t_subnet where sn_type=10;
          39、 實(shí)現(xiàn)用sql語句進(jìn)行分頁查詢方法:
          A. 創(chuàng)建一個臨時(shí)表帶identity字段 select id=indentity(20), * into #table_anme from table_name where 條件
          B. 然后根據(jù)id進(jìn)行檢索第n條到m條數(shù)據(jù) (也可用between and)
          C. 最后Drop掉該臨時(shí)表
          D. 注意要打開數(shù)據(jù)庫的select into /bulk copy屬性 sp_dboption database_name, "select into/bulk copy", "true"才能進(jìn)行select into操作
          E. mssql中格式為select identity(int) id, * from #table_name from table_name where 條件
          40、 linux下訪問sql-server用db-library與sybase相同要素。只是遠(yuǎn)程訪問端口為sql-server指定的1433

          41、 JDBC訪問MS-SQLSERVER
          連接數(shù)據(jù)庫:[需要這三個jar文件msbase.jar msutil.jar mssqlserver.jar]
          JDBC DRIVER:com.microsoft.jdbc.sqlserver.SQLServerDriver
          URL:jdbc:microsoft:sqlserver://Ip Or Name:1433;DatabaseName=XXX
          42、 Oracle中的外連接符為=(+) 或(+)= 在Sybase中為=* 或 *=
          43、 執(zhí)行sybase過程中會有日志滿了或存儲空間不夠了,出現(xiàn)supsend狀態(tài),可用
          isql -Usa -Ppassword -Sdbservername
          進(jìn)去執(zhí)行dump tran db_name with truncate_only進(jìn)行清空操作
          或者dump tran db_name to 'path/file'進(jìn)行備份在執(zhí)行清空。
          44、 ms-sql中的substring(string, start, length)函數(shù)參數(shù),start和length為INT型不能為numeric型。
          45、 select * into 在oracle中的用法在ms-sql和sybase中的用法為select @變量=column
          from 表名 where 條件
          46、 游標(biāo)在ms-sql和sybase中差別主要為while 判斷的全局變量不同。
          Sybase中為@@sqlstatus = 0
          Ms-sql中為@@FETCH_STATUS = 0
          關(guān)閉游標(biāo)時(shí)在ms-sql中除了[close 游標(biāo)名] 還要增加[deallocate 游標(biāo)名]

          47、 MS-SQL對于sql語句大小寫不敏感,sybase對大小寫敏感。

          48、 oracle同sybase和mssql的常用函數(shù)對比
          ORACLE SYBASE MS-SQLSERVER
          SysdateTo_char(, '格式')格式:yyyymmddhh24miss任意組合 getdate()可用year() month() day()分解獲得年月日 convert(varchar, getdate(), 108)是hh:mm:ss getdate()可用year() month() day()分解獲得年月日convert(varchar, getdate(), 108)108是hh:mm:ss120是yyyy-mm-dd
          Length() Datalength() Datalength()
          Ltrim() rtrim() Ltrim() rtrim() Ltrim() rtrim()
          Substr() Substring() Substring(varchar, INT, INT)
          Replace('123', '2', 'A) Replace('123', '2', 'A)
          instr
          Lpad() rpad() Replicate('0', 32) Replicate('0', 32)
          Upper() lower() Upper() lower() Upper() lower()

          49、 日期計(jì)算在ms-sql中
          dateadd(日期代碼,日期值, 日期)
          select convert(varchar,getdate(),120) as year,convert(varchar,dateadd(ss, 1200,getdate()),120) as nYear
          go
          日期部分 簡寫 值
          year yy 1753--9999
          quarter qq 1--4
          month mm 1--12
          day of year dy 1--366
          day dd 1--31
          week wk 1--53
          weekday dw 1--7(Sunday--Saturday)
          hour hh 0--23
          minute mi 0--59
          second ss 0--59
          milisecond ms 0-999

          也可
          select convert(varchar, getdate(), 111)+' '+convert(varchar,getdate(),108) as oldtime,convert(varchar,dateadd(ss,1200,getdate()),111)+' '+convert(varchar,dateadd(ss,1200,getdate()),108) as date
          也可
          select convert(varchar,convert(datetime,'20031223'),111)
          go


          50、 PostgreSQL中的lib編程時(shí),select 和update /delete的成功失敗條件判斷是不同的。
          Update/delete:: strcmp(PQcmdStatus(temp_res), "")==0
          select :: !temp_res||PQresultStatus(temp_res) != PGRES_TUPLES_OK
          51、 日期各格式的引用模式ms-sql和sybase中都通用
          yyyy/mm/dd hh24:mi:ss
          select convert(varchar, getdate(), 111)+' '+convert(varchar,getdate(),108) as oldtime,convert(varchar,dateadd(ss,1200,getdate()),111)+' '+convert(varchar,dateadd(ss,1200,getdate()),108) as date
          select name,text from all_source where type='FUNCTION' and name='F_CHECK_IB_SCOPE';
          select convert(varchar,convert(datetime,'20031223'),111)
          go
          Select count(ipgs_host_name)||',host-'||f_ipad_change_dec4('%s','1') From t_ipdev_gs

          yyyy/mm/ddhh24miss
          Select CO_DESC,to_char(sysdate - 1/48,'yyyymmddhh24miss') co_date from T_LICENSE
          dateadd(ss, -1800, getdate())
          select co_desc, convert(varchar, dateadd(ss, -1800, getdate()),111)+convert(varchar,dateadd(ss, -1800, getdate()),108) as co_date from t_license
          select convert(varchar, getdate(), 111)+' '+convert(varchar,getdate(),108) as oldtime,convert(varchar, dateadd(ss, -1800, getdate()),111)+convert(varchar,dateadd(ss, -1800, getdate()),108) as co_date

          yymmddhh:mi:ss
          select convert(varchar,getdate(),112)+convert(varchar,getdate(),icon_cool.gif
          go
          52、 顯示sql執(zhí)行時(shí)間用: isql -Unextip -Pnextip -Sleon1 -p
          進(jìn)入即可,加小寫-p參數(shù)
          53、 MS-SQL中創(chuàng)建數(shù)據(jù)庫
          create database NEXTIPDB
          on primary
          (
          name = DEVDB,
          filename = 'd:\mssql_data\devdb.mdf',
          size = 30MB,
          maxsize = 100MB,
          filegrowth = 10MB
          ),
          (
          name = DEVDB1,
          filename = 'd:\mssql_data\devdb1.ndf',
          size = 10MB,
          filegrowth = 10MB
          )
          Log on
          (
          name = DEVDBLOG,
          filename = 'e:\mssql_log\devdblog.ldf',
          size = 10MB,
          maxsize = 100MB,
          filegrowth = 10MB
          )
          go
          54、 細(xì)小區(qū)別
          Sybase::
          IF NOT EXISTS (SELECT * FROM master..syslogins, master..sysdatabases
          WHERE master..syslogins.suid = master..sysdatabases.suid
          AND master..syslogins.name = 'nextip')
          EXEC sp_changedbowner nextip, NEXTIPDB
          GO

          Ms-sqlserver::
          IF NOT EXISTS (SELECT * FROM master..syslogins, master..sysdatabases
          WHERE master..syslogins.sid = master..sysdatabases.sid
          AND master..syslogins.name = 'nextip')
          EXEC sp_changedbowner nextip, NEXTIPDB
          GO
          posted @ 2005-10-26 17:44 快樂的射手 閱讀(1155) | 評論 (0)編輯 收藏

          太久沒有研究過新技術(shù)了.作為一個程序員,我覺得很慚愧.老早就想看看關(guān)于xmlhttp的技術(shù)了,今天總算有點(diǎn)時(shí)間,做個一個最初的體驗(yàn).馬上就愛上了它.
          如果你想不刷新頁面就可以與后臺進(jìn)行數(shù)據(jù)交互,或者在異構(gòu)系統(tǒng)之間交換數(shù)據(jù),xmlhttp技術(shù)是個不錯的選擇.
          下面是我的一個很小的體驗(yàn)程序,參考了csdn網(wǎng)友s_phoenix()給人的回貼.
          首先建一個tomcat的web項(xiàng)目.

          1:-------index.htm文件內(nèi)容如下:

          <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
          <HTML>
          <HEAD>
          <TITLE> New Document </TITLE>
          <META NAME="Generator" CONTENT="EditPlus">
          <META NAME="Author" CONTENT="">
          <META NAME="Keywords" CONTENT="">
          <META NAME="Description" CONTENT="">
          </HEAD>

          <BODY>
          <script language="javascript">
          var XML="<root><test>李春雷</test><test>毛澤東</test></root>"
          var xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
          var xmlDoc=new ActiveXObject("Msxml2.DOMDocument");
          function test(){//客戶端xml的解析
          xmlDoc.loadXML(XML);
          if(xmlDoc.parseError.line>0){
          throw xmlDoc.parseError.reason;
          }
          var nodes= xmlDoc.selectNodes("/root/test");
          for(var i=0;i<nodes.length;i++){
          alert(nodes.item(i).text);
          }
          }

          function action(){//客戶端和服務(wù)端的通訊
          xmlHttp.open("post","xmlHttp.send(XML);
          var showstr=xmlHttp.responseText;
          alert(showstr);
          }

          </script>
          <button onclick="test();">查看將要傳輸?shù)膞ml</button><br/>
          <button onclick="action();">朝服務(wù)器傳送xml,并接收服務(wù)器回應(yīng)</button>
          </BODY>
          </HTML>


          2:------------寫一個servlet: UrlTestServlet.java

          /*
           * 創(chuàng)建日期 2005-4-7
           *
           * TODO 要更改此生成的文件的模板,請轉(zhuǎn)至
           * 窗口 - 首選項(xiàng) - Java - 代碼樣式 - 代碼模板
           */
          package com.lcl;

          import javax.servlet.*;
          import javax.servlet.http.*;
          import java.io.*;
          import java.util.*;
          import org.dom4j.io.*;
          import org.dom4j.*;


          /**
           * @author lcl
           *
           * TODO 要更改此生成的類型注釋的模板,請轉(zhuǎn)至
           * 窗口 - 首選項(xiàng) - Java - 代碼樣式 - 代碼模板
           */

          public class UrlTestServlet extends HttpServlet {
          private static final String CONTENT_TYPE = "text/xml;charset=utf-8";
          //Initialize global variables
          public void init() throws ServletException {
          }
          //Process the HTTP Get request


          public void doGet(HttpServletRequest request, HttpServletResponse response)
          throws ServletException, IOException {
          response.setContentType(CONTENT_TYPE);
          request.setCharacterEncoding("utf-8");
          PrintWriter out = response.getWriter();
          InputStream is=request.getInputStream();

          SAXReader reader=new SAXReader();
          Document doc=null;
          try{
          doc=reader.read(is);
          } catch(Exception ex){
          System.out.println(ex);
          }
          String[] s= getElementTexts(doc,"test");
          out.println("數(shù)據(jù)交換成功:返回" + s[0] + s[1]);
          }

          public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
          doGet(request,response);
          }

          private String getElementText(Document doc,String name){
          return doc.getRootElement().element(name).getText();
          }

          private String[] getElementTexts(Document doc,String name){
          List l=doc.getRootElement().elements(name);
          Iterator it=l.iterator();
          List l1=new LinkedList();
          while(it.hasNext()){
          Element e=(Element)it.next();
          l1.add(e.getText());
          }
          return (String[])l1.toArray(new String[]{});
          }

          //Clean up resources
          public void destroy() {
          }
          }

          3:--------web.xml更改如下(加servlet映射):

          <?xml version="1.0" encoding="ISO-8859-1"?>

          <!DOCTYPE web-app
              PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
              "

          <web-app>
            <display-name>Welcome to Tomcat</display-name>
            <description>
               Welcome to Tomcat
            </description>


          <!-- JSPC servlet mappings start -->

              <servlet>
                  <servlet-name>UrlTestServlet</servlet-name>
                  <servlet-class>com.lcl.UrlTestServlet</servlet-class>
              </servlet>
           

              <servlet-mapping>
                  <servlet-name>UrlTestServlet</servlet-name>
                  <url-pattern>/UrlTestServlet</url-pattern>
              </servlet-mapping>


          <!-- JSPC servlet mappings end -->
           <welcome-file-list>
                  <welcome-file>index.htm</welcome-file>
              </welcome-file-list>
          </web-app>

          好了,啟動tomcat,訪問:http://127.0.0.1:8888/xmlhttpTest/work/(如果你的tomcat端口是8080,就改一下)
          看到結(jié)果了吧,真的很不錯.不用刷新頁面,就讓htm前臺頁面和后臺進(jìn)行了一次數(shù)據(jù)交換.

          你甚至可以在不同的服務(wù)器之間進(jìn)行數(shù)據(jù)交換,比如一個mis系統(tǒng),和一個gis系統(tǒng),想整合成一個系統(tǒng),原先我們是用了一個frame,左邊的是mis,右邊的是gis,通過javascript在兩個系統(tǒng)間交換數(shù)據(jù).如果用xmlhttp技術(shù),完全沒必要這樣了.



          本文引用通告地址: http://blog.csdn.net/lcllcl987/services/trackbacks/425242.aspx
          posted @ 2005-10-26 17:26 快樂的射手 閱讀(364) | 評論 (0)編輯 收藏

           

          根據(jù)客戶需要,我們增加了一個統(tǒng)計(jì)表,用來匯總統(tǒng)計(jì)數(shù)據(jù),統(tǒng)計(jì)數(shù)據(jù)的產(chǎn)生,需要根據(jù)一個基本表,動態(tài)執(zhí)行sql語句.在存儲過程中,動態(tài)生成sql語句然后執(zhí)行,需要用到Execute Immediate命令.我想寫一個通用的統(tǒng)計(jì)用存儲過程,似乎不大好辦,if語句的應(yīng)用在所難免了.呵呵.

          特此存檔.

          create or replace procedure P_INSERT_XT_TJ_MX(sDate in varchar2) is
          --author:李春雷
          --create time:2005.8.4
          --purpose:更新xt_tj_mx表
                 sXh xt_tj.xh%type;                          --主表序號
                 sDwmc xt_tj.dwmc%type;
                 sDw xt_tj.dw%type;
                 sDwzd xt_tj.dwzd%type;
                 sTable xt_tj.hzbmc%type;
                 sSjzd xt_tj.sjzd%type; 
                 sSqlStr varchar2(300);
                 iCount int;      
                 cursor curSort is
                        select xh,dwmc,hzbmc,sjzd,dwzd,dw from xt_tj ;
          begin     
               open curSort;
               loop
                   fetch curSort into sXh,sDwmc,sTable,sSjzd,sDwzd,sDw;        
                   exit when curSort%notfound;
                   sSqlStr := 'select count(*)  from '|| sTable || ' where to_char('||sSjzd||','||'''YYYYMM'')=:sDate and '||sDwzd ||
                              ' in (select dwxh from xt_dw connect by  prior dwxh = dwfxh start with dwxh =:sDw)';
                   Execute Immediate sSqlStr into iCount using sDate,sDw;
                   delete from xt_tj_mx where fxh=sXh and sjz=sDate;
                   insert into xt_tj_mx(xh,fxh,hzsm,sjz)values(SEQ_XT_TJ_MX.NEXTVAL,sXh,iCount,sDate);
                   commit;
               end loop;
          end P_INSERT_XT_TJ_MX;


          作者Blog:http://blog.csdn.net/lcllcl987/
          posted @ 2005-10-26 17:22 快樂的射手 閱讀(1443) | 評論 (2)編輯 收藏

          主站蜘蛛池模板: 蛟河市| 囊谦县| 梓潼县| 神木县| 大荔县| 集安市| 灵宝市| 怀安县| 庆元县| 孝感市| 洞口县| 澄迈县| 岗巴县| 边坝县| 子洲县| 措勤县| 江油市| 遂宁市| 瑞安市| 忻州市| 石泉县| 常宁市| 闵行区| 泾川县| 渑池县| 饶河县| 德钦县| 古田县| 东乡族自治县| 正宁县| 于都县| 泾阳县| 太康县| 千阳县| 屏南县| 宝应县| 濉溪县| 登封市| 绿春县| 湟源县| 定日县|