zoukankan      html  css  js  c++  java
  • firebird database (快速入門)


    參考文件(均可自firebird網站找到):
    Novice's Guide
    Migration from MS-SQL to firebird
    Firebord Release Notes

    1. 學習資料庫基礎是在sql的語法應用(請參考:firebird 網站的說明文件最好把這份文件印出來,在寫程式時可以參考其語,雖然大部份都是sql-92相容,但是有差異,還有一些專有的語法)
    2. 當你需要的資料找不到時可以找尋interbase的相關資料(因為firebird是由 interbase釋放原始碼所衍生的)
    3. 有一本網路上完整的書"BORLAND INTERBASE7.0 應用開發指南 (姚啟紅著)",雖然是interbase但非常詳細,要深入了解(建議必讀)
    尚在撰寫 中............

    目錄索引


    前 言
    它是Borland之前推出interbase資料庫,並將其開放原始碼的免費資料庫軟體,目前版本是1.5.2,它比mysql, postgresql 更適合於windows作業系統,它並不是使用cygwin的方式移植到windows上,而是真正的windows軟體,我們一般將其比較於Ms- sql server,是一個小而美資料庫,最大的優點在於它是免費的(ms-sql server五人版至將近三萬元),其實它也支援不同作業平台(含inux),對於linux上我還是建議大家postgresql或是mysql
    因為firebird若要用php的話就有點難了...,你要根據網站文件來作一些修改編譯的動作
    #日前postgresql 8.0釋放已經支援windwos的原始檔(不使用cygwin來執行),但很可惜不支援98/me
    因目前還是有人使用win98單機使用的資料庫,如果你單機上使用nt系統(2000/xp)等可以使用postgresql,因為postgresql 比起firebird來講某方面確實比較強,而使用者也比較多

    架 構
    firebird 資料庫軟體有三種套件,並而支援不同作業平台(windows系列,linux,freebsd等...)
    1. Super Server-無法直接存取資料庫檔案,必須透過socket來和伺服器溝通
    2. Classic-直接存取資料庫的檔案,多個程式可以同時存取一個檔案,有點像vfp,dbase
    3. embedded-專為一些小型系統的嵌入式資料庫 (pda)

    下載及安裝
    主網站:http://firebird.sourceforge.net/
    Download->Firebird relational database
    直接點兩下就可以安裝,請照步驟,根據自己的需求來安裝
    預設安裝路徑
    windows:c:\program files\firebird\firebird_1_5
    linux:/opt/firebird
    兩個作業系統下的目錄結構非常像
    根目錄下:
    firebird.conf-設定檔
    aliases.conf  -別名檔
    friebird.log -記錄檔
    SYSDBA.password -linux才有,管理者的名稱及密碼在裏面,windows則預設:名稱:sysdba,密碼:masterkey
    windows直接使用security.fdb來存sysdba的密碼
    注意:使用者名稱不分大小寫,但密碼有分
    目錄/bin:
    則是一些必要的主要及工具程式

    設定 firebird
    主要的設定檔
    firebird.conf
    預設tcp/ip會啟動port:3050
    你可以使用telnet ip 3050來測試
    aliases.conf
    設定資料庫的別名
    資料庫連線時一般要指定路徑,有時路徑太長時你可以指定,在aliases.conf中使用別名來存取
    它是位於你安裝firebird的根目錄,以下為內建範例
    # 別名 =  原始路徑
    employee.fdb = /opt/firebird/examples/employee.fdb
     
    其中#為註解,而windows及linux的路徑是有所不同:
    # fbdb1 在Windows伺服器:
    fbdb1 = c:\Firebird\sample\Employee.fdb
    # fbdb2 在Linux伺服器:
    fbdb2 = /opt/databases/killergames.fdb
    資料庫執行時可以編輯這個檔案,不需要重新啟動伺服器
    連線別名的方式:
    Server_name:aliasname

    使用者管理(consloe介 面)
    1.預設管理者名稱sysdba,密碼masterkey
    2.密碼檔security.fdb,位於firebird安裝目錄下
    3.管理程式gsec
       安裝目錄下\bin
    4.密碼長度限制在8碼
    用法:
    本地主機(資料庫server在本台電腦)
    gsec -user sysdba -password <password> [options]
    遠端主機(資料庫server在別台電腦)
    gsec -user sysdba -password <password> -database <databasename>

    gsec命令
    di[splay]
    顯示所有使用者
    di[splay] <username>
    顯示某使用者
    a[dd] <username> -pw <password> [options]
    新增使用者
    mo[dify] <username> [options]
    修改使用者
    de[lete] <username>
    刪除使用者
    h[elp]
    求助
    ?
    同上
    q[uit]
    離開gsec
    z
    顯示版本

    options
    -pa[ssword] <password>
    管理者的密碼
    -user <username>
    使用者名稱
    -pw <password>
    使用者密碼
    -fname <first name>
    英文名字有,三個部份
    -mname <middle name>

    -lname <last name>


    範例
    有兩種方式
    1.直接下在命令列-
    2.進入互動式的命令列-額外的命令
    新增使用者
    gsec -user sysdba -password masterkey
    gsec> add elvis -pw elvis -fname elvis -lnmae presley
    修改密碼
    gsec> modify elvis -pw chunk
    修改sysdba密碼
    gsec -user sysdba -password masterkey -modify sysdba -pw mykey37
    修改遠端伺服器linux的sysdba密碼
    gsec -user sysdba -password masterkey -database harry:/opt/firebird/security.fbd -modify sysdba -pw hamburg
    修改遠端伺服器windows的sysdba密碼
    gsec -user sysdba -password masterkey -database sally:"c:\Program files\Firebird\security.fdb" -modify sysdba -pw hannover
    修改遠端伺服器使用tcp port 3050
    gsec -user sysdba -password masterkey -database jack/3050:/opt/firebird/security.fdb" -modify sysdba -pw londo
    修改遠端windows伺服器ip( a.b.c.d)使用tcp  port 3050
    gsec -user sysdba -password masterkey -database a.b.c.d/3050:"c:\program files\firebird\firebird_1_5\security.fdb  -modiyf sysdba -pw londo
    刪除本地使用者
    gsec -user sysdba -password masterkey -delete joe

    資料庫管理(console)
    程式isql位於安裝目錄下的bin
    以下是一個操作範例:
    c:\Program files\firebird\firebird_1_5\bin\>isql -user sysdba -password masterkey
    Use CONNECT or CREATE DATABASE to specify a database
    SQL> connect test;
    Database:  test, User: sysdba
    SQL> show table;
           COUNTRY                                CUSTOMER
           DEPARTMENT                             EMPLOYEE
           EMPLOYEE_PROJECT                       JOB
           PHONE_LIST                             PROJECT
           PROJ_DEPT_BUDGET                       SALARY_HISTORY
           SALES
    SQL> select * from country ;
    COUNTRY         CURRENCY
    =============== ==========
    USA             Dollar
    England         Pound
    Canada          CdnDlr
    SQL>quit;


    建立資料庫
    1.建立資料庫create database
    2.建立資料表格create table (sql指令)
    3.刪除資枓表格drop  table (sql指令)
    4.查詢資料庫中所含表格 show table
    5.查詢表格中的結構 show table 表格名稱
    6.新增,刪除,更新(insert,delete,update)均為sql指令
    7.SQL命令交付,在新增或刪除時,資料庫並未直接變更,要使用sql指命commit 或commit work來更新

    isql -user sysdba -password masterkey
    Use CONNECT or CREATE DATABASE to specify a database
    SQL> create database 'c:\temp\test.fdb';
    SQL> create table abc (name char(12),age numeric(3));
    SQL> show table friend ;
    FIRSTNAME                       CHAR(15) Nullable
    LASTNAME                        CHAR(20) Nullable
    CITY                            CHAR(15) Nullable
    STATE                           CHAR(2) Nullable
    AGE                             INTEGER Nullable

    SQL> insert into abc (name ,age) values( 'cschen',34);
    SQL> select * from abc;

    NAME             AGE
    ============ =======
    cschen            34

    以上的操作主要是sql指令
    命令的結尾必需使用";", 如果沒有使用";"提示會由SQL>變為CON>,告訴你延續之前的命令
    SQL>create table friend
    CON>(FIRSTNAME CHAR(13),
    CON> LASTNAME CHAR(40),
    CON> STATE CHAR(2),
    CON> AGE INTEGER );
    同下
    SQL>create table friend (FIRSTNAME CHAR(13),LASTNAME CHAR(40),STATE CHAR(2),AGE INTEGER);


    每一個資料庫有一個特殊資料庫-系統資料庫,包含了使用者權限 等...
    SQL> show system;
           RDB$CHARACTER_SETS                     RDB$CHECK_CONSTRAINTS
           RDB$COLLATIONS                         RDB$DATABASE
           RDB$DEPENDENCIES                       RDB$EXCEPTIONS
           RDB$FIELDS                             RDB$FIELD_DIMENSIONS
          ..................                ..................

    使用者權限
    1.GRANT 授予使用者權限
      GRANT 權限 ON 物件 TO 對象 [with grant option]
    2.REVOKE 撤消使用者權限
      REVOKE 權限 ON 物件 FROM 對象

    權限:SELECT ,INSERT ,UPDATE,DELETE, ALL
    物件:TABLE,VIEW
    對象:使用者,PUBLIC(代表全部)
    with grant option 讓該名使用者有設定別的使用者的權限
    *因為isql無法輸入中文,因此無法使用在中文輸入資料
    *在linux下由於可能會有同名的isql(unixODBC套件),而linux安裝在/opt/firebird,因此必須使用絕對路徑來執行,另 資料庫的管理者名稱可以不固定,至於密碼在安裝時會自動產生在檔案SYSDBA.password中

    連線方式(檔案/tcpip)
    程式支援兩種連線方式
    1.使用完整路徑連線
      c:\abcd.....
    2.使用tcpip連線,在路徑前加主機的名稱或IP
       主機:c:\abcd....

    我們可以根據切換這兩種
    windows 下的路徑如有空白,有時必須使用" "將路徑框起來才可以用


    資料庫/使用者管理(gui)
     
    我有試過幾個免費的windows端的軟體
    選擇ibeasy+: 非常容易管理,必須有資料庫的觀念
    另外可配合marathon使用
    ibeasy+使用者管理介面:
    server->users management

    (輸入管理者的名稱及密碼,進入下一個視窗)

    (你就可以管理你的使用者)


    設定odbc
    在firebird->download ->odbc
    下載後安裝
    odbc
    odbc picture
    Database
    1.完整路徑-c:\database\abc.fdb
    2.tcp/ip-ip:完整路徑(127.0.0.1:c:\database\abc.fdb)

    資料庫的安全(備份/回存)(console)

    GBAK:命令列工具,命令有兩個狀態,備份/回存(-b / -c)

    語法
    gbak <options> -user <username> -password <password> <source> <destination>
    1.備份
    gbak -b  <source> 是你要備份的資料庫來源, <destination>是備份的目的地檔名.一般的延伸附檔名 是 .fbk .
    只有SYSDBA 或是資料庫的擁有者可以執行備份工作. 對於多個檔案的資料庫,只需指定第一個檔案的名稱來當資料庫的名稱.
    2.回存
    gbak -c  <source> 是先前備份的檔案而<destination> 是資料庫的名稱


    選項

    (中括號內的是非必要,也就是命令可以使用中括號前的縮寫,或是含中括號內為長參數)

    參數 說明 功能
    -b[ackup_database]  備份 備份
    -bu[ffers] Set cache size for restored database 回存
    -c[reate_database] 回存 (必要參數) 回存
    -co[nvert] 轉換外部表格到內部表格s 備份
    -e[xpand] 建立一個非壓縮的備份 備份
    -fa[ctor] n 磁帶機的區塊系數 備份
    -g[arbage collect] 備份時不清空已刪除的資料 備份
    -i[nactive] 所有的索引將回存為INACTIVE 回存
    -ig[nore] 備份時不做checksum錯誤檢查 備份
    -k[ill] 在不建立定義備份中的shadows 回存
    -l[imbo] 備份時忽略limbo transactions 備份
    -m[etadata] 只備份資料表格的metadata (schema).不備份資料 備份
    -mo[de] read_write  回存一個 可讀/寫的資料庫(預設) 回存
    -mo[de] read_only 回存一個唯讀寫資料庫 回存
    -n[o_validity] 不回存validity constraints.也就是回存資料不回存 constraints
    回存
    -nt 非相容性的格式(只使用在相同作業平台,及firebird版本) 備份
    -o[ne_at_a_time] 一次回存一個表格.你可以分別分次回存表格 
    回存
    -ol[d_descriptions] 舊的格式 備份
    -p[age_size] <size> 設定page size of new database.
     <size> 可以是 1024, 2048, 4096, 8192.預設1024. 
    回存
    -pa[ssword] <password> 資料庫的密碼  
    -r[eplace_database] 回存在一個存在的資料庫上.只能在擁有本資料庫的使用者可以操作
    這是覆寫,不要執行在使用中的資料庫!
    回存
    -role <role> 使用某一群組(role )來連線  
    -se[rvice]  <hostname>:service_mgr 備份: 建立,使用服務管理.
    回存: 回存,使用服務管理.
     
    -t[ransportable] 建立可轉移的備份(不同作業系統及firebird版本) 備份
    -u[ser] <username> 資料庫使用者的名字 
     
    -use_[all_space] 正常,回存,資料庫頁會填滿80%
    唯讀才會寫回100%(因為不用預留修改的空間)
    回存
    -v[erbose] 顯示所有gbak執行的詳細動作 
     
    -y <filename> 重導所有的輸出到一個檔案 <filename>.
    注意:命令執行之前不可以存在檔名
     
    -y suppress_output Quiet mode   
    -z 顯示版本
     

    範例:

    正常的備份:
    gbak -v -t -user SYSDBA -password "masterkey" dbserver:/db/warehouse.fdb c:\backups\warehouse.fbk

    備份並記錄所有備份時的輸出訊息:
    gbak -v -t -user SYSDBA -password masterkey -y c:\backups\warehouse.log dbserver:/db/warehouse.fdb c:\backups\warehouse.fbk

    正常的回存:
    gbak -c -v -user SYSDBA -password masterkey c:\backups\warehouse.fbk dbserver:/db/warehouse2.fdb

    回存到一個已存在的資料庫:
    gbak -c -r -v -user SYSDBA -password masterkey c:\backups\warehouse.fbk dbserver:/db/warehouse.fdb

    回存一個唯讀的資料庫:
    gbak -c -v -mode read_only -use_all_space -user SYSDBA -password masterkey c:\backups\warehouse.fbk c:\files\warehousedb.fdb

    多重檔案備份
    當資料庫很大時,要備份有點困難,因此我們將資 料庫備份成許多小的檔案,如此儲存時比較方便

    備份語法:
    gbak [options] <database> <target file 1> <size 1> <target file 2> <size 2> ... <target file n>

    注意: 不要指定最後一個檔案的大小.因我們不一定知道最後一個檔案需要多少空間來儲存,所以它將自動依據大小來儲存.至於其它檔案的大小可以是 bytes (8192), kilbytes (1024k), megabytes (5m), 或 gigabytes (2g)

    回存語法:
    gbak -c [options] <source file 1> <source file 2> ... <source file n> <database>

    回存到一個多個檔案的資料庫

    有些系統的檔案系統有限制,或是為了效能的因素,因此單一資料 庫,可分成多個小的資料庫

    gbak -c [options] <source file> <db file 1> <size 1> <db file 2> <size 2> ... <db file n>

    注意:不要指定最後資料庫的大小.它可以無限制的依據回存的檔案來變更大小.
    Size can be given in bytes (8192), kilbytes (1024k), megabytes (5m), or gigabytes (2g)

    由備份多個檔案回存到多個檔案的資料庫:
    gbak -c [options] <source file 1> <source file 2> ... <source file n> <db file 1> <size 1> <db file 2> <size 2> ... <db file n>


    資料庫安全(備份/ 回存)(gui)
    (ibeasy+,參考hlp檔)

    選項 (Database | Save Database)
    backup database

    你可以簡單複製資料庫檔(如一般的指令copy) 但是無法確定資料庫的安全.
    優點:

    • 改善效能經由排除不完整的(eliminating incomplete)交易和過期的記錄
    • 減少資料庫的大小-移除刪除的記錄
    • 獨立的備份和回存的功能和作業系統無關

    執行時必要參數:

    •  資料庫全名
    • 備份檔案的名稱,可包含大小等特性.
    • The options which must be applied at the time of back up
      - Checksums 檢查資料的完整.
      - End transactions
      - Metadata only 只存結構不存資料.
      - Eliminate garbage 予許釋放舊版本記錄的空間.
      - Old data format
      - Transportable database 可以回存資料庫到不同的作業系統.
      - Convert to tables 轉換外部檔案到內部表格.
    選項: (Database | Restore Database)
    resotre database

    執行這個操作,必須是這個資料庫的擁有者或是有執行管理系統的權限: SYSDBA.
    一個資料備份的資料庫可以回存
    執行時必要參數:

    • 備份檔案的名稱
    • 資料庫全名
    • 可用的參數
      - Page size 變更資料庫每頁的大小,可以改善效能.說實在,所有資料庫在一頁中會比較快.
      - Rebuild Indices.  重建索引
      - Create database image Allow the recovery of a database in case of disk crash.
      - Validity conditions Allow when data are not valid any more, following for example a modification of the integrity constraints, to be unaware of the integrity constraints.
      - Commit after each table
      - Replace database In this case, the database must be closed beforehand, and no user must be connected.
      - Create a new database This option is exclusive compared to the preceding option
      - Use all space to recreate the database. By default, at the time of the restoration of a database, the pages are filled out to 80%. This option makes it possible to fill them to 100%.

    資料型態

    名稱 大 小 範 圍 /精度 描 述
    Blob 不 固定
    blob段大小限於64K 動 態變長度二進位類型,用於存放大量資料的情況,如圖片、音樂、視頻、多媒體等。其基本結構單位為段,它的子類型描述了存儲資料的詳細資訊
    Boolean 16位 True
    False
    Unkown
    代 表了邏輯上的(真、假、不確定)與Dialect無 關。
    Char(N) n個 字元 1到32767個 位元組。雙字元集除2 固 定長度的字元或字串
    Date 64位 從 西元後100年 一月一日到32768年 二月29日 日 期類型。只有年月日,不帶時間
    Decimal(P,S) 變 數(16、32或64位) 精 度p從1到18: 指定數字的總長度;標度s從0到18: 指定小數點後的位數。 定 點小數。例如decimal(5,3)可 以存儲的數位形式為:pp.sss
    Double Precision 64位 從2.225×10的-308 次方
    到1.797×10的308次方
    IEEE雙 精度浮點數,15位 長度
    Float 32位 從1.175×10的-38 次方
    到3.402×0的38次方
    IEEE單 精確度浮點數,7位 長度
    Integer 32位 從-2147483648
    到2147483647
    整 數
    Numeric(P,S) 變 長(16、32或64位) 精 度p從1到18: 指定數字的總長度;標度s從0到18: 指定小數點後的位數。 定 點小數。例如decimal(10,3)可 以存儲的數位形式為:ppppppp.sss
    Smallint 16位 從-32768到32767 短 整數
    Time 64位 從0:00 AM到23:59.9999 PM 時 間類型
    Timestamp 64位 從 西元後100年 一月一日到32768年 二月29日 帶 有時間的日期類型
    Varchar(N) n個 字元 1到32767個 位元組。字元集決定了其能容納的最大字元數

    #Blob
    blob sub_type segment
    這是一個特有的資料型態,是用於儲存比較大量的資料,類似其它資料庫的text或是memo資料型態,在定義時有兩個附加參數是sub_type, segment
    sub_type是blob的資料類型,以下是它的types.h中的定義
    定義
    說明
    TYPE ("TEXT", 1,nam_f_sub_type)
    TYPE ("BLR", 2,nam_f_sub_type)
    TYPE ("ACL", 3,nam_f_sub_type)
    TYPE ("RANGES", 4,nam_f_sub_type)
    TYPE ("SUMMARY", 5,nam_f_sub_type)
    TYPE ("FORMAT", 6,nam_f_sub_type)
    TYPE ("TRANSACTION_DESCRIPTION", 7,nam_f_sub_type)
    TYPE ("EXTERNAL_FILE_DESCRIPTION", 8,nam_f_sub_type)
    文字,類似memo,而資料型態varchar限制 32K
    二位元資料(圖片,影音檔等)


    1,2是我們常用的,其它的很少使用

    generator(計數器)
    計數器可以我們幫助產生循序的數字,你可以將其看成如一個公共變數,使用gen_id(generator名稱,step)來取得一個值並 加step
    create generator my_gen
    num=gen_id(my_gen,1)

    num
    問題
    如果純粹使用generator來填入,如果是uniqe或primary key,當generator最大值是264(18446744073709551616) 如果超過會重回到0
    由於generator的最大值264 是很大數字要產生重複的機率很小

    要不要使用日期來配合產生?
    如果配合日期則會產生重複的機率會減少(發票,傳票等)
    年月日+流水號
    20040303004
    而generator 只要產生流水號,但是流水號每天都是從1開始,並且一般會限制數字的寬度如四位數或三位數
    如此造成重複性會增加
    目前資料庫並無法處理這個問題,你必須自己設計一個表格來儲存這個值,配合sql指令來取得最後的值
    (建議:不要浪費時間在使用在資料庫端的解決方法)
    填入的欄位要字串或是數字?
    如果是單獨使用generator,最好是用數字的格式比較好
    #注意:integer只有32位元
    範例:
    自動展示
    create generator test_gen ;
    CREATE TABLE  test1 (serial_no char(3) not null primary key,name char(15));
    建立觸發來自動取得ID(new.欄位名稱 ,這個變數是可以被sql指令時自動引用)
    set term !!;
    create trigger test for test1 active before insert 
    as
    begin
       new.serial_no=cast(gen_id(test_gen,1) as char(3));
    end
    !!
    set term ; !!
    #針對本身欄位變更方法:觸發包含了三種sql指令及二種狀態 執行前/執行 後
    在insert的執行前,所有的插入到被觸發的表格的欄位,你可以使用 new.欄位名稱來存取,只要變更該值就可以自動變更新增到表格中的欄位值
    #在建立trigger 時由於trigger中的;(分號)會混淆結束符號,因此使用sql指令或在isql中新增trigger請變更其結尾符號,是set term 結尾符號,預設的結尾符號";",因此做完要復原set term ;!!
     

    流水號
    每日重置流水號
    使用表格欄位來記錄日期,檢查若日期不同則寫入新日期並將generator歸零(set generator 名稱 to 0),但無法使用在儲存函式中
    在新增之前觸發這個功能,比上述更簡單(尚未測試)
    create trigger test2 for test active before insert
    as
    declare variable temp_date    date;
    declare variable serial_no    char(3);
    begin
       if current_date==t_date then
          #取得流水號
          serial_no=cast(gen_id(generator名稱,1) as char(3));
       else
          #將流水號置為0,使用相減
           =GEN_ID(My_Generator, -GEN_ID(My_Generator))
          #取得流水號
       endif  
    end

    #current_date
    select current_date from rdb$database

    儲存函式或觸發呼叫其它的儲存函式
    execute procedure 名稱[(變數1,變數2....)] [RETURNING_VALUES [(變數1,變數2.....)]]
    最簡單的呼叫(不傳值,也不傳回值)直接執行 EXECUTE PROCEDURE 名稱

    測試函式的執行或 GENERATOR的結果
    1.建立一個GENERATOR
    CREATE GENERATOR TESTGEN
    2.建立一個儲存函式(只是將GENERATOR加一)
    create procedure TEST
    as
    DECLARE VARIABLE MY  FLOAT;
    BEGIN
    MY=GEN_ID("TESTGEN",1);
    END
    3.直接執行命令
    EXECUTE TEST
    4.查詢GENERATOR是不是變為2

    變數
    函式中自己宣告的區域變數
    1.直接引用-不需任何前置符號
    2.用在sql語法中-必須前置:
    記錄使用者
    CURRENT_USER 和 CURRENT_ROLE
    時間變數
    current_time,current_date,current_timestamp

    udf自定函式的內建函式
    預設有內建函式放在在安裝目錄下的udf
    中含有的函式資訊在fbudf.sql、ib_udf.sql,但真正函式是在fbudf.dll、ib_udf.dll
    在firebird中使用者自定函式,和其它的sql-server有很大的不同
    在firebird中udf一般是以c或c++寫成函式,然後編譯成為模組
    1.windows- .dll檔
    2.linux -  .so 檔
    再來將其放在安裝目錄的UDF目錄下,一般會將其宣告檔放在同一目錄下,如果不是放在預設的目錄下,你必須在firebird的環境檔中設定,但是會有安 全的問題.
    如果你不會也不想寫自定函式,但是想要用別人寫好的函式
    要使用宣告命令
    declare external function
    其語法如下:
    declare external function '名稱'
    傳入的變數型態列表
    returns 回傳變數型態 FREE_IT
    entry_point '函式名稱' '模組名稱';
    如果你不知道有那些函式可以使用,可以參考UDF目錄下的.sql
    以下是完整抄自ib_udf.sql
    DECLARE EXTERNAL FUNCTION ltrim
        CSTRING(255)
        RETURNS CSTRING(255) FREE_IT
        ENTRY_POINT 'IB_UDF_ltrim' MODULE_NAME 'ib_udf';
    你必須在isql連線資料庫完畢後執行上述的命令(或其它管理程式),則該函式就會隨資料庫可以被呼叫使用,
    FREE_IT是在函式傳回值之後清掉所配置的記憶體.
    個人認為目前client所提供的函式遠多於server端,因此除非必要否則儘量使用client端的函式
    #ibeasy++不提供UDF的管理
    #marthon提供

    安全性(建立多個資料庫備份檔)
    create shadow
    一旦使用上述命令則會建立一個同步的資料庫在其它的儲存設備上,這可以保障當資料庫邏輯或實體的儲存介面損壞時,有一個備份的資料庫可以即時取代

    重建索引
    alter index 索引名稱 inactive
    alter index 索引名稱 active
    上述命令可以用在重建索引,或是資料庫回存時想要加速其執行速度,不要回存時邊回存邊建立索引,先執行inactive則回存時索引會失去作用,等資料庫 回存完畢時再執行active的動作,則會重建索引,當然只有在沒有人使用該資料庫時才可以使用
  • 相关阅读:
    玄学最短路算法——Ex Floyd
    题解 CF785E 【Anton and Permutation】
    题解 P1825 【[USACO11OPEN]玉米田迷宫Corn Maze】
    实现非递归树链剖分
    题解 P3423 【[POI2005]BAN-Bank Notes】
    题解 P3871 【[TJOI2010]中位数】
    【带修改的主席树】理解题解 (P2617 【Dynamic Rankings】题解)
    快速计算高精乘低精---低精优化高精
    了解 yaml文件格式
    com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'test.ac_flight' doesn't exist
  • 原文地址:https://www.cnblogs.com/top5/p/1443205.html
Copyright © 2011-2022 走看看