load database TEST from "d:\test\ZTMC20110131.dat"
online database TEST
-------------------
一、備份系統資料
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
卸出資料庫和事務日志的預設權限歸資料庫所有者,且可以傳遞給其他使用者;裝載資料庫和事務的權限也歸資料庫所有者,但不能傳遞。
二、産生使用者資訊表,并為資訊表授權;
系統維護人員的另一個日常事務是為使用者建立新的資訊表,并為之授權。建立表以及為表授權的方法已經在講過,在此隻将有關指令文法寫出來。
·建立表的指令為:
create table table_name
( column_1 datatype [null | not null | identity],
column_2 ……
)
go
alter table table_name
add primary key (column_list)
·删除表的指令格式為:
drop table table_name
·為表授權的指令格式為:
grant {all|permission_list}
on table_name to user_name
·收回權限的指令格式為
revoke {all|permission_list}
on table_name from user_name
三、監視系統運作狀況,及時處理系統錯誤;
系統管理者的另一項日常工作是監視系統運作情況。主要有以下幾個方面:
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是登入名稱。