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

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

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

    不能停止

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

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

    2005年10月26日 #

    數據庫日常維護工作是系統管理員的重要職責。其內容主要包括以下幾個部分:

      一、備份系統數據

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

      1、備份數據庫

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

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

      ·每次強制地運行了 dump tran with no_log (因為數據庫的磁盤空溢出);

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

      卸出數據庫的命令為:

      dump database database_name

      to dump_device

      database_name 是要卸出的數據庫名稱,dump_device 是卸出設備的名稱。用系統過程 sp_helpdevice 可以獲得設備的信息。

      下面一條命令用來卸出數據庫 my_db :

      dump database my_db

      to db_bk_dev

      2、備份事務日志

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

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

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

      dump transaction database_name

      [to dump_device]

      [with truncate_only|with no_log|with no_truncate]

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

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

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

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

      dump transaction db160

      to db_log_bk_dev

      with truncate_only

      3、備份數據庫及其日志間的相互作用

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

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

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

      二、萬一系統失敗時恢復數據庫系統

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

      要恢復數據庫按如下步驟去做:

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

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

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

      select segmap,size from sysusages

      where dbid =

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

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

      segmapsize

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

      310240//實際尺寸為:20m

      35120//實際尺寸為:10m

      45120//實際尺寸為:10m

      31024//實際尺寸為:2m

      42048//實際尺寸為:4m

      4、用 drop database 命令刪除毀壞設備上的數據庫。如果系統報錯,用dbcc dbrepair 命令的 dropdb 選項。

      5、刪除數據庫后,用 sp_dropdevice 刪除毀壞了的設備。

      6、用 disk init 初始化新的數據庫設備。

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

      對上例,命令為:

      create database mydb

      on datadev1=20,datadev2=10

      log on logdev1=10

      8、用 alter database 命令重建其余入口。在此例中,在datadev1上分配更多的空間,命令為:

      alter database mydb on datadev1=2

      9、用 load database 重新裝入數據庫,然后用 load tran 裝入前面卸出的日志。

      load database 命令語法是:

      load database database_name

      from dump_device

      load transaction 命令的語法是:

      load transaction database_name

      from dump_device

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

      二、產生用戶信息表,并為信息表授權;

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

      ·創建表的命令為:

      create table table_name

      ( column_1 datatype [null | not null | identity],

      column_2 ……

      )

      go

      alter table table_name

      add primary key (column_list)

      go

      ·刪除表的命令格式為:

      drop table table_name

      go

      ·為表授權的命令格式為:

      grant {all|permission_list}

      on table_name to user_name

      go

      ·收回權限的命令格式為

      revoke {all|permission_list}

      on table_name from user_name

      go

      三、監視系統運行狀況,及時處理系統錯誤;

      系統管理員的另一項日常工作是監視系統運行情況。主要有以下幾個方面:

      1、監視當前用戶以及進程的信息

      使用系統過程:sp_who

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

      spidstatusloginamehostnameblkdbnamecmd

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

      1runningsascosysv0masterselect

      2sleepingnull0masternetwork handle

      3sleepingnull0masterdeadlock tune

      4sleepingnull0mastermirror handler

      5sleepingnull0masterhousekeeper

      6sleepingnull0mastercheckpoint sleep

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

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

      2、監視目標占用空間情況

      使用系統過程:sp_spaceused

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

      namerow_totalreserveddataindex_sizeunused

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

      syslogsnot avail32kb32kb0kbnot avail

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

      3、監視 sql server 統計數字

      使用系統過程:sp_monitor

      說明:sp_monitor 顯示sql server 的歷史統計數字,下表是某系統的統計數字:

      last_runcurrent_runseconds

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

      may 13 2000 1:27pmmay 13 2000 3:01pm5678

      cpu_busyio_busyidle

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

      16(6)-0%0(0)-0%5727(5672)-99%

      packets_receivedpackets_sentpacket_errors

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

      21(17)100(97)0(0)

      total_readtotal_writetotal_errorsconnections

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

      785(366)311(113)0(0)3(2)

      上表依次給出該系統本次運行統計的上一次時間、本次時間、間隔秒數、cpu占用、io占用、收發包情況、系統讀入寫出情況等信息

      四、保證系統數據安全,周期更改用戶口令;

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

      更改用戶口令是通過調用系統過程sp_password 來實現的。sp_password 的語法為:

      sp_password caller_password,new_password [,loginame]

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

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

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

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

    [不能上傳文件,只好列出內容]
    Sybase學習體會
    原創:戴黎鳴
    第一大塊: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、 執行$SYBASE/install/sybinstall.sh,它將創建sybase用戶和口令,用passwd將sybase的用戶口令修改為所要設定的口令。
    3、 在root用戶登錄文件中加入以下語句(以bash用戶,.bash_profile為例。更改系統內存值為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文件
    其他服務建立文件也如此。
    注意輸入數據文件時,如果沒有建立raw device 將要指定存放的目錄和數據庫數據文件。
    3、 修改后用svrbuildres -r $SYBASE/ASE/init/sample_resource_files/
    srvbuild.adaptive_server.rs執行將建立數據庫。
    } /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登陸[他會自動設定完成環境變量],建一個目錄存放日后的數據庫文件
    5、 重新restart computer
    6、 sybase登陸x-windows,執行$SYBASE/ASE-12_5/bin/srvbuild,選擇完四個服務器,鍵入數據,執行創建。
    [
    在X-Windows中使用srvbuild工具配置ASE產品
    1、用sybase用戶登錄X-Windows,執行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。填寫或選擇以下內容:
    Master device path(主設備路徑):/db/sybsystem/master.dat
    Master device size(MB)(主設備大小):60
    Master database size(MB)(主數據庫大小):20
    Sybsystemprocs device path(系統存儲過程設備路徑):/db/sybsystem/systemprocs.dat
    Sybsystemprocs device size(MB)(系統存儲過程設備大小):60
    Sybsystemprocs database size(MB)(系統存儲過程數據庫大小):60
    Error log path(錯誤日志路徑):/opt/sybase-11.9.2/install/TEST.log
    Transport type(傳輸協議類型):tcp
    Host name(主機名):192.168.0.1
    Port number(監聽端口號):4100
    點擊OK按鈕,進入下一配置過程。
    5、配置Backup Server。填寫或選擇以下內容:
    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。填寫或選擇以下內容:
    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。填寫或選擇以下內容:
    Transport type:tcp
    Host name:192.168.0.1
    Port number:4400
    點擊Build Server按鈕,開始創建Server,這時出現一個窗口,你可以看到整個創建過程。如果有顯示以下類似信息,表示創建Server成功:
    ……
    Server TEST was successfully created.
    Done.
    ……
    8、創建Server成功后,系統就會問你是否將Server本地化(Localize),即是用另外一種語言代替默認的us_english language,以及改變默認的iso_1字符集和Binary索引順序。選擇是NO。為什么呢?曾經把中文(eucgb)設為默認字符集,反而不支持中文大字集,因為eucgb是基于GB2312標準的。查了Sybase的手冊中一些關于本地化的說明,得出的印象是,在ASE中有Unicode轉換機制,可以轉換來自不同字符集的服務器或客戶端的數據。應用也證明,使用ASE的默認的語言、字符集、索引順序來處理中文是可行的。
    9、安裝成功后要做的幾件事。首先在Linux控制臺模式下以sybase用戶登錄。
    ① 確認Server是否在運行。使用$SYBASE/install/下的showserver命令($SYBASE表示sybase的安裝目錄),應該可看見系統有幾個sybase相關進程。或者用$SYBASE/bin/下的isql -Usa -P -STEST命令來登錄Server,應該可以看見isql的提示符"1>",再鍵入exit就可以退出了。
    ② 用sp_password null, 新口令
    go將sa的用戶口令改掉。
    ]
    7、 成功后將自動啟動數據庫。可用isql -Usa -Ppassword -Sserver_name連進數據庫。
    isql -Usa -P -Ssybase
    8、 執行1>sp_diskdefault master , defaultoff
    2>go
    將以后用戶數據庫數據文件不要建立在master所在的數據文件中。
    9、 用sp_password oldpassword,newpassword設定sa的用戶口令。
    a) sp_password null,Sybase
    b) go
    10、 用shutdown關閉數據庫。
    11、 重新啟動數據庫用$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 \

    關閉數據庫:
    用sa用戶進入數據庫執行shutdown命令即可完成數據庫的關閉。

    數據庫設備的建立
    重啟在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
    建立數據庫設備后就可以建立用戶數據庫
    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
    建立用戶數據庫的用戶
    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用戶數據庫了。
    注意口令長度不得小于6位,如果口令以數字開頭,還需要以單引號括起來。
    Sp_addlogin提供用戶能訪問數據庫的權限,如果沒有指定用戶具體訪問那個數據庫,則還需要在相應數據庫中用sp_adduser user_name, user_password建一個相同名和口令的用戶。
    例如
    1> sp_adduser ldai, dlm
    2> go
    3>

    如果用sa用戶創建了一個用戶數據庫,想將他的所有者由sa改為其他用戶。
    確定其他用戶只具有addlogin,不具有adduesr。如果有addusers則要sp_dropuser刪除掉,否則不能賦給他所有者權限。
    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
    將更改數據庫owner了,注master不能更改

    建用戶有兩中方式,上面這一種是建立用戶帳號,再在具體數據庫中建立該數據庫應用帳號。較為繁瑣。可通過sp_addlogin加其他參數,一步到位將數據庫用戶建立起來。
    Sp_addlogin user_name,user_password,所用數據庫名稱,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>

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

    sp_dboption 是用來打開或關閉數據庫的選項 [select into/bulkcopy]。只用這樣數據庫才能執行如select identity(int) id0,* into #temp1 from tablename這樣的sql語句。查看是否打開option用sp_helpdb就可以查看。Sp_dboption只能在master 數據庫中引用。是否允許列字段為空還是不為空也是用這個命令。
    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、增加自定義的數據類型為sp_addtype datatypename ,"length",
    FE: sp_addtype tid, "char(6)", "not null"
    2、查看某一用戶是否有什么權限,sp_helprotect user_name
    4、 修改用戶出始登陸的數據庫,命令為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可設置數據庫通用的一些選項。
    7、 當想要對表進行手工插入identity時,如果沒有set identity_insert table_name on/off打開,
    就要打開,如果一旦打開,每一筆記錄都要手工指明identity值,而不是自動插入形式,切記。如果變回off后,則identity記數從表中最大的identity值開始記數。例最大值為10,則記數從11開始,中間就有gap出現了。
    8、 identity默認精度為18位,如果達到了,就需要增加其精度。可用alter table table-name
    modify identity_col_name, numeric(20,0)進行修改精度。
    9、 使數據庫自動為新建表建立一個隱藏的identity字段為sp_dboption db_name , "auto identity", "true"
    為identity設置精度,由管理員操作sp_configure "size of auto identity", 精度位數
    如sp_configure "size of auto identity",15
    10、 在當前數據庫中創建另外一個數據庫的表或其他對象, create other_db_name..object_name
    如: create table newdb..t_dns_gs (name varchar(255))
    11、 select user_name() /user / db_name() 返回當前用戶或數據庫
    12、 col_length("表名", "字段名") 返回指定字段的長度/ datalength("列名")實際存儲長度對varchar/期于是創建時指定的長度
    13、 isNull(exp1, exp_value) 為如果exp1為null則用exp_value替代
    14、 convert(轉換后的類型和長度,要轉換的類型值)
    如: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、 在一個過程中調用另外一個過程,
    例如:
    create procedure test_one @test_proc_name varchar(255)
    as exec @test_proc_name
    20、 記住在sybase中執行sql是用'go'不是以';'為結束兼執行
    21、 創建數據庫用戶:sa用戶 master庫中,sp_addlogin user,password,dbname
    22、 變更數據屬主::sa用戶進入要變更的數據庫執行 sp_changedbowner user,dbname
    23、 設置用戶的默認登陸數據庫::sa用戶進入要設定的數據庫執行:
    sp_defaultdb user,dbname
    24、 以#開頭的臨時表只是在某一過程或sql操作中存在,一旦過程或sql操作結束,則臨時表就不存在了,如果再要訪問就回出錯。解決是不建立以#為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、 指定某個過程什么時候執行后用waitfor delay "hh24:mi:ss",并且用了這種方式后該connection不會有什么響應直到過程被執行完成。
    如半個小時后執行過程test_p
    begin
    waitfor delay "0:30:00"
    exec test_p
    end
    27、 調用帶返回參數的過程完整例子
    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、 過程中有返回參數時,如果預先設定參數值,最終都會改變
    如:
    declare @First int
    select @First=123
    exec test_p @second=@First output
    //運行結果為999
    則@second和@First 都為999
    29、 過程名改名sp_rename oldname, newName
    30、 ct-library編程,在sybase提供的linux中有,環境搭建要點,要確定$SYBASE設定了,$SYBASE_OCS設定open client所在目錄即可不要是全目錄,還要設定平臺$SYBPLATFORM=linux; 具有這三個環境變量,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文件中連接服務器是對的。
    同時對于想要連接的服務器名要在環境變量DSQUERY中設好。
    如:
    export DSQUERY=accunetsvr

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

    32、 db-library 經實驗數據庫連接結構支持線程間的傳遞,將函數打包用下列樣式:
    gcc -c -I. -I/opt/sybase-12.5/OCS/include s_fcts.c
    ar r libleon.a s_fcts.o
    rm -rf *.o
    打包完畢
    調用函數進行編譯樣式:
    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的應用程序運行其他機上訪問另一臺機(數據庫所在的機器).在客戶機上需要裝sybase-comom 和syabse-openclient組件。需要設定對SYBASE / DSQUERY. 其中sybase要設定為指向interfaces文件的路徑,DSQUERY要設定為要遠程訪問的主機名 (adapative_server_name).將遠程主機的interfaces拷貝到客戶機上SYBASE指定的目錄即可。注意如果沒有設定 DSQUERY,則程序默認去找sybase的數據庫,這時如果沒有該數據庫名字在interfaces文件中,程序就會不能運行。
    [實際只需設定好DSQUERY環境變量和interface文件即可]
    34、 DB-library應用在多線程中每次都要重新連接數據庫,否則一定時間后連接會被操作系統重置掉。 Connection reset by peer
    35、 DB-library的錯誤捕捉。系統提供一種系統錯誤信息函數自動在出現錯誤時去捕捉顯示錯誤信息。
    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() 調用后并且while()處理完后,調用dbcount(dbproc)進行錯誤信息判斷,如果等于-1則出現錯誤。特例調用沒有select的過程:: dbnocount設為on::沒有select的sql語句::sql寫錯::sql執行錯誤等都可以出現-1所以要小心判斷處理。
    36、 Jdbc連接sybase。首先需要jconn2.jar和jTDS2.jar文件,在環境變量CLASSPATH設定好。
    Class.forName("com.sybase.jdbc2.jdbc.SybDriver");
    url結構為: jdbc:sybase:Tds:dbserver_ip/dbserver_hostname:dbserver_port/dbname
    dbserver的端口為數據庫服務器上的interfaces文件中對應的數據庫端口。
    例子:
    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、 創建identity列,如果是create table 時一定是numeric型。如果想要創建數據庫自動為新建的所有表增加一個隱藏的identity字段,用[sp_dboption database_name, "auto identity", "true"]。在檢索數據的時候必須隱式加上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 創建一個新的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、 實現用sql語句進行分頁查詢方法:
    A. 創建一個臨時表帶identity字段 select id=indentity(20), * into #table_anme from table_name where 條件
    B. 然后根據id進行檢索第n條到m條數據 (也可用between and)
    C. 最后Drop掉該臨時表
    D. 注意要打開數據庫的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
    連接數據庫:[需要這三個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、 執行sybase過程中會有日志滿了或存儲空間不夠了,出現supsend狀態,可用
    isql -Usa -Ppassword -Sdbservername
    進去執行dump tran db_name with truncate_only進行清空操作
    或者dump tran db_name to 'path/file'進行備份在執行清空。
    44、 ms-sql中的substring(string, start, length)函數參數,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的常用函數對比
    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執行時間用: isql -Unextip -Pnextip -Sleon1 -p
    進入即可,加小寫-p參數
    53、 MS-SQL中創建數據庫
    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、 細小區別
    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的技術了,今天總算有點時間,做個一個最初的體驗.馬上就愛上了它.
    如果你想不刷新頁面就可以與后臺進行數據交互,或者在異構系統之間交換數據,xmlhttp技術是個不錯的選擇.
    下面是我的一個很小的體驗程序,參考了csdn網友s_phoenix()給人的回貼.
    首先建一個tomcat的web項目.

    1:-------index.htm文件內容如下:

    <!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();">查看將要傳輸的xml</button><br/>
    <button onclick="action();">朝服務器傳送xml,并接收服務器回應</button>
    </BODY>
    </HTML>


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

    /*
     * 創建日期 2005-4-7
     *
     * TODO 要更改此生成的文件的模板,請轉至
     * 窗口 - 首選項 - 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 要更改此生成的類型注釋的模板,請轉至
     * 窗口 - 首選項 - 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("數據交換成功:返回" + 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,就改一下)
    看到結果了吧,真的很不錯.不用刷新頁面,就讓htm前臺頁面和后臺進行了一次數據交換.

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



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

     

    根據客戶需要,我們增加了一個統計表,用來匯總統計數據,統計數據的產生,需要根據一個基本表,動態執行sql語句.在存儲過程中,動態生成sql語句然后執行,需要用到Execute Immediate命令.我想寫一個通用的統計用存儲過程,似乎不大好辦,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)編輯 收藏

    2005年10月21日 #

    MSXML中提供了Microsoft.XMLHTTP對象,能夠完成從數據包到Request對象的轉換以及發送任務。
    創建XMLHTTP對象的語句如下:
    Set objXML = CreateObject("Msxml2.XMLHTTP") 或
    Set objXML = CreateObject(“Microsoft.XMLHTTP”)
    ' Or, for version 3.0 of XMLHTTP, use:
    ' Set xml = Server.CreateObject("MSXML2.ServerXMLHTTP")
    對象創建后調用Open方法對Request對象進行初始化,語法格式為:
    poster.open http-method, url, async, userID, password
    Open方法中包含了5個參數,前三個是必要的,后兩個是可選的(在服務器需要進行身份驗證時提供)。參數的含義如下所示: 
    http-method: HTTP的通信方式,比如GET或是 POST
    url: 接收XML數據的服務器的URL地址。通常在URL中要指明 ASP或CGI程序
    async: 一個布爾標識,說明請求是否為異步的。如果是異步通信方式(true),客戶機就不等待服務器的響應;如果是同步方式(false),客戶機就要等到服務器返回消息后才去執行其他操作
    userID 用戶ID,用于服務器身份驗證
    password 用戶密碼,用于服務器身份驗證
    XMLHTTP對象的Send方法
    用Open方法對Request對象進行初始化后,調用Send方法發送XML數據:
    poster.send XML-data
    Send方法的參數類型是Variant,可以是字符串、DOM樹或任意數據流。發送數據的方式分為同步和異步兩種。在異步方式下,數據包一旦發送完畢,就結束Send進程,客戶機執行其他的操作;而在同步方式下,客戶機要等到服務器返回確認消息后才結束Send進程。
    XMLHTTP對象中的readyState屬性能夠反映出服務器在處理請求時的進展狀況。客戶機的程序可以根據這個狀態信息設置相應的事件處理方法。屬性值及其含義如下表所示:
    值 說明
    0 Response對象已經創建,但XML文檔上載過程尚未結束
    1 XML文檔已經裝載完畢
    2 XML文檔已經裝載完畢,正在處理中
    3 部分XML文檔已經解析
    4 文檔已經解析完畢,客戶端可以接受返回消息
    客戶機處理響應信息
    客戶機接收到返回消息后,進行簡單的處理,基本上就完成了C/S之間的一個交互周期。客戶機接收響應是通過XMLHTTP對象的屬性實現的:
    ● responseTxt:將返回消息作為文本字符串;
    ● responseXML:將返回消息視為XML文檔,在服務器響應消息中含有XML數據時使用;
    ● responseStream:將返回消息視為Stream對象

    ------就是下面這個很簡單的JAVASCRIPT函數SEND(STR,URL)---------------
    使用到的是XMLDOM和XMLHTTP對象.用這種技術的好處是:全JS控制,方便/簡單,比RDS
    或者remote好多了.(前提:服務器端和客戶端都必須安裝IE5或者更高版本),在俺貼的
    那個無刷新在線信息功能使用的也是這種技術.有興趣的朋友可以看看..
    function Send(Str,URL)
    //STR參數是傳入的XML數據,你也可以傳入其他文本數據.
    //不過這個函數需要服務器端處理之后返回XML數據,你也可以修改一下
    //URL參數表示你所要處理數據的ASP文件地址
    {
    var Http = new ActiveXObject("Microsoft.XMLHTTP") //建立XMLHTTP對象
    var Dom = new ActiveXObject("Microsoft.XMLDOM") //建立XMLDOM對象
    Http.open("POST",URL,false)
    //第一個參數的意思是,用"POST"方式發送數據.可以大到4MB,也可以換為"GET".只能256KB
    //第2個參數的意思是數據發送到哪個文件處理
    //第3個參數意思是同步或異步方式.TRUE為異步,FALSE為同步
    Http.send(Str) //開始發送數據.............嘟嘟..
    Dom.async=false //設置為同步方式獲取數據
    Dom.loadXML(Http.responseText)
    //開始獲取服務器端處理后返回的數據.我在這里設置必須為XML數據,否則出錯.
    //你也可以自己修改.使返回的是2進制或者記錄集數據.................................
    if(Dom.parseError.errorCode != 0) //檢查是否發生獲取數據時錯誤
    {
    delete(Http)
    delete(Dom)
    return(false)
    }
    else
    {
    var Back = Dom.documentElement.childNodes.item(0).text
    //得到返回的XML數據,我這里假設處理程序只返回一行XML數據(一個節點)
    delete(Http)
    delete(Dom)
    return(Back) //函數返回數據.......................結束
    }
    }
     
    VAR CAT = Send("<用戶資料><姓名>謝檸檬</姓名></用戶資料>","HTTP://WWW.CHINAASP.COM/VIVA.ASP") //執行函數
    IF(CAT == FALSE)
    {
    ALERT("對不起.處理程序返回的是FALSE.數據處理已經失敗........")
    }
    ELSE
    {
    IF(EVAL(CAT))
    {
    ALERT("OK.數據已經發送成功.兼以處理完成!!!!!!")
    }
    ELSE
    {
    ALERT("對不起.處理程序返回的是FALSE.數據處理已經失敗........")
    }
    }
     
    ===============================VIVA.ASP============================
    ON ERROR RESUME NEXT
    DIM BOBO
    DIM MOMO
    SET BOBO = SERVER.CREATEOBJECT("MICROSOFT.XMLDOM")
    BOBO.ASYNC = FALSE
    BOBO.LOAD REQUEST
    IF BOBO.PARSEERROR.ERRORCODE <> 0 THEN
    RESPONSE.WRITE("<程序處理結果><最終結果>FALSE</最終結果></程序處理結果>")
    ELSE
    SET MOMO = BOBO.DOCUMENTELEMENT
    IF MOMO.CHILDNODES.ITEM(0).TEXT = "謝檸檬" THEN
    RESPONSE.WRITE("<程序處理結果><最終結果>TRUE</最終結果></程序處理結果>")
    ELSE
    RESPONSE.WRITE("<程序處理結果><最終結果>FALSE</最終結果></程序處理結果>")
    END IF
    END IF
    SET BOBO = NOTHING
    posted @ 2005-10-21 14:57 快樂的射手 閱讀(252) | 評論 (0)編輯 收藏

    僅列出標題  
    主站蜘蛛池模板: 91精品全国免费观看青青| 四虎成人精品国产永久免费无码| 国内精品一级毛片免费看| 中文字幕亚洲综合久久男男| 亚洲av成人一区二区三区观看在线 | 1a级毛片免费观看| 亚洲国产人成在线观看69网站| 99免费在线观看视频| 亚洲综合综合在线| 男女免费观看在线爽爽爽视频 | 亚洲偷自精品三十六区| av无码免费一区二区三区| 亚洲a视频在线观看| 成人午夜视频免费| 色老头综合免费视频| 亚洲精品卡2卡3卡4卡5卡区| 无码国产精品一区二区免费16 | 免费无码又爽又黄又刺激网站| 亚洲国产精品日韩| a级毛片免费全部播放| 亚洲综合亚洲国产尤物| 成年性生交大片免费看| 含羞草国产亚洲精品岁国产精品| 亚洲精品第一国产综合境外资源| 青青操免费在线视频| 亚洲熟妇无码爱v在线观看| 在线A级毛片无码免费真人| 免费观看四虎精品成人| 亚洲国产香蕉碰碰人人| 最近中文字幕mv免费高清电影| 风间由美在线亚洲一区| 亚洲另类激情综合偷自拍图| 国产91色综合久久免费分享| 亚洲AV无码精品国产成人| 国产亚洲成av片在线观看| 免费无码A片一区二三区| 特级做a爰片毛片免费看| 亚洲色图视频在线观看| 免费a级毛片在线观看| 97在线视频免费播放| 无码天堂va亚洲va在线va|