- 資料庫伺服器要換到別台機器, 要修改應用程式嗎?
- 資料庫檔案要搬移到別的目錄, 怎麼辦?
- 如何將某一表格搬移到另一個資料庫裡?
- 如何將Windows上的資料庫移植到UNIX上的機器?
- 表格及欄位名稱有大小寫的區別嗎? 可以不分大小寫嗎?
- DBMaker提供那些層級的鎖定(Lock)功能?
- 採用不同的鎖定層級該考慮那些因素?
- 在程式執行當中, 有沒有辦法將整個表格鎖定?
- 某個使用者查詢資料時, 其它使用者可以對此表格做新增或修改的動作嗎?
- 更新統計(Update Stiatistics)的目地為何?
- DBMaker何時自動執行更新統計作業?
- 新增一第筆料, 但發現空間己滿, 該如何解決?
- 如何執行批次工作?
- DBMaker的安全性如何?
- DBMaker的使用者授權分為那些等級?
- DBMaker可以針對某一個欄位設定存取權限嗎?
- 重新安裝DBMaker時, 己經存在的資料庫會不會不見?
- Client要連上資料時, 出現”can
not connec to server”,為什麼?
- DBMaker最多可以儲存幾筆資料?
- DBMaker一個表格最多能有幾個欄位?
- 可以更改欄位名稱嗎?
- Integer的欄位可以改為float嗎?
- 如果主鍵(Primary Key)的資料被殺掉,副鍵(Foreign Key)的相對資料也會被殺掉嗎?
| Q: 資料庫伺服器要換到別台機器,
要修改應用程式嗎? |
A: 資料庫伺服器換到別台機器, 並不需要對應用程式做任何變動。唯一需要變動的, 是應用程式端的設定檔(dmconfig.ini)裡的DB_SvAdr這個關鍵字。使用者只需將DB_SvAdr換成新資料庫伺服器的IP位址即可馬上上線使用。
A: 目前DBMaker並沒有支援自動搬移的功能。使用者必須手動搬移檔案到別的目錄, 並對資料庫設定檔(dmconfig.ini)做適當修改。
以下步驟說明如何搬移檔案:
- 關閉資料庫。
- 用作業系統所提供的檔案系統命令將資料庫檔案搬移到新的目錄。
- 修改dmconfig.ini裡的DB_DBDir, 使其指向新的目錄。
- 重新啟動資料庫。
A: 使用者可以使用dmSQL命令“LOAD”及“UNLOAD”。
dmSQL命令裡的“UNLOAD”命令, 是將一個表格裡綱要(table schema)及資料, 下載到一個外部檔案。這個外部檔案事實上是一個批次命令檔(Script
File), 其中包含了建立表格綱要、索引以及新增資料的dmSQL命令。當使用“LOAD”命令來上載表格時會使用到這個批次命令檔。
對於表格有兩種“UNLOAD”命令。第一種是“UNLOAD TABLE”, 執行之後不僅會將表格裡的資料下載下來, 同時也會將建立該表格的表格綱要命令記錄在批次命令檔裡。第二種“UNLOAD”命令是“UNLOAD
DATA”, 執行之後僅會將表格裡的資料下載下來而已。
以下的例子說明如何利用dmSQL工具將tb1這個表格從資料庫db1移到資料庫db2。第一個例子使用了“UNLOAD TABLE”這個命令,
而第二個例子則是使用了“UNLOAD DATA”。
範例1:
dmSQL> connect to db1 SYSADM;
dmSQL> unload table from tb1 to ‘j:\database\tb1’;
dmSQL> disconnect db1;
dmSQL> connect to db2 SYSADM;
dmSQL> load table from ‘j:\database\tb1’;
範例2:
dmSQL> connect to db1 SYSADM;
dmSQL> unload data from tb1 to ‘j:\database\tb1’;
dmSQL> disconnect db1;
dmSQL> connect to db2 SYSADM;
dmSQL> load table from ‘j:\database\tb1’;
如果要將整個資料庫全部unload,只要下UNLOAD DB指令即可。如:
dmSQL> connect to db1 SYSADM;
dmSQL> unload db to tt;
| Q: 如何將Windows上的資料庫移植到UNIX上的機器? |
A: 要是兩個作業平台使用相同的CPU的話, 譬如說是Intel的處理器, 則移植相當的容易。所需要做的, 就是將資料檔、日誌檔、大型物件檔等資料庫檔案複製到UNIX平台上,
然後將設定檔(dmconfig.ini)裡有關於該資料庫的所有設定, 複製一份到UNIX平台上的設定檔(dmconfig.ini)裡,
並確認DB_DbDir等關鍵字指到正確的目錄或路徑。
要是兩個作業平台使用不同的CPU, 則唯一的辦法是將整個資料庫從Windows平台上下載下來。下載下來之後, 系統會產生兩個命令批次檔,
副檔名分別為.s0及.b0。將這兩個命令批次檔複製到UNIX平台上, 然後啟動dmSQL, 先建立一個新的資料庫,然後執行上載資料庫的命令(load
db), 系統會在UNIX上產生一樣的資料庫。
以下的範例說明如何將資料庫db1從Windows平台上移植到UNIX平台上:
<Windows平台>
1. 啟動dmSQL工具並鍵入下列命令:
dmSQL> connect to db1 SYSADM;
dmSQL> unload db to db1port;
2. 將 db1port.s0 及 db1port.b0兩個命令批次檔複製到UNIX。
<UNIX 平台>
啟動dmSQL並鍵入下列命令:
dmSQL> create db db1;
dmSQL> load db from db1port;
| Q: 表格及欄位名稱有大小寫的區別嗎?
可以不分大小寫嗎? |
A: dmconfig.ini這個設定檔裡, 有一個DB_IDCap的參數, 這是用來告訴DBMaker是否要對大小寫做區別。當DB_IDCap設為1時,
所有資料庫物件的名稱都會被轉換成大寫。當DB_IDCap設0時, DBMaker就會區別大小寫了。
請注意該設定只有在資料庫建立時才生效, 而且會一直保持, 使用者無法更改。
| Q: DBMaker提供那些層級的鎖定(Lock)功能? |
A: DBMaker提供了三種層級的鎖定:Row-Level Lock, Page-Level Lock, 及Table-Level
Lock。
A: 最大的考量, 乃是採用不同的鎖定層級時, 如何在系統資源及同步控制(currency control)中, 找到一個平衡點。多數人也許會使用最低層級的鎖定,
來增加同步處理的能力, 不過這種作法, 需要消耗較多的系統資源。
DBMaker必須分配一部份的系統資料來管理鎖定。使用過多的記錄層級的鎖定(Row-Level Lock), 會佔用很多的系統資源,
其結果就是資源不夠分配給其他需要的程序(Process), 而大大降低系統效能。使用較高層級的鎖定,雖然可以減少系統資源的消耗,但卻可降低同步處理的能力。因此,最好的方式,
就是使用者根據他們的工作特性, 來決定應該採用的鎖定層級。
| Q: 在程式執行當中,
有沒有辦法將整個表格鎖定? |
A: 我們可以在程式執行當中, 下Lock Table這個dmSQL指令, 來鎖定整個表格。其語法如下:
LOCK TABLE table_name {SHARE|EXCLUSIVE} MODE {WAIT|NO WAIT}
| Q: 某個使用者查詢資料時,
其它使用者可以對此表格做新增或修改的動作嗎? |
A: 如果查詢時是用SELECT …. FOR BROWSE指令或啟動瀏覽模式下(DB_BROWS
=1) ,這樣查詢是不抓任何鎖定,此時其他使用者可以對此表格作新增或修改。
如果是用一般SELECT指令且關閉瀏覽模式(DB_BROWS =0)下,則查詢會抓S鎖定。
如此一來,需根據第一個使用者對該表格所使用的鎖定層級來決定。
記錄層級鎖定: 要是第一個使用者所查詢的記錄與其他使用者欲修改的記錄不同的話, 則其他使用者可以進行新增或修改的動作, 否則其他使用者必須等第一個使用者查詢完畢,
放掉鎖定之後, 才可以進行新增或修改的動作。
資料頁層級鎖定: 要是第一個使用者查詢時所用到的資料頁及其他使用者欲修改的資料頁不同時, 則其他使用者可以進行新增或修改的動作, 否則其他使用者必須等第一個使用者查詢完畢,
放掉鎖定之後, 才可以進行新增或修改的動作。
表格層級鎖定: 在這個情況之下, 其他使用者就只能對該表格進行查詢的動作。若是要對資料做修改的話, 其他使用者必須等第一個使用者查詢完畢,
放掉鎖定之後, 才可以進行新增或修改的動作。
請注意上述說明是假設該表格沒有建立索引, 若是有索引時, 則也要考慮索引資料頁是否有其他人在讀取或修改, 因此考慮的層次又要更複雜些。
| Q: 更新統計(Update
Stiatistics)的目地為何? |
A: DBMaker在內部對某些資料庫物件, 像是表格及索引, 都有記錄統計數值。這些統計數值記錄了像是資料分佈等資料。這些統計數值可以幫助DBMaker的最佳化處理。不過由於資料持續異動,這些統計數值會因時間的久遠而失去正確性。不正確的統計數值會使DBMaker在最佳化的過程當中選擇了錯誤的決定。為了解決這個問題,
系統管理員應該以手動的方式, 定期更新統計數值。
請注意DBMaker並不會在您新增資料時來產生統計數值。因此在新增資料之後, 您應以手動的方式來產生/更新統計數值。
A: DBMaker允許使用者指定何時執行更新統計作業。使用者可以以下列dmSQL命令來指定排程(Schedule):
ALTER TABLE table_nae SET UPDATE STATISTICS EVERY n DAYS
在這裡n所代表的是天數的意思。
請注意雖然您可以指定DBMaker何時自動執行更新統計作業, 但那不代表時間到了DBMaker就會去執行。您必須先關閉資料庫, 再重新啟動,
此時DBMaker才會去檢查它所排定的排程是否該去執行更新統計作業。若是在重新啟動資料庫時時間到了或是過了, 此時DBMaker就會執行更新作業,
不然的話DBMaker還是不會去做。因此比較好的方式, 還是系統管理員定期以手動的方式來更新統計數值。
| Q: 新增一第筆料,
但發現空間己滿, 該如何解決? |
A: 若是資料空間滿的話, 使用者可以增加表空間(Tablespace)的大小。
由於所使用的表空間為一般性的表空間(Regular Tablespace)(要是所使用的是自動延展性表空間(Autoextend Tablespace),
除非磁碟機空間已滿,否則不會發生空間己滿的錯誤訊息), 有兩個方式可以增加表空間的大小。第一個方法是增加檔案到表空間裡, 另外一個方式是對現有的表空間增加資料頁頁數。若使用伺服器管理員其做法如下:
增加資料檔頁數。操作步驟如下:
使用伺服器管理員工具點選【表空間→更改→增加資料檔大小】後進入“增加資料檔大小”對話方塊。
在“資料庫名稱”下拉式選單中點選資料庫名稱。
在登入對話方塊的“使用者”文字框中鍵入使用者名稱。
在登入對話方塊的“密碼”文字框中鍵入使用者密碼。
在“表空間名稱”下拉式選單點選表空間名稱。
在“增加頁數”欄位中鍵入要增加的頁數。
按下“更改”按鈕後會現增加資料檔成功的畫面。
按下“確定”鈕即可。
增加資料檔數目。操作步驟如下:
使用伺服器管理員工具點選【表空間→更改→增加檔案】後進入“增加資料檔大小”對話方塊。
在“資料庫名稱”下拉式選單中點選資料庫名稱。會出現登入對話方塊。
在登入對話方塊的“使用者”文字框中鍵入使用者名稱。
在登入對話方塊的“密碼”文字框中鍵入使用者密碼。
在“表空間名稱”下拉式選單點選表空間名稱。
在表格中鍵入新增的資料檔名稱及儲存路徑。
按下“增加”鈕。
按下“關閉”鈕。
若使用dmSQL工具,做法如下:
1.增加檔案到表空間裡:
比方說我們有一個資料庫MY_DB, 包含了表空間ts1。我們想增加一個資料檔f7到該表空間, 以下為dmconfig.ini裡修改的內容:
[MY_DB]
f7 = /disk1/usr/f7.dat 3000
以下的dmSQL命令將資料檔f7加到表空間ts1裡。
dmSQL>ALSTER TABLESPACE ts1 ADD DATAFILE f7;
2. 增加資料頁到表空間裡:
以下的例子是將100個資料頁增加到f1這個檔案裡。f1必須己經先存在了。
dmSQL>ALTER DATAFILE f1 ADD 100 pages;
A: 執行批次工作之前, 首先先將要執行的dmSQL命令存到一個命令批次檔裡。然後透過dmSQL工具, 用”RUN”這個指令來執行批次工作。例如,
我們手上有一個命令批次檔dmFund.sql, 我們可以用下列的命令來執行這個批次工作:
dmSQL>run dmFund.sql;
A: DBMaker使用許多種方式來防止資料庫受到破壞。
DBMaker要求使用者在連到資料庫之前, 必須先登錄(Login), 以防止其他未授權的使用者來使用資料庫。
DBMaker允許系統管理員對資料庫物件設定權限, 以防止惡意破壞及未經授權的使用。
DBMaker提供概觀(View)的功能, 系統管理員可以以此功能來決定不同的安全層次, 讓使用者看到他(她)們應該看到的資料。
DBMaker利用Write-Ahead Log, 確保所有的交易(Transaction)在Commit時都有記錄下。這些交易的資料,
都會記錄在日誌檔裡, 當系統當掉或是未經正常程序關閉資料庫時, 日誌檔就會被用來做資料復原的動作。
DBMaker有提供備份的功能, 當資料遺失或是資料庫無法修復時, 備份的資料庫就提供了另一層的保護。
A: 在DBMaker裡有四種授權等級
Connect授權層次:
可以連到資料庫。
可以對系統表格(System Tables)做SELECT的動作。
擁有別人所賦予的表格權限。
在指定更高的授權之前, Connect必須先指定才行。
Resource授權層次:
可以建立及移除表格(Table)、概觀(View)、定義域(Domain)、及同義字(Synonym)。
可以指定及取消自己建立的表格權限給其他使用者。
擁有別人所賦予的表格權限。
擁有Connect授權層次的所有權限。
DBA授權層次:
除了系統表格之外, 擁有所有的表格權限。
可以對所有的使用者及群組給予、變更及取消資料庫物件的權限。
可以對一個群組做新增及移除使用者的動作。
可執行系統管理的命令, 像是啟動、關閉資料庫, 及新建、刪除及變更表空間, 以及對資料庫做備份。
擁有Connect及Resource所有的權限。
| Q: DBMaker可以針對某一個欄位設定存取權限嗎? |
A: 可以。每個欄位的權限包括INSERT、UPDATE、REFERNCE三種設定。相關的SQL語法如下:
GRANT [UPDATE][,INSERT][,REFERENCE]
column_name[,column_name…] ON table_name
TO {user_id}{group_id|PUBLIC}[,{user_id|group_id}]…
實例:授與使用者 lynn有更改Company欄位的權限。語法如下:
dmSQL>grant
UPDATE (Company) ON t1 to lynn;
| Q: 重新安裝DBMaker時,
己經存在的資料庫會不會不見? |
A:不會。
| Q: Client要連上資料時,
出現”can
not connec to server”,
為什麼? |
A: 可能有三種原因:
資料庫伺服器尚未啟動。
資料庫伺服器的IP地址或是通訊埠設定錯誤。
可使用的Client數己飽合。
A: DBMaker理論上可以儲存5.6294995341213E+14筆記錄,
不過這個
值己經超越現在硬體設備的的極限, 因 此可以說是沒有限制。
A: 一個表格最多可以有252個欄位。
A: 可以,利用DBATool工具可以達到這樣的目的。做法如下:
啟動DBATool。
選擇【物件管理→表格】選項會得到“表格”對話方塊。
在“資料庫”下拉式選單選取要修改欄位名稱的資料庫
在“表格” 下拉式選單選取要修改欄位名稱的表格。
按下在“欄位”旁的“┼”號即可進入“加入/修改”畫面。
作欄位名稱的修改。
除此之外,也可以用dmSQL來達到同樣的目的。語法如下:
dmSQL>ALTER TABLE table_name MODIFY column_name NAME TO NEW_NAME;
實例: 將salary這個欄位改成age。語法如下:
dmSQL> alter table t1 modify salary name to age;
A: 可以。用dmSQL或DBATool工具都可以做到。
用dmSQL的語法下:
dmSQL>ALTER TABLE table_name
MODIFY column_name TYPE TO FLOAT;
實例:將salary欄位的資料型態改成float。
dmSQL> alter table t1
modify salary type to float;
用DBATool的操作步驟如下:
選擇功能表中的【物件管理→表格】選項,進入表格對話方塊。
按下位於“欄位”旁的“+”號就進入“加入/修改欄位”對話方塊。
將資料型態改為float。
按下【確定】鈕即可。
| Q: 如果主鍵(Primary
Key)的資料被殺掉,副鍵(Foreign Key)的相對資料也會被殺掉嗎? |
我們可以在建立副鍵時就可以選擇其連鎖反應為:
無反應
設為空值
連鎖更新
設為預設值
所以當主鍵被刪除時,副鍵的相對資料會根據我們的設定來變更。
設定的方法如下:
選擇功能表中的【物件管理→表格】選項,進入表格對話方塊。
按下位於“外鍵”旁的“+”號就進入“增加外鍵”對話方塊。
在“更新連鎖作用”下拉式選單中選擇欲設定的連鎖反應。
按下“關閉”鈕即可。
|