怎么用SQL語句備份和恢復數據庫
SQL語句備份和恢復
SQL Server:
備份命令:
BACKUP DATABASE test
TO disk = 'c:\test'
WITH FORMAT,
NAME = 'Full Backup of MyNwind'
解釋如下:
NAME = 'Full Backup of MyNwind' --這個是備注,隨便寫。
還原命令:
USE master
GO
RESTORE DATABASE test_wt
FROM disk = 'c:\test_wt'
GO
MySQL:
備份:
mysqldump -u root -p database_name >d:\*
恢復:
mysql -u root -p database_name 注意:在WIN下,路徑用path/*是不行的,那就用path\*
sql語句數據庫備份-簡述SQLServer中四種類型的備份方法的含義 愛問
數據庫備份可以分為4個備份類型。
l 全備份:創建備份完成時數據庫內存在的數據的副本。l 差異備份:只記錄自上次數據庫備份后發生更改的數據。
差異數據庫備份比數據庫備份小,而且備份速度快,因此可以更經常地備份,經常備份將減少丟失數據的危險。 l 日志備份:是自上次備份事務日志后對數據庫執行的所有事務的一系列記錄。
可以使用事務日志備份將數據庫恢復到特定的即時點(如輸入多余數據前的那一點)或恢復到故障點。l 文件組備份:可以備份和還原數據庫中的個別文件。
可以只還原已損壞的文件,而不用還原數據庫的其余部分,從而加快了恢復速度。不同的備份類型適用的范圍也不同。
全備份,可以只用一步操作完成數據的全部備份,但執行時間比較長。差異備份和日志備份,都不能獨立作為一個備份集來使用,需要進行一次全備份。
文件備份必須與事務日志備份一起使用,所以文件備份只適用于完全恢復模型和大容量日志記錄恢復模型。 每一種備份類型都有不足之處,要針對需要選擇備份類型,或者使用幾種備份方式的配合來完成數據庫的備份。
經常使用備份方式組合有以下幾種:l 全備份+差異備份:以一周為周期,星期日進行全備份,星期一到星期六每天進行差異備份。l 全備份+日志備份:以一周為周期,星期日進行全備份,星期一到星期六每天進行日志備份。
l 文件組備份+日志備份:備份周期取決于數據庫的大小和能力,每周期分別進行一部分數據文件備份,每天進行日志備份。
sql數據庫備份語句
--完整備份
Backup Database NorthwindCS
To disk='G:\Backup\NorthwindCS_Full_*'
--差異備份
Backup Database NorthwindCS
To disk='G:\Backup\NorthwindCS_Diff_*'
With Differential
--日志備份,默認截斷日志
Backup Log NorthwindCS
To disk='G:\Backup\NorthwindCS_Log_*'
--日志備份,不截斷日志
Backup Log NorthwindCS
To disk='G:\Backup\NorthwindCS_Log_*'
With No_Truncate
--截斷日志不保留
Backup Log NorthwindCS
With No_Log
--或者
Backup Log NorthwindCS
With Truncate_Only
--截斷之后日志文件不會變小
--有必要可以進行收縮
--文件備份
Exec Sp_Helpdb NorthwindCS --查看數據文件
Backup Database NorthwindCS
File='NorthwindCS' --數據文件的邏輯名
To disk='G:\Backup\NorthwindCS_File_*'
--文件組備份
Exec Sp_Helpdb NorthwindCS --查看數據文件
Backup Database NorthwindCS
FileGroup='Primary' --數據文件的邏輯名
To disk='G:\Backup\NorthwindCS_FileGroup_*'
With init
--分割備份到多個目標
--恢復的時候不允許丟失任何一個目標
Backup Database NorthwindCS
To disk='G:\Backup\NorthwindCS_Full_*'
,disk='G:\Backup\NorthwindCS_Full_*'
--鏡像備份
--每個目標都是相同的
Backup Database NorthwindCS
To disk='G:\Backup\NorthwindCS_Mirror_*'
Mirror
To disk='G:\Backup\NorthwindCS_Mirror_*'
With Format --第一次做鏡像備份的時候格式化目標
--鏡像備份到本地和遠程
Backup Database NorthwindCS
To disk='G:\Backup\NorthwindCS_Mirror_*'
Mirror
To disk='\\192.168.1.200\Backup\NorthwindCS_Mirror_*'
With Format
--每天生成一個備份文件
Declare @Path Nvarchar(2000)
Set @Path ='G:\Backup\NorthwindCS
存儲過程與SQL語句是怎樣的
我的一位朋友說:他從臺灣知名技術作家李維先生的一本書中獲悉,如果用存儲過程封裝SQL語句,系統效率將有極大提升。
他做過實驗!!! --我相信朋友做過實驗,盡管非親眼所見。不過我估計他的實驗有問題,那樣的實驗不但蒙蔽了他,也蒙蔽了李維先生(如果他的著作中的內容沒有被誤會),甚至更多的人。
然而我必須拿出證據,方能使人信服。 后來遇到一個具體的問題:客戶端經常要向數據庫插入記錄。
在J2EE中,一個 Entity Bean Home 的 create 方法調用中,一般就沒用存儲過程。朋友立馬在觀點上持反對意見( 可能是因為他暫時有來得及否決J2EE ),認為要是J2EE能夠將“插入記錄”諸如此類動作改為對存儲過程的調用就好了。
我們因此再次發生爭論(我僅是反對朋友的看法,但也沒提出任何我自己的看法,因為要下一個結論是很不容易的)。最后我不得已而做了實驗,分別在 Oracle 10g 和 postgreSQL 8。
0。1 上。
實驗內容如下: A、建表腳本: create table ztest( fieldA integer primary key, fieldB varchar(128), fieldC varchar(128) ) B、客戶端請求 DBMS 執行的 insert SQL語句: insert into ztest values( ?1, ?2, ?3 ); -- ?1,?2,?3 將在運行時以合理的值替代之 C、客戶端調用的存儲過程(JDBC CallableStatement 調用): Oracle:(調用方式 call up_add(。 。
。),) create or replace procedure up_add( fieldA integer, fieldB varchar, fieldC varchar ) is begin insert into ztest values( fieldA, fieldB, fieldC); end; postgreSQL:(客戶端調用方式 select uf_add(。
。
) ) CREATE OR REPLACE FUNCTION uf_add (integer, varchar, varchar) RETURNS void AS' begin insert into ztest values($1,$2,$3); return; end; 'LANGUAGE 'plpgsql' VOLATILE RETURNS NULL ON NULL INPUT SECURITY INVOKER; D、環境: postgreSQL:數據庫服務器與客戶端程序“都在本機”并“同時運行” Oracle: 獨立數據庫服務器(測試時始終有人在慢慢打字,應該對機器性能無影響) 測試: 通過不同方式( 即 請求DBMS執行SQL語句 和 調用DBMS邏輯等價的存儲過程)向測試表中連續加入 1024 記錄 經多次反復測試,得結果如下 postgreSQL: 兩種方式下,測試時間均為 21- 24 seconds 之間 (每個結果的測試環境一致) Oracle: 8次 SQL 執行請求分別用時(ms) 5422 4750 3875 3812 5672 3531 3484 3547 6次 存儲過程調用分別用時(ms) 4578 4500 6297 4219 4547 5734 (每個結果的測試環境一致)由此可知,存儲過程封裝簡單的 SQL 語句,效率相當,且可能更低。 但很多朋友的確得出結論:存儲過程的確比SQL快。
為什么?---- 因為他們測試時寫了一個不具實際意義,同時也與SQL語句的“一次客戶端調用”不具可比性的測試用存儲過程。Oracle PL/SQL 描述方式如下,該方法一次調用就可以向數據表添加 1024 條記錄,連網絡通訊都省了。
怪不得性能有“千倍差異”! create or replace procedure up_add( ) is declare n:integer; begin n := 0; while( n 它與客戶端一次提交單條 SQL 語句沒有可比性:當一次只需要向DBMS提交一條新記錄,要這個存儲過程干什么呢?。
sql 語句 數據庫備份
給你一個vb版本的作為參考吧,思路應該一樣。
還原:
Private Sub restoreButton_Click()
If * <> "" Then '如果路徑不為空
If Dir(*, vbDirectory) <> "" Then '如果路徑所在的文件存在,即路徑正確
sqlString = "RESTORE DATABASE patrol FROM disk = '" & * & "'"
Set rs = accessSQL(sqlString)
Unload Me
MsgBox "數據庫還原成功!", vbOKOnly, "成功!"
Else
MsgBox "找不到該文件!", vbOKOnly, "提示!"
End If
Else '如果文件路徑為空
MsgBox "文件路徑不能為空", vbOKOnly, "提示!"
End If
End Sub
備份:
Private Sub backupButton_Click()
If * <> "" Then '如果路徑為空
If Dir(*, vbDirectory) <> "" Then '如果路徑所在的文件已經存在
If MsgBox("該文件已經存在!" & vbCrLf & "要覆蓋原有文件?", vbYesNo, "警告!") = vbYes Then
GoTo next1
Else
GoTo Next2
End If
Else '不存在覆蓋問題
GoTo next1
End If
'備份數據庫
next1: sqlString = "backup database patrol to disk = '" & * & "' WITH FORMAT, NAME = '" & * & "'"
Set rs = accessSQL(sqlString) //查詢數據庫
Unload Me
MsgBox "數據庫備份成功", vbOKOnly, "成功!"
Else
MsgBox "路徑不能為空", vbOKOnly
Next2: End If
End Sub
sql 語句 數據庫備份
給你一個vb版本的作為參考吧,思路應該一樣。
還原:Private Sub restoreButton_Click() If * <> "" Then '如果路徑不為空 If Dir(*, vbDirectory) <> "" Then '如果路徑所在的文件存在,即路徑正確 sqlString = "RESTORE DATABASE patrol FROM disk = '" & * & "'" Set rs = accessSQL(sqlString) Unload Me MsgBox "數據庫還原成功!", vbOKOnly, "成功!" Else MsgBox "找不到該文件!", vbOKOnly, "提示!" End If Else '如果文件路徑為空 MsgBox "文件路徑不能為空", vbOKOnly, "提示!" End IfEnd Sub備份:Private Sub backupButton_Click()If * <> "" Then '如果路徑為空 If Dir(*, vbDirectory) <> "" Then '如果路徑所在的文件已經存在 If MsgBox("該文件已經存在!" & vbCrLf & "要覆蓋原有文件?", vbYesNo, "警告!") = vbYes Then GoTo next1 Else GoTo Next2 End If Else '不存在覆蓋問題 GoTo next1 End If'備份數據庫next1: sqlString = "backup database patrol to disk = '" & * & "' WITH FORMAT, NAME = '" & * & "'" Set rs = accessSQL(sqlString) //查詢數據庫 Unload Me MsgBox "數據庫備份成功", vbOKOnly, "成功!"Else MsgBox "路徑不能為空", vbOKOnlyNext2: End IfEnd Sub。
oracle 通過sql語句備份數據庫
oracle沒有sql語句備份,只有exp導出或者RMAN備份,都不是sql,RMAN是標準的數據塊備份,前提要求是數據庫一定要開啟歸檔,然后才可以進行RMAN備份,這個方法對數據量大的數據庫可以使用,速度會比較快,具體方法可以從網上查,不是很難,但比較繁瑣,還有一個exp導出,這個是直接將數據庫內的表直接導出城dmp文件,具體的語法是
exp user/password@DBSID file=D:\備份目標文件夾\文件名.dmp log=D:\備份目標文件夾\文件名.log owner=用戶名
上述語句是需要在cmd命令行下執行的,如果想導出哪個用戶就可以導出哪個用戶,只要能用sql語句連接到數據庫就可以使用,不管在哪個機器
備份與恢復sql語句
BACKUP 備份整個數據庫、事務日志,或者備份一個或多個文件或文件組。
有關數據庫備份和恢復操作的更多信息,請參見備份和還原數據庫。 語法 備份整個數據庫: BACKUP DATABASE { database_name | @database_name_var } TO < backup_device > [ ,。
n ] [ WITH [ BLOCKSIZE = { blocksize | @blocksize_variable } ] [ [ , ] DESCRIPTION = { 'text' | @text_variable } ] [ [ , ] DIFFERENTIAL ] [ [ , ] EXPIREDATE = { date | @date_var } | RETAINDAYS = { days | @days_var } ] [ [ , ] PASSWORD = { password | @password_variable } ] [ [ , ] FORMAT | NOFORMAT ] [ [ , ] { INIT | NOINIT } ] [ [ , ] MEDIADESCRIPTION = { 'text' | @text_variable } ] [ [ , ] MEDIANAME = { media_name | @media_name_variable } ] [ [ , ] MEDIAPASSWORD = { mediapassword | @mediapassword_variable } ] [ [ , ] NAME = { backup_set_name | @backup_set_name_var } ] [ [ , ] { NOSKIP | SKIP } ] [ [ , ] { NOREWIND | REWIND } ] [ [ , ] { NOUNLOAD | UNLOAD } ] [ [ , ] RESTART ] [ [ , ] STATS [ = percentage ] ] ] 備份特定的文件或文件組: BACKUP DATABASE { database_name | @database_name_var } < file_or_filegroup > [ ,。n ] TO < backup_device > [ ,。
n ] [ WITH [ BLOCKSIZE = { blocksize | @blocksize_variable } ] [ [ , ] DESCRIPTION = { 'text' | @text_variable } ] [ [ , ] DIFFERENTIAL ] [ [ , ] EXPIREDATE = { date | @date_var } | RETAINDAYS = { days | @days_var } ] [ [ , ] PASSWORD = { password | @password_variable } ] [ [ , ] FORMAT | NOFORMAT ] [ [ , ] { INIT | NOINIT } ] [ [ , ] MEDIADESCRIPTION = { 'text' | @text_variable } ] [ [ , ] MEDIANAME = { media_name | @media_name_variable } ] [ [ , ] MEDIAPASSWORD = { mediapassword | @mediapassword_variable } ] [ [ , ] NAME = { backup_set_name | @backup_set_name_var } ] [ [ , ] { NOSKIP | SKIP } ] [ [ , ] { NOREWIND | REWIND } ] [ [ , ] { NOUNLOAD | UNLOAD } ] [ [ , ] RESTART ] [ [ , ] STATS [ = percentage ] ] ] 備份一個事務日志: BACKUP LOG { database_name | @database_name_var } { TO < backup_device > [ ,。n ] [ WITH [ BLOCKSIZE = { blocksize | @blocksize_variable } ] [ [ , ] DESCRIPTION = { 'text' | @text_variable } ] [ [ ,] EXPIREDATE = { date | @date_var } | RETAINDAYS = { days | @days_var } ] [ [ , ] PASSWORD = { password | @password_variable } ] [ [ , ] FORMAT | NOFORMAT ] [ [ , ] { INIT | NOINIT } ] [ [ , ] MEDIADESCRIPTION = { 'text' | @text_variable } ] [ [ , ] MEDIANAME = { media_name | @media_name_variable } ] [ [ , ] MEDIAPASSWORD = { mediapassword | @mediapassword_variable } ] [ [ , ] NAME = { backup_set_name | @backup_set_name_var } ] [ [ , ] NO_TRUNCATE ] [ [ , ] { NORECOVERY | STANDBY = undo_file_name } ] [ [ , ] { NOREWIND | REWIND } ] [ [ , ] { NOSKIP | SKIP } ] [ [ , ] { NOUNLOAD | UNLOAD } ] [ [ , ] RESTART ] [ [ , ] STATS [ = percentage ] ] ] } < backup_device > ::= { { logical_backup_device_name | @logical_backup_device_name_var } | { DISK | TAPE } = { 'physical_backup_device_name' | @physical_backup_device_name_var } } < file_or_filegroup > ::= { FILE = { logical_file_name | @logical_file_name_var } | FILEGROUP = { logical_filegroup_name | @logical_filegroup_name_var } } 截斷事務日志: BACKUP LOG { database_name | @database_name_var } { [ WITH { NO_LOG | TRUNCATE_ONLY } ] } 參數 DATABASE 指定一個完整的數據庫備份。
假如指定了一個文件和文件組的列表,那么僅有這些被指定的文件和文件組被備份。 說明 在進行完整數據庫備份或差異數據庫備份時,Microsoft? SQL Server? 備份足夠的事務日志,以生成一個將在還原數據庫時使用的一致的數據庫。
在 master 數據庫上只能采用完整數據庫備份。 { database_name | @database_name_var } 指定了一個數據庫,從該數據庫中對事務日志、部分數據庫或完整的數據庫進行備份。
如果作為變量 (@database_name_var) 提供,則可將該名稱指定為字符串常量 (@database_name_var = database name) 或字符串數據類型(ntext 或 text 數據類型除外)的變量。 < backup_device > 指定備份操作時要使用的邏輯或物理備份設備。
可以是下列一種或多種形式: { logical_backup_device_name } | { @logical_backup_device_name_var } 是由 sp_addumpdevice 創建的備份設備的邏輯名稱,數據庫將備份到該設備中,其名稱必須遵守標識符規則。如果將其作為變量 (@logical_backup_device_name_var) 提供,則可將該備份設備名稱指定為字符串常量 (@logical_backup_device_name_var = logical backup device name) 或字符串數據類型(ntext 或 text 數據類型除外)的變量。
{ DISK | TAPE } = 'physical_backup_device_name' | @physical_backup_device_name_var 允許在指定的磁盤或磁帶設備上創建備份。在執行 BACKUP 語句之前不必存在指定的物理設備。
數據庫的備份與恢復
SQL2000數據庫的備份概念
SQL SERVER 2000有四種類型是:數據庫、事務日志、差異、文件和文件組
數據庫備份是創建完事數據庫的復本。它并非將所有的頁都復制到備份集,而只將實際包含數據的頁復制到備份集。數據頁和事務日志頁均復制到備份集。
數據庫備份用于重新創建數據庫,使其恢復到BACKUP語句完成時的狀態。如果數據庫只存在數據庫備份,那么數據庫只能恢復到服務器或數據庫發生故障前最后一次數據庫備份時的狀態。
事務日志備份僅制作日志文件的復本。日志文件備份本身不能用于還原數據庫。日志文件用于在數據庫還原后將數據庫恢復到原始故障點。
例如,某站點在星期天晚上執行數據庫備份,而在其它每個晚上執行日志備份。如果數據庫的某個數據磁盤在星期二2:30丟失,則該站點可以:
1備份當前事務日志
2還原從星期天晚上開始的數據庫備份
3還原從星期一晚上開始的日志備份,以將數據庫前滾。
4還原故障之后的日志備份。這將使數據庫前滾到故障發生的那一刻。
事務日志恢復需要從數據庫備份的那一刻到磁盤丟失那一刻之間所進行的一邊串不間斷的事務日志備份。
差異備份只追尋數據庫中自上一次數據庫備份之后修改過的所有頁的復本。差異日志主要用于使用頻繁的系統,一旦這類系統中的數據庫發生故障,必須盡快使其重新聯機。差異備份比完事數據庫備份小,因此對正在運行的系統影響較小。
例如,某個站點在星期天晚上執行完事數據庫備份。在白天每隔4小時制作一個事務日志備份集,并用當天的備份重寫頭一天的備份。每晚則進行差異備份。如果數據庫的某個數據磁盤在星期四上午9:12出現故障,則該站點可以:
1備份當前事務日志。
2還原從星期天晚上開始的數據庫備份。
3還原從星期三晚上開始的差異備份,將數據庫前滾到這一時刻。
4還原從早上4點到8點的事務日志備份,以將數據庫前滾到早上8點。
5還原故障之后的日志備份,這將使數據庫前滾到故障發生的那一刻。
SQL2000支持備份或還原數據庫中的個別文件或文件組。這是一種相對較完善的備份和還原過程,通常用在具有較高可用性要求的超大型數據庫中。如果可用的備份時間不足以支持完事數據庫備份,則可以在不同的時間備份數據庫的子集。
例如,某站點需要花三小時備份數據庫,并且每天只能用兩個小時執行備份。該站點可在一個晚上備份一半文件或文件級,并在第二個晚上備份另一半。如果包含數據庫文件或文件組的磁盤出現故障,那么該站點可以只還原丟失的文件或文件組。
該站點還必須進行事務日志備份,并且在備份文件或文件組之后必須還原所胡事務日志備份。還可以從完事數據庫備份集中還原文件和文件組。這將回憶恢復速度,因為在第一步只還原已損壞的文件或文件組,而不是整個數據庫。