1、Sybase IQ server有三種備份類型:
(1)、完全備份(full)
(2)、增量備份(incremental)
(3)、完全備份的基礎(chǔ)上增量備份(incremental
since full)
注:增量備份和完全備份的基礎(chǔ)上增量備份都會對Catalog
Store 進行完全備份,默認情況下為完全
備份。
2、Sybase IQ server的順序:
(1)、Catalog Store
(2)、Transaction log File
(3)、IQ Store
3、當(dāng)IQ server正在備份時:
(1)、默認情況下操作員必須在現(xiàn)場,掛持接備份介質(zhì)。
(2)、操作員可
以不在場,但必須正確地估算出備份的數(shù)據(jù)量大小,并且在安裝備份設(shè)備時,要選“高級”安裝方可。
(3)、數(shù)據(jù)庫備
份不會將未提交的內(nèi)容進行備份。
4、備份命令:
BACKUP DATABASE [CRC ON|OFF]
[Attended ON|OFF]
[BLOCK FACTOR integer]
[{FULL|INCREMENTAL|INCREMENTAL
SINCE FULL}]
TO
‘archive_device’ [SIZE # of KB integer]
例子:
BACKUP DATABASE TO ‘dev/rmt/0n’
注:BACKUP不支持裸設(shè)備
5、系統(tǒng)級別的備份:
如果IQ server運行時進行
系統(tǒng)級別的備份,則會導(dǎo)致服務(wù)崩潰或丟失數(shù)據(jù)。所以,必須確定IQ server是停止?fàn)顟B(tài)
時,方可進行系統(tǒng)級別備份。
6、備份的恢復(fù):
(1)、必須連接到utility_db數(shù)據(jù)庫后才可以進行恢復(fù)操作,并且在恢復(fù)數(shù)據(jù)時不能有用戶連接到數(shù)據(jù)庫,啟動utility_db的方法:start_asiq -n myserver -gu utility_db。
(2)、如果有完全恢復(fù),Catalog Store 和Transaction Log(即.db 和.log文件)必須從目標(biāo)文件夾下刪除。
(3)、如果為增量恢復(fù),Catalog Store 和Transaction Log(即.db 和.log文件)必須存在于目標(biāo)文件夾中。
(3)、恢復(fù)可以將原來dbspace的物理位置
更換,暨更改目錄和名稱。
7、恢復(fù)的命
令:
RESTORE
DATABASE ‘c:\\newdir\\mydb.db’
FROM ‘c:\\asiq\\backup1’
FROM ‘c:\\asiq\\backup2’
在進行恢復(fù)
時,必須注意恢復(fù)的順序和備份時的順序完全一致。
8、數(shù)據(jù)庫備份后,配置文件和日志文件是沒有被備份的,所以如果恢復(fù)時要單獨對這兩種文件進行恢復(fù)。配置文
件可以直接拷貝即可,但日志文件是不能用原來的.log文件的。
如果恢復(fù)到原來的目錄中,則不用新建.log文件。如果沒有恢復(fù)到原目錄,則必須用dblog工具手動生
成.log文件。
9、dblog工具的命令語法:
Dblog [option] database_file
Option:
-t log-name,指定事務(wù)log文件名。
-m mirror-name,設(shè)置事務(wù)日
志鏡象名。
-r,停止事務(wù)
日志的鏡象。
-o,輸出日志
信息到文件。
-q,安靜模
式,不打印信息。
例:dblog -r -t f:\asiqmrr\asiqmrr.log f:\asiqmrr\asiqmrr.db
sybaseiq的備份與恢復(fù):
備份:
backup database to
'e:\lslwork\temp\sybiqGP' ;
恢復(fù):
restore database 'C:\Program
Files\Sybase\ASIQ-12_6\gupiao\GP.db'
from 'e:\lslwork\temp\sybiqGP'
關(guān)鍵字: commons-dbutils 工具包的使用
commons-dbutils 是 Apache 組織提供的一個開源 JDBC 工具類庫,能讓我們更簡單的使用 JDBC 。
今天,在傳智播客的課堂上,我們學(xué)習(xí)了 DBUtils 類庫,知道了如何能夠更方便地使用 JDBC 。以下是我的學(xué)習(xí)總結(jié)。
--------------------------------------------------------------------------------
1. API 介紹:
<1> org.apache.commons.dbutils.DbUtils:提供如關(guān)閉連接、裝載 JDBC 驅(qū)動程序等常規(guī)工作的工具類;
<2> org.apache.commons.dbutils.QueryRunner:該類簡單化了 SQL 查詢,它與 ResultSetHandler 組合在一起使用可以完成大部分的數(shù)據(jù)庫操作,能夠大大減少編碼量。
<3> org.apache.commons.dbutils.ResultSetHandler:該接口用于處理 java.sql.ResultSet,將數(shù)據(jù)按要求轉(zhuǎn)換為另一種形式。
--------------------------------------------------------------------------------
2. 工具類的方法及示例代碼:
<1> DBUtil 類的主要方法如下:
a. public static void close(…) throws java.sql.SQLException: DbUtils類提供了三個重載的關(guān)閉
方法。這些方法檢查所提供的參數(shù)是不是 NULL ,如果不是的話,它們就關(guān)閉 Connection、Statement 和 ResultSet。
b. public static void closeQuietly(…): 這一類方法不僅能在 Connection、Statement 和ResultSet 為 NULL 情況下避免關(guān)閉,還能隱藏一些在程序中拋出的 SQLEeception。
c. public static void commitAndCloseQuietly(Connection conn): 用來提交連接,然后關(guān)閉連接,并
且在關(guān)閉連接時不拋出 SQL 異常。
d. public static boolean loadDriver(java.lang.String driverClassName):這一方裝載并注冊 JDBC 驅(qū)動程序,如果成功就返回 true 。使用該方法,你不需要捕捉這個異常 ClassNotFoundException。
--------------------------------------------------------------------------------
<2> QueryRunner 類的構(gòu)造方法及主要方法:
a. 默認的構(gòu)造方法:
public QueryRunner(){}
b. 需要一個 javax.sql.DataSource 來作參數(shù)的構(gòu)造方法:
public QueryRunner(DataSource ds) {
this.ds = ds;
}
QueryRunner類的主要方法:
c. public Object query(Connection conn, String sql, Object[] params, ResultSetHandler rsh)
throws SQLException:執(zhí)行一個查詢操作,在這個查詢中,對象數(shù)組中的每個元素值被用來作為查詢語句的置換參數(shù)。該方法會自行處理 PreparedStatement 和 ResultSet 的創(chuàng)建和關(guān)閉。更重要的是參數(shù) ResultSetHandler 會把從 ResultSet 中獲得的數(shù)據(jù)轉(zhuǎn)換成程序需要的數(shù)據(jù)格式。
d. public Object query(String sql, Object[] params, ResultSetHandler rsh) throws SQLException:幾乎與第一種方法一樣;唯一的不同在于它不將數(shù)據(jù)庫連接提供給方法,并且它是從提供給構(gòu)造方法的數(shù)據(jù)源(DataSource) 或使用的setDataSource 方法中重新獲得 Connection。
e. public Object query(Connection conn, String sql, ResultSetHandler rsh) throws SQLException :執(zhí)行一個不需要置換參數(shù)的查詢操作。
f. public int update(Connection conn, String sql, Object[] params) throws SQLException:用來執(zhí)行一個更新(插入、更新或刪除)操作。
g. public int update(Connection conn, String sql) throws SQLException:用來執(zhí)行一個不需要置換
參數(shù)的更新操作。
--------------------------------------------------------------------------------
<3> ResultSetHandler接口
ResultSetHandler 接口提供了一個單獨的方法:
Object handle (java.sql.ResultSet .rs)。
--------------------------------------------------------------------------------
<4> ResultSetHandler 接口的實現(xiàn)類
a. ArrayHandler:把結(jié)果集中的第一行數(shù)據(jù)轉(zhuǎn)成對象數(shù)組。
b. ArrayListHandler:把結(jié)果集中的每一行數(shù)據(jù)都轉(zhuǎn)成一個對象數(shù)組,再存放到 List 中。
c. BeanHandler:將結(jié)果集中的第一行數(shù)據(jù)封裝到一個對應(yīng)的 JavaBean 實例中。
d. BeanListHandler:將結(jié)果集中的每一行數(shù)據(jù)都封裝到一個對應(yīng)的 JavaBean 實例中,存放到 List里。
e. ColumnListHandler:將結(jié)果集中某一列的數(shù)據(jù)存放到 List 中。
f. KeyedHandler:將結(jié)果集中的每一行數(shù)據(jù)都封裝到一個 Map 里,然后再根據(jù)指定的key把每個 Map 再存放到一個 Map 里。
g. MapHandler:將結(jié)果集中的第一行數(shù)據(jù)封裝到一個 Map 里,key 是列名,value 就是對應(yīng)的值。
h. MapListHandler:將結(jié)果集中的每一行數(shù)據(jù)都封裝到一個 Map 里,然后再存放到 List。
i. ScalarHandler:將結(jié)果集中某一條記錄的其中某一列的數(shù)據(jù)存成 Object。
--------------------------------------------------------------------------------
<5> 下面是簡單對這幾個工具類的測試代碼:
QueryRunner runner = null;
runner = new QueryRunner();// 獲得QueryRunner類的實例對象
Connection conn = null;
Class.forName("com.mysql.jdbc.Driver");//加載數(shù)據(jù)庫驅(qū)動
conn = DriverManager.getConnection("jdbc:mysql://localhost:3309/bookstore",
"root", "1230");// 與數(shù)據(jù)庫建立連接
String sql = "SELECT id, name, title, price, yr, description, saleAmount FROM books
WHERE id = ?";// 準(zhǔn)備 sql 語句
List<Book> list = (List) runner.query(conn, sql, new Object[]{"201"}, new
BeanListHandler(Book.class));// 運用 QueryRunner 的方法執(zhí)行 sql 語句,并獲取結(jié)果集,從這里可
//以看出運用 commons-dbutils 類庫的方便之處,避免了創(chuàng)建 ResultSet 對象來設(shè)置參數(shù)的麻煩。
System.out.println(books.size()); //輸出 books 的元素個數(shù)
--------------------------------------------------------------------------------
<6> 其它類和接口:
a. org.apache.commons.dbutils.QueryLoader類:屬性文件加載器,主要用于加載屬性文件中的 SQL 到內(nèi)存中。
b. org.apache.commons.dbutils.wrappers.SqlNullCheckedResultSet類:該類是用來對sql語句執(zhí)行完成
之后的的數(shù)值進行null的替換。
c. org.apache.commons.dbutils.wrappers.StringTrimmedResultSet類:去除ResultSet中字段的左右空格。
d. org.apache.commons.dbutils.RowProcessor接口:提供了把結(jié)果集的行數(shù)據(jù)轉(zhuǎn)換成其它格式的功能。它的實現(xiàn)類是org.apache.commons.dbutils.BasicRowProcessor類。
Red Hat Linux默然會啟動郵件通知服務(wù),將系統(tǒng)的各種錯誤和告警日志信息發(fā)郵件通知Root用戶,隨著時間的積累,郵件數(shù)量不斷膨脹,導(dǎo)致/根目錄的磁盤空間已滿,影響系統(tǒng)的正常運行,一般程序部署完畢后都禁止該郵件通知服務(wù),具體的方法如下:
1)在控制臺輸入命令:Service sendmail stop,該命令是停止當(dāng)前的郵件通知服務(wù),但系統(tǒng)重啟后該服務(wù)仍然默然啟動;
2)在控制臺輸入命令:chkconfig --del sendmai,該命令是刪除開機啟動服務(wù)檢查項,即開機不運行郵件通知服務(wù);
3)mv /etc/rc.d/init.d/sendmail /etc/rc.d/init.d/sendmail.bak,把sendmail文件重命名;
Observer模式也稱為觀察者模式,
觀察者模式是java已經(jīng)實現(xiàn)的模式,我們只要利用java.util.Obserable類和java.util.Observer接口就可以實現(xiàn)觀察者模式
實現(xiàn)過程:
被觀察者必須繼承Observable,一旦事件被觸發(fā),調(diào)用notifyObservers通知觀察者
觀察者必須實現(xiàn)Observer接口,實現(xiàn)update方法,完成事件處理
舉個經(jīng)典的例子....貓叫,老鼠跑.人驚醒....
代碼:
1
package javamodel.observer;
2
3
import java.util.Observable;
4
import java.util.Observer;
5
6
/** *//**
7
* 貓叫,老鼠跑,主人被驚醒,用代碼實現(xiàn)這個連鎖反應(yīng) 。
8
* @author Administrator
9
*
10
*/
11
12
public class TestObserver
{
13
14
public static void main(String[] args)
{
15
Cat c=new Cat();
16
Observer o1=new Mouse();
17
Observer o2=new Man();
18
c.addObserver(o1);
19
Mouse oo1=(Mouse)o1;//向下轉(zhuǎn)型
20
oo1.addObserver(o2);
21
c.CatSay();
22
}
23
24
}
25
26
class Cat extends Observable
{//貓被老鼠觀察,貓是被觀察者
27
28
public void CatSay()
{
29
System.out.println("貓叫了");
30
this.setChanged();
31
this.notifyObservers();
32
}
33
}
34
35
class Mouse extends Observable implements Observer
{//老鼠觀察貓,貓是觀察者,對于人,老鼠是被觀察者
36
37
public void update(Observable arg0, Object arg1)
{
38
// TODO Auto-generated method stub
39
System.out.println("貓叫了,老鼠跑了");
40
this.setChanged();
41
this.notifyObservers();
42
}
43
44
}
45
46
class Man implements Observer
{//人觀察老鼠,人是觀察者
47
48
public void update(Observable arg0, Object arg1)
{
49
// TODO Auto-generated method stub
50
System.out.println("老鼠跑了,人驚醒了");
51
}
52
}
53
54
總結(jié), 觀察者模式的應(yīng)用場景:
1、 對一個對象狀態(tài)的更新,需要其他對象同步更新,而且其他對象的數(shù)量動態(tài)可變。
2、 對象僅需要將自己的更新通知給其他對象而不需要知道其他對象的細節(jié)。
觀察者模式的優(yōu)點:
1、 Subject和Observer之間是松偶合的,分別可以各自獨立改變。
2、 Subject在發(fā)送廣播通知的時候,無須指定具體的Observer,Observer可以自己決定是否要訂閱Subject的通知。
3、 遵守大部分GRASP原則和常用設(shè)計原則,高內(nèi)聚、低偶合。
觀察者模式的缺陷:
1、 松偶合導(dǎo)致代碼關(guān)系不明顯,有時可能難以理解。(廢話)
2、 如果一個Subject被大量Observer訂閱的話,在廣播通知的時候可能會有效率問題。(畢竟只是簡單的遍歷)