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

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

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

    不能停止

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

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

    2005年10月26日 #

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

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

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

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

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

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

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

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

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

      dump database database_name

      to dump_device

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

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

      dump database my_db

      to db_bk_dev

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

      如果事務(wù)日志與數(shù)據(jù)庫(kù)放在同一個(gè)設(shè)備上,則事務(wù)日志不應(yīng)與數(shù)據(jù)庫(kù)分開備份。master 數(shù)據(jù)庫(kù)和小于 4m 的用戶數(shù)據(jù)庫(kù)就是這種情況。一般數(shù)據(jù)庫(kù)系統(tǒng)的數(shù)據(jù)庫(kù)和日志分別放在不同的設(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ù)庫(kù)名稱,dump_device 是備份設(shè)備名稱,僅當(dāng)包含了 with truncate_only 或 with no_log 子句時(shí),才可以備份到設(shè)備。

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

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

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

      dump transaction db160

      to db_log_bk_dev

      with truncate_only

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

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

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

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

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

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

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

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

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

      下面的查詢顯示了分配給數(shù)據(jù)庫(kù) 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ù)庫(kù)。如果系統(tǒng)報(bào)錯(cuò),用dbcc dbrepair 命令的 dropdb 選項(xiàng)。

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

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

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

      對(duì)上例,命令為:

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

      load database 命令語(yǔ)法是:

      load database database_name

      from dump_device

      load transaction 命令的語(yǔ)法是:

      load transaction database_name

      from dump_device

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

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

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

      ·創(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)錯(cuò)誤;

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

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

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

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

      spidstatusloginamehostnameblkdbnamecmd

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

      1runningsascosysv0masterselect

      2sleepingnull0masternetwork handle

      3sleepingnull0masterdeadlock tune

      4sleepingnull0mastermirror handler

      5sleepingnull0masterhousekeeper

      6sleepingnull0mastercheckpoint sleep

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

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

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

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

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

      namerow_totalreserveddataindex_sizeunused

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

      syslogsnot avail32kb32kb0kbnot avail

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

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

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

      說(shuō)明: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í)行一系列的安全保障措施。其中,周期性的更改用戶口令是比較常用且十分有效的措施。

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

      sp_password caller_password,new_password [,loginame]

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

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

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

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

    [不能上傳文件,只好列出內(nèi)容]
    Sybase學(xué)習(xí)體會(huì)
    原創(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)系說(shuō)明:
    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)榍懊嫠龅捻樞颉?
    如果以前安裝過(guò),用
    rpm -e 'rpm -qa|grep sybase'卸載
    2、 執(zhí)行$SYBASE/install/sybinstall.sh,它將創(chuàng)建sybase用戶和口令,用passwd將sybase的用戶口令修改為所要設(shè)定的口令。
    3、 在root用戶登錄文件中加入以下語(yǔ)句(以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í),如果沒(méi)有建立raw device 將要指定存放的目錄和數(shù)據(jù)庫(kù)數(shù)據(jù)文件。
    3、 修改后用svrbuildres -r $SYBASE/ASE/init/sample_resource_files/
    srvbuild.adaptive_server.rs執(zhí)行將建立數(shù)據(jù)庫(kù)。
    } /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登陸[他會(huì)自動(dòng)設(shè)定完成環(huán)境變量],建一個(gè)目錄存放日后的數(shù)據(jù)庫(kù)文件
    5、 重新restart computer
    6、 sybase登陸x-windows,執(zhí)行$SYBASE/ASE-12_5/bin/srvbuild,選擇完四個(gè)服務(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自動(dòng)命名為TEST_back,Monitor Server命名為TEST_mon,XP Server命名為TEST_XP。點(diǎn)擊OK按鈕,進(jìn)入各Server的配置過(guò)程。
    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ù)庫(kù)大小):20
    Sybsystemprocs device path(系統(tǒng)存儲(chǔ)過(guò)程設(shè)備路徑):/db/sybsystem/systemprocs.dat
    Sybsystemprocs device size(MB)(系統(tǒng)存儲(chǔ)過(guò)程設(shè)備大小):60
    Sybsystemprocs database size(MB)(系統(tǒng)存儲(chǔ)過(guò)程數(shù)據(jù)庫(kù)大小):60
    Error log path(錯(cuò)誤日志路徑):/opt/sybase-11.9.2/install/TEST.log
    Transport type(傳輸協(xié)議類型):tcp
    Host name(主機(jī)名):192.168.0.1
    Port number(監(jiān)聽端口號(hào)):4100
    點(diǎn)擊OK按鈕,進(jìn)入下一配置過(guò)程。
    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)入下一配置過(guò)程。
    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)入下一配置過(guò)程。
    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)一個(gè)窗口,你可以看到整個(gè)創(chuàng)建過(guò)程。如果有顯示以下類似信息,表示創(chuàng)建Server成功:
    ……
    Server TEST was successfully created.
    Done.
    ……
    8、創(chuàng)建Server成功后,系統(tǒng)就會(huì)問(wèn)你是否將Server本地化(Localize),即是用另外一種語(yǔ)言代替默認(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的手冊(cè)中一些關(guān)于本地化的說(shuō)明,得出的印象是,在ASE中有Unicode轉(zhuǎn)換機(jī)制,可以轉(zhuǎn)換來(lái)自不同字符集的服務(wù)器或客戶端的數(shù)據(jù)。應(yīng)用也證明,使用ASE的默認(rèn)的語(yǔ)言、字符集、索引順序來(lái)處理中文是可行的。
    9、安裝成功后要做的幾件事。首先在Linux控制臺(tái)模式下以sybase用戶登錄。
    ① 確認(rèn)Server是否在運(yùn)行。使用$SYBASE/install/下的showserver命令($SYBASE表示sybase的安裝目錄),應(yīng)該可看見系統(tǒng)有幾個(gè)sybase相關(guān)進(jìn)程。或者用$SYBASE/bin/下的isql -Usa -P -STEST命令來(lái)登錄Server,應(yīng)該可以看見isql的提示符"1>",再鍵入exit就可以退出了。
    ② 用sp_password null, 新口令
    go將sa的用戶口令改掉。
    ]
    7、 成功后將自動(dòng)啟動(dòng)數(shù)據(jù)庫(kù)。可用isql -Usa -Ppassword -Sserver_name連進(jìn)數(shù)據(jù)庫(kù)。
    isql -Usa -P -Ssybase
    8、 執(zhí)行1>sp_diskdefault master , defaultoff
    2>go
    將以后用戶數(shù)據(jù)庫(kù)數(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ù)庫(kù)。
    11、 重新啟動(dòng)數(shù)據(jù)庫(kù)用$SYBASE/ASE/install/RUN_sybase啟動(dòng),這為前臺(tái)啟動(dòng)方式。后臺(tái)啟動(dòng)方式用。
    $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ù)庫(kù):
    用sa用戶進(jìn)入數(shù)據(jù)庫(kù)執(zhí)行shutdown命令即可完成數(shù)據(jù)庫(kù)的關(guān)閉。

    數(shù)據(jù)庫(kù)設(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ù)庫(kù)設(shè)備后就可以建立用戶數(shù)據(jù)庫(kù)
    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ù)庫(kù)的用戶
    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ù)庫(kù)了。
    注意口令長(zhǎng)度不得小于6位,如果口令以數(shù)字開頭,還需要以單引號(hào)括起來(lái)。
    Sp_addlogin提供用戶能訪問(wèn)數(shù)據(jù)庫(kù)的權(quán)限,如果沒(méi)有指定用戶具體訪問(wèn)那個(gè)數(shù)據(jù)庫(kù),則還需要在相應(yīng)數(shù)據(jù)庫(kù)中用sp_adduser user_name, user_password建一個(gè)相同名和口令的用戶。
    例如
    1> sp_adduser ldai, dlm
    2> go
    3>

    如果用sa用戶創(chuàng)建了一個(gè)用戶數(shù)據(jù)庫(kù),想將他的所有者由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ù)庫(kù)owner了,注master不能更改

    建用戶有兩中方式,上面這一種是建立用戶帳號(hào),再在具體數(shù)據(jù)庫(kù)中建立該數(shù)據(jù)庫(kù)應(yīng)用帳號(hào)。較為繁瑣。可通過(guò)sp_addlogin加其他參數(shù),一步到位將數(shù)據(jù)庫(kù)用戶建立起來(lái)。
    Sp_addlogin user_name,user_password,所用數(shù)據(jù)庫(kù)名稱,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ù)庫(kù)對(duì)sa的口令要進(jìn)行修改。
    sp_password old_password, new_password, login name
    1> sp_password null, nextip, sa
    2> go
    3>

    sp_dboption 是用來(lái)打開或關(guān)閉數(shù)據(jù)庫(kù)的選項(xiàng) [select into/bulkcopy]。只用這樣數(shù)據(jù)庫(kù)才能執(zhí)行如select identity(int) id0,* into #temp1 from tablename這樣的sql語(yǔ)句。查看是否打開option用sp_helpdb就可以查看。Sp_dboption只能在master 數(shù)據(jù)庫(kù)中引用。是否允許列字段為空還是不為空也是用這個(gè)命令。
    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ù)庫(kù),命令為sp_modifylogin
    5、 檢索identity字段可以用syb_identity=指定值來(lái)檢索,如
    t_dns_rezo_gs中有且一個(gè)identity字段[rzgs_id ],則可如下檢索
    select count(*) from t_dns_rezo_gs where syb_indentity=1
    6、 sp_dboption可設(shè)置數(shù)據(jù)庫(kù)通用的一些選項(xiàng)。
    7、 當(dāng)想要對(duì)表進(jìn)行手工插入identity時(shí),如果沒(méi)有set identity_insert table_name on/off打開,
    就要打開,如果一旦打開,每一筆記錄都要手工指明identity值,而不是自動(dòng)插入形式,切記。如果變回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ù)庫(kù)自動(dòng)為新建表建立一個(gè)隱藏的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ù)庫(kù)中創(chuàng)建另外一個(gè)數(shù)據(jù)庫(kù)的表或其他對(duì)象, 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ù)庫(kù)
    12、 col_length("表名", "字段名") 返回指定字段的長(zhǎng)度/ datalength("列名")實(shí)際存儲(chǔ)長(zhǎng)度對(duì)varchar/期于是創(chuàng)建時(shí)指定的長(zhǎng)度
    13、 isNull(exp1, exp_value) 為如果exp1為null則用exp_value替代
    14、 convert(轉(zhuǎn)換后的類型和長(zhǎng)度,要轉(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、 看過(guò)程的源碼sp_helptext 過(guò)程名
    例子:
    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、 在一個(gè)過(guò)程中調(diào)用另外一個(gè)過(guò)程,
    例如:
    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ù)庫(kù)用戶:sa用戶 master庫(kù)中,sp_addlogin user,password,dbname
    22、 變更數(shù)據(jù)屬主::sa用戶進(jìn)入要變更的數(shù)據(jù)庫(kù)執(zhí)行 sp_changedbowner user,dbname
    23、 設(shè)置用戶的默認(rèn)登陸數(shù)據(jù)庫(kù)::sa用戶進(jìn)入要設(shè)定的數(shù)據(jù)庫(kù)執(zhí)行:
    sp_defaultdb user,dbname
    24、 以#開頭的臨時(shí)表只是在某一過(guò)程或sql操作中存在,一旦過(guò)程或sql操作結(jié)束,則臨時(shí)表就不存在了,如果再要訪問(wèn)就回出錯(cuò)。解決是不建立以#為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')才會(huì)成功。
    26、 指定某個(gè)過(guò)程什么時(shí)候執(zhí)行后用waitfor delay "hh24:mi:ss",并且用了這種方式后該connection不會(huì)有什么響應(yīng)直到過(guò)程被執(zhí)行完成。
    如半個(gè)小時(shí)后執(zhí)行過(guò)程test_p
    begin
    waitfor delay "0:30:00"
    exec test_p
    end
    27、 調(diào)用帶返回參數(shù)的過(guò)程完整例子
    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、 過(guò)程中有返回參數(shù)時(shí),如果預(yù)先設(shè)定參數(shù)值,最終都會(huì)改變
    如:
    declare @First int
    select @First=123
    exec test_p @second=@First output
    //運(yùn)行結(jié)果為999
    則@second和@First 都為999
    29、 過(guò)程名改名sp_rename oldname, newName
    30、 ct-library編程,在sybase提供的linux中有,環(huán)境搭建要點(diǎn),要確定$SYBASE設(shè)定了,$SYBASE_OCS設(shè)定open client所在目錄即可不要是全目錄,還要設(shè)定平臺(tái)$SYBPLATFORM=linux; 具有這三個(gè)環(huán)境變量,open client提供的sample才可大部分編譯通過(guò);其中有幾個(gè)程序由于找不到-lsrv,而編譯通不過(guò)。推測(cè)可能涉及了open server的東西,所以沒(méi)有通過(guò)。
    例子程序可以單獨(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編譯語(yǔ)句:
    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ù)器是對(duì)的。
    同時(shí)對(duì)于想要連接的服務(wù)器名要在環(huán)境變量DSQUERY中設(shè)好。
    如:
    export DSQUERY=accunetsvr

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

    32、 db-library 經(jīng)實(shí)驗(yàn)數(shù)據(jù)庫(kù)連接結(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ī)上訪問(wèn)另一臺(tái)機(jī)(數(shù)據(jù)庫(kù)所在的機(jī)器).在客戶機(jī)上需要裝sybase-comom 和syabse-openclient組件。需要設(shè)定對(duì)SYBASE / DSQUERY. 其中sybase要設(shè)定為指向interfaces文件的路徑,DSQUERY要設(shè)定為要遠(yuǎn)程訪問(wèn)的主機(jī)名 (adapative_server_name).將遠(yuǎn)程主機(jī)的interfaces拷貝到客戶機(jī)上SYBASE指定的目錄即可。注意如果沒(méi)有設(shè)定 DSQUERY,則程序默認(rèn)去找sybase的數(shù)據(jù)庫(kù),這時(shí)如果沒(méi)有該數(shù)據(jù)庫(kù)名字在interfaces文件中,程序就會(huì)不能運(yùn)行。
    [實(shí)際只需設(shè)定好DSQUERY環(huán)境變量和interface文件即可]
    34、 DB-library應(yīng)用在多線程中每次都要重新連接數(shù)據(jù)庫(kù),否則一定時(shí)間后連接會(huì)被操作系統(tǒng)重置掉。 Connection reset by peer
    35、 DB-library的錯(cuò)誤捕捉。系統(tǒng)提供一種系統(tǒng)錯(cuò)誤信息函數(shù)自動(dòng)在出現(xiàn)錯(cuò)誤時(shí)去捕捉顯示錯(cuò)誤信息。
    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);

    除此之外,用戶如果想要自己控制錯(cuò)誤信息可在dbsqlexec() 調(diào)用后并且while()處理完后,調(diào)用dbcount(dbproc)進(jìn)行錯(cuò)誤信息判斷,如果等于-1則出現(xiàn)錯(cuò)誤。特例調(diào)用沒(méi)有select的過(guò)程:: dbnocount設(shè)為on::沒(méi)有select的sql語(yǔ)句::sql寫錯(cuò)::sql執(zhí)行錯(cuò)誤等都可以出現(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ù)庫(kù)服務(wù)器上的interfaces文件中對(duì)應(yīng)的數(shù)據(jù)庫(kù)端口。
    例子:
    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型。如果想要?jiǎng)?chuàng)建數(shù)據(jù)庫(kù)自動(dòng)為新建的所有表增加一個(gè)隱藏的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)建一個(gè)新的idenetity列,這在sql語(yǔ)句分頁(yè)檢索用。
    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語(yǔ)句進(jìn)行分頁(yè)查詢方法:
    A. 創(chuàng)建一個(gè)臨時(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ù)庫(kù)的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下訪問(wèn)sql-server用db-library與sybase相同要素。只是遠(yuǎn)程訪問(wèn)端口為sql-server指定的1433

    41、 JDBC訪問(wèn)MS-SQLSERVER
    連接數(shù)據(jù)庫(kù):[需要這三個(gè)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過(guò)程中會(huì)有日志滿了或存儲(chǔ)空間不夠了,出現(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對(duì)于sql語(yǔ)句大小寫不敏感,sybase對(duì)大小寫敏感。

    48、 oracle同sybase和mssql的常用函數(shù)對(duì)比
    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
    日期部分 簡(jiǎn)寫 值
    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ù)庫(kù)
    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 快樂(lè)的射手 閱讀(1153) | 評(píng)論 (0)編輯 收藏

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

    /*
     * 創(chuàng)建日期 2005-4-7
     *
     * TODO 要更改此生成的文件的模板,請(qǐng)轉(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 要更改此生成的類型注釋的模板,請(qǐng)轉(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>

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

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



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

     

    根據(jù)客戶需要,我們?cè)黾恿艘粋€(gè)統(tǒng)計(jì)表,用來(lái)匯總統(tǒng)計(jì)數(shù)據(jù),統(tǒng)計(jì)數(shù)據(jù)的產(chǎn)生,需要根據(jù)一個(gè)基本表,動(dòng)態(tài)執(zhí)行sql語(yǔ)句.在存儲(chǔ)過(guò)程中,動(dòng)態(tài)生成sql語(yǔ)句然后執(zhí)行,需要用到Execute Immediate命令.我想寫一個(gè)通用的統(tǒng)計(jì)用存儲(chǔ)過(guò)程,似乎不大好辦,if語(yǔ)句的應(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;                          --主表序號(hào)
           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 快樂(lè)的射手 閱讀(1439) | 評(píng)論 (2)編輯 收藏

    2005年10月21日 #

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

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

    僅列出標(biāo)題  
    主站蜘蛛池模板: 亚洲一区爱区精品无码| 亚洲黄色免费在线观看| 又大又硬又粗又黄的视频免费看| 在线精品亚洲一区二区| 亚洲国产乱码最新视频| 亚洲综合色7777情网站777| 97久久国产亚洲精品超碰热| 激情综合亚洲色婷婷五月APP| 亚洲冬月枫中文字幕在线看| 亚洲国产成人综合| 亚洲熟妇自偷自拍另欧美| 亚洲AV性色在线观看| 人与动性xxxxx免费| 两个人看的www高清免费观看| 三年片在线观看免费大全电影| 91大神免费观看| 希望影院高清免费观看视频| 妞干网在线免费视频| 国产精品另类激情久久久免费 | 亚洲一级毛片免费看| 91麻豆最新在线人成免费观看| 啦啦啦高清视频在线观看免费 | 亚洲狠狠婷婷综合久久蜜芽| 亚洲AV无码一区二区三区电影| 免费一区二区三区在线视频| 久久久精品国产亚洲成人满18免费网站| 成人免费无码H在线观看不卡| 美女视频黄a视频全免费网站色窝 美女被cao网站免费看在线看 | 国产免费卡一卡三卡乱码| 亚洲精品tv久久久久| 国产偷v国产偷v亚洲高清| 亚洲美女免费视频| 亚洲精品无码专区在线播放| 亚洲精品第一国产综合精品| 亚洲AV日韩精品久久久久久| 亚洲欧洲一区二区| 亚洲愉拍一区二区三区| 免费人成网站永久| 毛片在线全部免费观看| 免费黄色毛片视频| 亚洲色中文字幕无码AV|