<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    不能停止

    運動,游玩,學習,我的愛不能停止

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

    2005年10月26日 #

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

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

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

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

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

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

      ·每次強制地運行了 dump tran with no_log (因為數(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 是卸出設備的名稱。用系統(tǒng)過程 sp_helpdevice 可以獲得設備的信息。

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

      dump database my_db

      to db_bk_dev

      2、備份事務日志

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

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

      備份事務日志的命令格式為:

      dump transaction database_name

      [to dump_device]

      [with truncate_only|with no_log|with no_truncate]

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

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

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

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

      dump transaction db160

      to db_log_bk_dev

      with truncate_only

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

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

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

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

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

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

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

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

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

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

      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//實際尺寸為:20m

      35120//實際尺寸為:10m

      45120//實際尺寸為:10m

      31024//實際尺寸為:2m

      42048//實際尺寸為:4m

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

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

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

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

      load database 命令語法是:

      load database database_name

      from dump_device

      load transaction 命令的語法是:

      load transaction database_name

      from dump_device

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

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

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

      ·創(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)運行狀況,及時處理系統(tǒng)錯誤;

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

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

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

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

      spidstatusloginamehostnameblkdbnamecmd

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

      1runningsascosysv0masterselect

      2sleepingnull0masternetwork handle

      3sleepingnull0masterdeadlock tune

      4sleepingnull0mastermirror handler

      5sleepingnull0masterhousekeeper

      6sleepingnull0mastercheckpoint sleep

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

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

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

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

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

      namerow_totalreserveddataindex_sizeunused

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

      syslogsnot avail32kb32kb0kbnot avail

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

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

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

      說明:sp_monitor 顯示sql server 的歷史統(tǒng)計數(shù)字,下表是某系統(tǒng)的統(tǒng)計數(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)本次運行統(tǒng)計的上一次時間、本次時間、間隔秒數(shù)、cpu占用、io占用、收發(fā)包情況、系統(tǒng)讀入寫出情況等信息

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

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

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

      sp_password caller_password,new_password [,loginame]

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

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

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

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

    [不能上傳文件,只好列出內(nèi)容]
    Sybase學習體會
    原創(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++
    安裝順序和依賴關系說明:
    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 順序為前面所述的順序。
    如果以前安裝過,用
    rpm -e 'rpm -qa|grep sybase'卸載
    2、 執(zhí)行$SYBASE/install/sybinstall.sh,它將創(chuàng)建sybase用戶和口令,用passwd將sybase的用戶口令修改為所要設定的口令。
    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文件
    其他服務建立文件也如此。
    注意輸入數(shù)據(jù)文件時,如果沒有建立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、 設置完成后,重新用sybase登陸[他會自動設定完成環(huán)境變量],建一個目錄存放日后的數(shù)據(jù)庫文件
    5、 重新restart computer
    6、 sybase登陸x-windows,執(zhí)行$SYBASE/ASE-12_5/bin/srvbuild,選擇完四個服務器,鍵入數(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,相應地,Backup Server自動命名為TEST_back,Monitor Server命名為TEST_mon,XP Server命名為TEST_XP。點擊OK按鈕,進入各Server的配置過程。
    4、配置Adaptive Server。填寫或選擇以下內(nèi)容:
    Master device path(主設備路徑):/db/sybsystem/master.dat
    Master device size(MB)(主設備大小):60
    Master database size(MB)(主數(shù)據(jù)庫大小):20
    Sybsystemprocs device path(系統(tǒng)存儲過程設備路徑):/db/sybsystem/systemprocs.dat
    Sybsystemprocs device size(MB)(系統(tǒng)存儲過程設備大小):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(主機名):192.168.0.1
    Port number(監(jiān)聽端口號):4100
    點擊OK按鈕,進入下一配置過程。
    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
    點擊OK按鈕,進入下一配置過程。
    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
    點擊OK按鈕,進入下一配置過程。
    7、配置XP Server。填寫或選擇以下內(nèi)容:
    Transport type:tcp
    Host name:192.168.0.1
    Port number:4400
    點擊Build Server按鈕,開始創(chuàng)建Server,這時出現(xiàn)一個窗口,你可以看到整個創(chuàng)建過程。如果有顯示以下類似信息,表示創(chuàng)建Server成功:
    ……
    Server TEST was successfully created.
    Done.
    ……
    8、創(chuàng)建Server成功后,系統(tǒng)就會問你是否將Server本地化(Localize),即是用另外一種語言代替默認的us_english language,以及改變默認的iso_1字符集和Binary索引順序。選擇是NO。為什么呢?曾經(jīng)把中文(eucgb)設為默認字符集,反而不支持中文大字集,因為eucgb是基于GB2312標準的。查了Sybase的手冊中一些關于本地化的說明,得出的印象是,在ASE中有Unicode轉(zhuǎn)換機制,可以轉(zhuǎn)換來自不同字符集的服務器或客戶端的數(shù)據(jù)。應用也證明,使用ASE的默認的語言、字符集、索引順序來處理中文是可行的。
    9、安裝成功后要做的幾件事。首先在Linux控制臺模式下以sybase用戶登錄。
    ① 確認Server是否在運行。使用$SYBASE/install/下的showserver命令($SYBASE表示sybase的安裝目錄),應該可看見系統(tǒng)有幾個sybase相關進程。或者用$SYBASE/bin/下的isql -Usa -P -STEST命令來登錄Server,應該可以看見isql的提示符"1>",再鍵入exit就可以退出了。
    ② 用sp_password null, 新口令
    go將sa的用戶口令改掉。
    ]
    7、 成功后將自動啟動數(shù)據(jù)庫。可用isql -Usa -Ppassword -Sserver_name連進數(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設定sa的用戶口令。
    a) sp_password null,Sybase
    b) go
    10、 用shutdown關閉數(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 \

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

    數(shù)據(jù)庫設備的建立
    重啟在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ù)據(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就可以連進testdb用戶數(shù)據(jù)庫了。
    注意口令長度不得小于6位,如果口令以數(shù)字開頭,還需要以單引號括起來。
    Sp_addlogin提供用戶能訪問數(shù)據(jù)庫的權(quán)限,如果沒有指定用戶具體訪問那個數(shù)據(jù)庫,則還需要在相應數(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ù)庫應用帳號。較為繁瑣。可通過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的口令要進行修改。
    sp_password old_password, new_password, login name
    1> sp_password null, nextip, sa
    2> go
    3>

    sp_dboption 是用來打開或關閉數(shù)據(jù)庫的選項 [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ù)據(jù)庫通用的一些選項。
    7、 當想要對表進行手工插入identity時,如果沒有set identity_insert table_name on/off打開,
    就要打開,如果一旦打開,每一筆記錄都要手工指明identity值,而不是自動插入形式,切記。如果變回off后,則identity記數(shù)從表中最大的identity值開始記數(shù)。例最大值為10,則記數(shù)從11開始,中間就有gap出現(xiàn)了。
    8、 identity默認精度為18位,如果達到了,就需要增加其精度。可用alter table table-name
    modify identity_col_name, numeric(20,0)進行修改精度。
    9、 使數(shù)據(jù)庫自動為新建表建立一個隱藏的identity字段為sp_dboption db_name , "auto identity", "true"
    為identity設置精度,由管理員操作sp_configure "size of auto identity", 精度位數(shù)
    如sp_configure "size of auto identity",15
    10、 在當前數(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() 返回當前用戶或數(shù)據(jù)庫
    12、 col_length("表名", "字段名") 返回指定字段的長度/ datalength("列名")實際存儲長度對varchar/期于是創(chuàng)建時指定的長度
    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、 獲取當前時間為select getdate()
    16、 當前變量申明 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用戶進入要變更的數(shù)據(jù)庫執(zhí)行 sp_changedbowner user,dbname
    23、 設置用戶的默認登陸數(shù)據(jù)庫::sa用戶進入要設定的數(shù)據(jù)庫執(zhí)行:
    sp_defaultdb user,dbname
    24、 以#開頭的臨時表只是在某一過程或sql操作中存在,一旦過程或sql操作結(jié)束,則臨時表就不存在了,如果再要訪問就回出錯。解決是不建立以#為preffix的表。
    25、 要想直接手工插入值到表中identity字段,需要打開該表的identity_insert選項。
    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、 指定某個過程什么時候執(zhí)行后用waitfor delay "hh24:mi:ss",并且用了這種方式后該connection不會有什么響應直到過程被執(zhí)行完成。
    如半個小時后執(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ù)值,最終都會改變
    如:
    declare @First int
    select @First=123
    exec test_p @second=@First output
    //運行結(jié)果為999
    則@second和@First 都為999
    29、 過程名改名sp_rename oldname, newName
    30、 ct-library編程,在sybase提供的linux中有,環(huán)境搭建要點,要確定$SYBASE設定了,$SYBASE_OCS設定open client所在目錄即可不要是全目錄,還要設定平臺$SYBPLATFORM=linux; 具有這三個環(huán)境變量,open client提供的sample才可大部分編譯通過;其中有幾個程序由于找不到-lsrv,而編譯通不過。推測可能涉及了open server的東西,所以沒有通過。
    例子程序可以單獨編譯,如make 例子名 [F.E make firstapp
    ]
    設定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
    同樣要設好SYBASE SYBASE_OCS SYBPLATFORM
    并且要保證interface文件中連接服務器是對的。
    同時對于想要連接的服務器名要在環(huán)境變量DSQUERY中設好。
    如:
    export DSQUERY=accunetsvr

    注意,用hostname作為連接名時,確保/etc/hosts中的IP和hostname有對應且對應正確。

    32、 db-library 經(jīng)實驗數(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ù)進行編譯樣式:
    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的應用程序運行其他機上訪問另一臺機(數(shù)據(jù)庫所在的機器).在客戶機上需要裝sybase-comom 和syabse-openclient組件。需要設定對SYBASE / DSQUERY. 其中sybase要設定為指向interfaces文件的路徑,DSQUERY要設定為要遠程訪問的主機名 (adapative_server_name).將遠程主機的interfaces拷貝到客戶機上SYBASE指定的目錄即可。注意如果沒有設定 DSQUERY,則程序默認去找sybase的數(shù)據(jù)庫,這時如果沒有該數(shù)據(jù)庫名字在interfaces文件中,程序就會不能運行。
    [實際只需設定好DSQUERY環(huán)境變量和interface文件即可]
    34、 DB-library應用在多線程中每次都要重新連接數(shù)據(jù)庫,否則一定時間后連接會被操作系統(tǒng)重置掉。 Connection reset by peer
    35、 DB-library的錯誤捕捉。系統(tǒng)提供一種系統(tǒng)錯誤信息函數(shù)自動在出現(xiàn)錯誤時去捕捉顯示錯誤信息。
    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)進行錯誤信息判斷,如果等于-1則出現(xiàn)錯誤。特例調(diào)用沒有select的過程:: dbnocount設為on::沒有select的sql語句::sql寫錯::sql執(zhí)行錯誤等都可以出現(xiàn)-1所以要小心判斷處理。
    36、 Jdbc連接sybase。首先需要jconn2.jar和jTDS2.jar文件,在環(huán)境變量CLASSPATH設定好。
    Class.forName("com.sybase.jdbc2.jdbc.SybDriver");
    url結(jié)構(gòu)為: jdbc:sybase:Tds:dbserver_ip/dbserver_hostname:dbserver_port/dbname
    dbserver的端口為數(shù)據(jù)庫服務器上的interfaces文件中對應的數(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 時一定是numeric型。如果想要創(chuàng)建數(shù)據(jù)庫自動為新建的所有表增加一個隱藏的identity字段,用[sp_dboption database_name, "auto identity", "true"]。在檢索數(shù)據(jù)的時候必須隱式加上SYB_IDENTITY_COL作為隱藏的identity列,例如select SYB_IDENTITY_COL, sn_name from t-subnet
    默認的隱藏精度大小為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、 實現(xiàn)用sql語句進行分頁查詢方法:
    A. 創(chuàng)建一個臨時表帶identity字段 select id=indentity(20), * into #table_anme from table_name where 條件
    B. 然后根據(jù)id進行檢索第n條到m條數(shù)據(jù) (也可用between and)
    C. 最后Drop掉該臨時表
    D. 注意要打開數(shù)據(jù)庫的select into /bulk copy屬性 sp_dboption database_name, "select into/bulk copy", "true"才能進行select into操作
    E. mssql中格式為select identity(int) id, * from #table_name from table_name where 條件
    40、 linux下訪問sql-server用db-library與sybase相同要素。只是遠程訪問端口為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
    進去執(zhí)行dump tran db_name with truncate_only進行清空操作
    或者dump tran db_name to 'path/file'進行備份在執(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、 游標在ms-sql和sybase中差別主要為while 判斷的全局變量不同。
    Sybase中為@@sqlstatus = 0
    Ms-sql中為@@FETCH_STATUS = 0
    關閉游標時在ms-sql中除了[close 游標名] 還要增加[deallocate 游標名]

    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、 日期計算在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編程時,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í)行時間用: isql -Unextip -Pnextip -Sleon1 -p
    進入即可,加小寫-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、 細小區(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 快樂的射手 閱讀(1152) | 評論 (0)編輯 收藏

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

    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(){//客戶端和服務端的通訊
    xmlHttp.open("post","xmlHttp.send(XML);
    var showstr=xmlHttp.responseText;
    alert(showstr);
    }

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


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

    /*
     * 創(chuàng)建日期 2005-4-7
     *
     * TODO 要更改此生成的文件的模板,請轉(zhuǎn)至
     * 窗口 - 首選項 - 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)至
     * 窗口 - 首選項 - 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前臺頁面和后臺進行了一次數(shù)據(jù)交換.

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



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

     

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

    特此存檔.

    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 快樂的射手 閱讀(1439) | 評論 (2)編輯 收藏

    主站蜘蛛池模板: 日韩在线播放全免费| 50岁老女人的毛片免费观看| 国产在线不卡免费播放| 亚洲综合无码无在线观看| 在线观看日本免费a∨视频| 亚洲精品国产福利在线观看| 69式互添免费视频| 亚洲成aⅴ人片在线影院八| 麻豆高清免费国产一区| 亚洲一区二区三区免费视频| 色婷婷7777免费视频在线观看| 亚洲一级毛片视频| 日日AV拍夜夜添久久免费| 免费一级毛片在线播放放视频| 中文字幕专区在线亚洲| 免费在线观影网站| 亚洲制服丝袜一区二区三区| 四虎在线免费播放| 四虎影视在线看免费观看| 亚洲国产a∨无码中文777| 亚洲成人在线免费观看| 亚洲AV无码一区二区大桥未久 | 一级黄色免费毛片| 日本亚洲成高清一区二区三区| 久久国产色AV免费观看| 色多多A级毛片免费看| 久久久久亚洲精品无码网址 | **真实毛片免费观看| 亚洲AV男人的天堂在线观看| 免费在线黄色网址| 免费福利在线视频| 亚洲日韩精品无码专区加勒比| 免费国产a国产片高清| 美女在线视频观看影院免费天天看| 亚洲av片不卡无码久久| 免费a级毛片网站| 亚洲黄色免费观看| 免费的黄色网页在线免费观看| 久久精品国产亚洲AV麻豆王友容 | 国产人在线成免费视频| 男女猛烈无遮掩视频免费软件|