sql表刪除恢復
❶ sql Server的文件恢復技術
SQL Server有兩種備份方式 一種是使用BACKUP DATABASE將資料庫文件備份出去 另外一種就是直接拷貝資料庫文件mdf和日誌文件ldf的方式 本文中 我們將主要介紹一下後者的備份與恢復 (本文中假定您目前已經能夠熟練使用Server企業管理器和SQL Server查詢分析器)
正常的備份 恢復方式
正常方式下 我們要備份一個資料庫 首先要先將該資料庫從運行的數據伺服器中斷開 或者停掉整個資料庫伺服器 然後復制文件
卸下資料庫的命令
Sp_detach_db 資料庫名
連接資料庫的命令
Sp_attach_db或者sp_attach_single_file_db s_attach_db [@dbname =] ′dbname′ [@filename =] ′filename_n′ [ ] sp_attach_single_file_db [@dbname =] ′dbname′ [@physname =] ′physical_name′
使用此方法可以正確恢復SQL Sever 和SQL Server 的資料庫文件 要點是備份的時候一定要將mdf和ldf兩個文件都備份下來 mdf文件是資料庫數據文件 ldf是資料庫日誌文件
例子
假設資料庫為test 其數據文件為test_data mdf 日誌文件為test_log ldf 下面我們討論一下如何備份 恢復該資料庫
卸下資料庫
sp_detach_db 』test』
連接資料庫
sp_attach_db 』test』 』C:Program FilesMicrosoft SQL ServerMSSQLDatatest_data mdf』 』C:Program FilesMicrosoft SQL ServerMSSQLDatatest_log ldf』sp_attach_single_file_db 』test』 』C:Program FilesMicrosoft SQL ServerMSSQLDatatest_data mdf』
只有mdf文件的恢復技術
由於種種原因 我們如果當時僅僅備份了mdf文件 那麼恢復起來就是一件很麻煩的事情了
如果您的mdf文件是當前資料庫產生的 那麼很僥幸 也許你使用sp_attach_db或者sp_attach_single_file_db可以恢復資料庫 但是會出現類似下面的提示信息
設備激活錯誤 物理文件名 』C:Program FilesMicrosoft SQL ServerMSSQLdatatest_Log LDF』可能有誤
已創建名為』C:Program FilesMicrosoft SQL ServerMSSQLDatatest_log LDF』的新日誌文件
但是 如果您的資料庫文件是從其他計算機上復制過來的 那麼很不幸 也許上述辦法就行不通了 你也許會得到類似下面的錯誤信息
伺服器: 消息 級別 狀態 行
未能打開新資料庫 』test』 CREATE DATABASE 將終止
設備激活錯誤 物理文件名 』d:test_log LDF』 可能有誤
應該怎麼辦呢?下面我們舉例說明恢復辦法
A 我們使用默認方式建立一個供恢復使用的資料庫(如test) 可以在SQL Server Enterprise Manager裡面建立
B 停掉資料庫伺服器
C 將剛才生成的資料庫的日誌文件test_log ldf刪除 用要恢復的資料庫mdf文件覆蓋剛才生成的資料庫數據文件test_data mdf
D 啟動資料庫伺服器 此時會看到資料庫test的狀態為「置疑」 這時候不能對此資料庫進行任何操作
E 設置資料庫允許直接操作系統表 此操作可以在SQL Server Enterprise Manager裡面選擇資料庫伺服器 按右鍵 選擇「屬性」 在「伺服器設置」頁面中將「允許對系統目錄直接修改」一項選中 也可以使用如下語句來實現
use master go sp_configure 』allow updates』 go reconfigure with override go
F 設置test為緊急修復模式
update sysdatabases set status= where dbid=DB_ID(』test』)
此時可以在SQL Server Enterprise Manager裡面看到該資料庫處於「只讀置疑離線緊急模式」可以看到資料庫裡面的表 但是僅僅有系統表
G 下面執行真正的恢復操作 重建資料庫日誌文件
dbcc rebuild_log(』test』 』C:Program FilesMicrosoft SQL ServerMSSQLDatatest_log ldf』)
執行過程中 如果遇到下列提示信息
伺服器: 消息 級別 狀態 行
未能排它地鎖定資料庫以執行該操作
DBCC執行完畢 如果DBCC輸出了錯誤信息 請與系統管理員聯系
說明您的其他程序正在使用該資料庫 如果剛才您在F步驟中使用SQL Server Enterprise Manager打開了test庫的系統表 那麼退出SQL Server Enterprise Manager就可以了
正確執行完成的提示應該類似於
警告 資料庫 』test』的日誌已重建 已失去事務的一致性 應運行DBCC CHECKDB以驗證物理一致性 將必須重置資料庫選項 並且可能需要刪除多餘的日誌文件
DBCC執行完畢 如果DBCC輸出了錯誤信息 請與系統管理員聯系
此時打開在SQL Server Enterprise Manager裡面會看到資料庫的狀態為「只供DBO使用」 此時可以訪問資料庫裡面的用戶表了
H 驗證資料庫一致性(可省略)
dbcc checkdb(』test』)
一般執行結果如下
CHECKDB發現了 個分配錯誤和 個一致性錯誤(在資料庫 』test』 中)
DBCC執行完畢 如果DBCC輸出了錯誤信息 請與系統管理員聯系
I 設置資料庫為正常狀態
sp_dboption 』test』 』dbo use only』 』false』
假如沒有出錯 現在你就可以正常的使用恢復後的資料庫啦
J 最後一步 我們要將步驟E中設置的「允許對系統目錄直接修改」一項恢復 因為平時直接操作系統表是一件比較危險的事情 當然 我們可以在SQL Server Enterprise Manager裡面恢復 也可以使用如下語句完成
lishixin/Article/program/SQLServer/201311/22357
❷ plsql怎麼恢復刪除的表
方法一:
1.打開Flash存儲的許可權
ALTER TABLE tableName ENABLE row movement ;
2.把表還原到指定時間點
flashback table tableName to timestamp to_timestamp('2018-03-16 10:40:00','yyyy-mm-dd hh24:mi:ss');
後面的參數為要還原的時間點
方法二:
利用ORacle的快照進行查找某個時間點的數據
s e l e c t * from tableName AS OF TIMESTAMP (SYSTIMESTAMP - INTERVAL '100' MINUTE)
或
s e l e c t * from tableName as of timestamp to_timestamp('2018-03-16 11:40:00','YYYY-MM-DD HH24:MI:SS');
這樣可以查詢到指定的時間段的數據,再把查詢到的數據復制到原來的表中。
方法三:
刪除表後,可以採用如下操作:在 查詢表user_recyclebin最近操作過的表名稱,然後用閃回(只能用於10G及以上版本)。
s e l e c t * from user_recyclebin;
FLASHBACK TABLE TABLE_NAME TO BEFORE DROP;
如果是刪了或修改裡面的數據,可以先建立一個快表將刪除修改之前狀態的數據找回到這個表中:
CREATE TABLE QUICK_TABLE AS SELECT * FROM TABLE_NAME AS OF TIMESTAMP SYSTEM-1/24 (一小時前的),減去的時間可以自己定。
方法四:
SCN提供了Oracle的內部時鍾機制,可被看作邏輯時鍾,這對於恢復操作是至關重要的
注釋:Oracle 僅根據 SCN 執行恢復。
它定義了資料庫在某個確切時刻提交的版本。在事物提交時,它被賦予一個唯一的標示事物的SCN 。一些人認為 SCN 是指, System Commit Number ,而通常 SCN 在提交時才變化,所以很多情況下,這兩個名詞經常被交替使用。
究竟是哪個詞其實對我們來說並不是最重要的,重要的是我們知道 SCN 是 Oracle 內部的時鍾機制, Oracle 通過 SCN 來維護資料庫的一致性,並通過SCN 實施 Oracle 至關重要的恢復機制。
❸ 用SQL語句怎麼刪除表中的所有數據
要從SQL中刪除表中的所有數據,可以使用`DELETE`語句。以下是如何操作的:1.如果你想刪除整個表中的所有行,直接使用:
DELETEFROMtable_name;
或者
DELETE*FROMtable_name;
這會刪除指定表(如`Customers`)中的所有行,但不會刪除表結構。
2.如果你想保持表結構,但希望快速且不可恢復地刪除所有數據,可以使用`TRUNCATETABLE`語句:
TRUNCATETABLECustomers;
`TRUNCATE`操作會立即清空表,不記錄日誌,且速度比`DELETE`快,但一旦數據被刪除,無法恢復。
3.如果你需要刪除特定條件下的數據,可以結合`WHERE`子句,如:
DELETEFROMCustomersWHEREcust_id=10000006;
這將僅刪除滿足條件的行。
4.要完全刪除表(包括結構和數據),應使用`DROP`語句,但請注意,這將永久刪除表,無法恢復:
DROPTABLEtable_name;
總的來說,`DELETE`、`TRUNCATE`和`DROP`各有其適用場景,根據需求選擇合適的操作。
❹ sql資料庫刪除的表通過那個工具能恢復嗎
SQL Server中誤刪除數據的恢復本來不是件難事,從事務日誌恢復即可。但是,這個恢復需要有兩個前提條件:
1. 至少有一個誤刪除之前的資料庫完全備份。
2. 資料庫的恢復模式(Recovery mode)是「完整(Full)」。
針對這兩個前提條件,會有三種情況:
情況一、如果這兩個前提條件都存在,通過SQL語句只需三步就能恢復(參考文章),無需藉助第三方工具。
a) 備份當前資料庫的事務日誌:BACKUP LOG [資料庫名] TO disk= N'備份文件名' WITH NORECOVERY
b) 恢復一個誤刪除之前的完全備份:RESTORE DATABASE [資料庫名] FROM DISK = N'完全備份文件名' WITH NORECOVERY, REPLACE
c) 將資料庫恢復至誤刪除之前的時間點:RESTORE LOG [資料庫] FROM DISK = N'第一步的日誌備份文件名' WITH STOPAT = N'誤刪除之前的時間點' , RECOVERY
情況二、如果第1個前提條件不存在,第2個前提條件存在,需要藉助第三方工具。
情況三、如果第2個前提條件不存在,無法恢復。所以,一定要將資料庫恢復模式設置為「完整(Full)」。
我現在面臨的是第二種情況,需要找第三方工具。
開始找的是Log Explorer for SQL Server,不支持SQL Server 2008。
後來找的是SQL Log Rescue,也不支持SQL Server 2008。
接著找到的是SysTools SQL Recovery,支持SQL Server 2008,但需要購買,Demo版並沒有數據恢復功能。
最終在officerecovery.com上找到Recovery for SQL Server,雖然也是商業軟體,需要購買,但Demo版可以恢復數據,只要資料庫文件不超過24Gb。幸好朋友的資料庫文件不大,用它完成了誤刪除數據的恢復。
下面分享一下用Recovery for SQL Server進行恢復的操作步驟:
1. 運行Recovery for SQL Server
2. 點擊菜單中的 File > Recover,選擇要恢復的資料庫的數據文件(.mdf)
3. Next > Next,進入 Recovery Configuration 界面,選擇Custom(選擇了Custom才可以選擇從日誌中恢復誤刪除的數據)。
4. Next 進入 Recovery options 窗口,選中 Search for deleted records,並選擇要恢復的資料庫的日誌文件路徑(log file path)。
5. Next 並選擇目標文件夾(Destination folder),用於存放恢復過程中生成的SQL語句與bat文件。
6. 點擊Start,開始恢復操作(在上一步選擇的目標文件夾中生成相應的SQL文件與Bat文件),然後,出現 SQL Server Database Creation Utility 窗口。
7. Next,選擇被恢復數據存放的目標資料庫。
8. Next, 選擇 Import availiable data from both database and log files
9. Next, Next, 然後就完成數據的恢復!