資料庫恢復採用的方法
有兩種方法,一種方法使用mysql的check table和repair table 的答升sql語句,另一種方法是使用MySQL提供的多個myisamchk, isamchk數據檢測恢復工具。
前者使用起來比較簡便。推薦使用。
1、check table 和 repair table 登陸mysql 終端: mysql -uxxxxx -p dbname check table tabTest;
如果出培斗現的結果說Status是OK,則不用修復,如果有Error,可以用: repair table tabTest; 進行修復,修復之後可以在用check table命令來進行檢查。
在新版本的phpMyAdmin裡面也可以使用清中老check/repair的功能。
2. myisamchk, isamchk 其中myisamchk適用於MYISAM類型的數據表,而isamchk適用於ISAM類型的數據表。
這兩條命令的主要參數相同,一般新的系統都使用MYISAM作為預設的數據表類型,這里以myisamchk為例子進行說明。
當發現某個數據表出現問題時可以使用: myisamchk tablename.MYI 進行檢測,如果需要修復的話,可以使用: myisamchk -of tablename.MYI 關於myisamchk的詳細參數說明,可以參見它的使用幫助。
需要注意的時在進行修改時必須確保MySQL伺服器沒有訪問這個數據表,保險的情況下是最好在進行檢測時把MySQL伺服器Shutdown掉。
2、另外可以把下面的命令放在你的rc.local裡面啟動MySQL伺服器前: [ -x /tmp/mysql.sock ] && /pathtochk/myisamchk -of /DATA_DIR/*/*.MYI 。
其中的/tmp/mysql.sock是MySQL監聽的Sock文件位置,對於使用RPM安裝的用戶應該是/var/lib/mysql/mysql.sock,對於使用源碼安裝則是/tmp/mysql.sock可以根據自己的實際情況進行變更,而pathtochk則是myisamchk所在的位置,DATA_DIR是你的MySQL資料庫存放的位置。
需要注意的是,如果你打算把這條命令放在你的rc.local裡面,必須確認在執行這條指令時MySQL伺服器必須沒有啟動!
最後檢測修復所有資料庫(表)。
⑵ 怎麼修復資料庫 修復資料庫壞塊方法
修復資料庫壞塊
dbv
你也可以用dbv工具看一下你現在其他的數據文件有沒有還有壞塊的
dbv file='yourfilename'
恢復方法:
當Oracle資料庫出現壞塊時,Oracle會在警告日誌文件(alert_SID.log)中記錄壞塊的信息:
ORA-01578: ORACLE data block corrupted (file # 7, block # )
ORA-01110: data file : '/oracle1/oradata/V920/oradata/V816/users01.dbf'
其中,<AFN>代表壞塊所在數據文件的絕對文件號,代表壞塊是數據文件上的第幾個數據塊
出現這種情況時,應該首先檢查是否是硬體及操作系統上的故障導致Oracle資料庫出現壞塊。在排除了資料庫以外的原因後,再對發生壞塊的資料庫對象進行處理。
1.確定發生壞塊的資料庫對象
SELECT tablespace_name,
segment_type,
owner,
segment_name
FROM dba_extents
WHERE file_id =
AND between block_id AND block_id+blocks-1;
2.決定修復方法
如果發生壞塊的對象是一個索引,那麼可以直接把索引DROP掉後,再根據表裡的記錄進行重建;
如果發生壞塊的表的記錄可以根據其它表的記錄生成的話,那麼可以直接把這個表DROP掉後重建;
如果有資料庫的備份,則恢復資料庫的方法來進行修復;
如果表裡的記錄沒有其它辦法恢復,那麼壞塊上的記錄就丟失了,只能把表中其它數據壞上的記錄取出來,然後對這個表進行重建。
3.用Oracle提供的DBMS_REPAIR包標記出壞塊
exec DBMS_REPAIR.SKIP_CORRUPT_BLOCKS('','');
4.使用Create table as select命令將表中其它塊上的記錄保存到另一張表上
create table corrupt_table_bak
as
select * from corrupt_table;
5.用DROP TABLE命令刪除有壞塊的表
drop table corrupt_table;
6.用alter table rename命令恢復原來的表
alter table corrupt_table_bak
rename to corrupt_table;
7.如果表上存在索引,則要重建表上的索引
PART2
2014.7.22研究恢復資料庫壞塊:
Oracle調用標准C的系統函數,對數據塊進行讀寫操作,因此,壞塊是有可能由以下幾種原因產生:
硬體的I/O錯誤
操作系統的I/O錯誤或緩沖問題
內存或paging問題
磁碟修復工具
一個數據文件的一部分正在被覆蓋
Oracle試圖訪問一個未被格式化的系統塊失敗
數據文件部分溢出
Oracle或者操作系統的bug
遇到「ORA-01578:ORACLE data block corrupted」錯誤
處理方法:1.rman的recover命令可以在資料庫保持open狀態下只恢復受損的數據塊
2.如果沒有備份,萬不得已之下也可以採用DBMS_REPAIR包的存儲過程將受損壞塊隔離,同時盡可能地挽救部分數據。
rman backup命令也是檢查壞數據塊的好工具 一旦讀取ORA-19566 即可有問題
此時可用backup validate tablespace user觀察詳細的信息,可查看到壞塊數與跟蹤文件
grep『corrupt』/u01/app/oracle/diag/rdbms/br/br/trace/**.trc
恢復數據塊:rman》recover datafile 5 block 203;
批量恢復受損的數據塊:recover corruption list;
數據塊壞塊一號壞塊,需要做:
run{
sql 'alter database datafile 5 offline';
restore datafile 5;
recover datafile 5;
sql'alter database datafile 5 online'
}
使用exp/imp恢復
在這種情況下肯定會造成數據的丟失,在這種情況下應採取將數據導出然後重建表再進行導入的方法,來盡量恢復損壞數據塊中的數據,但是在有壞塊的情況下是不允許導出的,如下命令:Exp test/test file=t.dmp tables=t;
導出命令在執行中會報ORA-01578錯誤,在這錯誤提示中會提示那個文件號的文件以及這個文件中的哪個塊被損壞,如:ORA—01578:ORACLE 數據塊損壞(文件號 4,塊號 35)
針對以上的提示首先查詢那些對象被損壞:
Select tablespace_name,segment_type,owner,segment_name From dba_extents Where file_id=4 and 35 between block_id and block_id+blocks-1;
如果被損壞的塊是索引,通常可以通過索引重建來解決,如果損壞的是數據(segment_type為table),那麼通過設置如下內部事件使得Exp操作跳過壞塊。
Alter session set events=』10231 trace name context forever,level 10』;
然後重新執行導出命令,導出相關的表,然後執行Drop Table命令刪除相關表,之後重建表最後導入數據。
使用DBMS_REPAIR恢復
用DBMS_REPAIR當然也會丟失數據。這里不做詳細的介紹,有興趣的可以查看oracle的在線文
3、使用dbms_repair包進行壞塊處理
1)首先建立repair_table,用於存放dbms_repair.check_object檢測出來的壞塊信息
SQL> declare
2begin
3dbms_repair.admin_tables
4(table_name => 'REPAIR_TABLE',--表名
5table_type => dbms_repair.repair_table,
6action => dbms_repair.create_action,
7tablespace => 'USERS');--用於指定該表存放的表空間
8end;
9/
PL/SQL 過程已成功完成。
SQL> col owner format a10
SQL> col object_name format a20
SQL> col object_type format a20
SQL> select owner, object_name, object_type
2from dba_objects
3where object_name like '%REPAIR_TABLE';
OWNEROBJECT_NAMEOBJECT_TYPE
---------- -------------------- --------------------
SYSREPAIR_TABLETABLE
SYSDBA_REPAIR_TABLEVIEW
Oracle自動創建了一個DBA_REPAIR_TABLE視圖。
2)使用dbms_repair.check_object進行壞塊檢測
SQL> set serveroutput on size 100000;
SQL> declare
2rpr_count int;
3begin
4rpr_count := 0;
5dbms_repair.check_object(
6schema_name => 'SYS',--指定對象模式,也就是對象的所有者
7object_name => 'TEST',--指定對象名,也就是表名
8repair_table_name => 'REPAIR_TABLE',
9corrupt_count => rpr_count);
10dbms_output.put_line('repair block count: '
11||to_char(rpr_count));
12end;
13/
repair block count: 4
PL/SQL 過程已成功完成。
SQL> select object_name, block_id, corrupt_type, marked_corrupt,
2corrupt_description, repair_description
3from repair_table;
OBJECT_NAMEBLOCK_ID CORRUPT_TYPE MARKED_COR
-------------------- ---------- ------------ ----------
CORRUPT_DESCRIPTION
-------------------------------------------------------------------------------
REPAIR_DESCRIPTION
-------------------------------------------------------------------------------
TEST196148 TRUE
mark block software corrupt
TEST206148 TRUE
mark block software corrupt
TEST236148 TRUE
mark block software corrupt
TEST316148 TRUE
mark block software corrupt
通過運行dbms_repair.check_object,將壞塊信息存放到了repair_table表中,其中有個欄位marked_corrupt,用於標識該塊是否被標識為壞塊,當被標識為true時,即該塊被標識為壞塊。其中這一步跟oracle文檔中的描述有點進入,根據oracle文檔,當執行完dbms_repair.check_object時,並不會進行壞塊標識,也就是marked_corrupt列的值應該為false,而只有當執行dbms_repair.fix_corrupt_blocks過程後才會進行壞塊標識。
3)使用dbms_repair.fix_corrupt_blocks進行壞塊標識
SQL> declare
2fix_block_count int;
3begin
4fix_block_count := 0;
5dbms_repair.fix_corrupt_blocks (
6schema_name => 'SYS',
7object_name => 'TEST',
8object_type => dbms_repair.table_object,
9repair_table_name => 'REPAIR_TABLE',
10fix_count => fix_block_count);
11dbms_output.put_line('fix blocks count: ' ||
12to_char(fix_block_count));
13end;
14/
fix blocks count: 0
PL/SQL 過程已成功完成。
我們可以見到到fix blocks count=0,即在上一步進行check_object時已經進行了壞塊標識了,這一步其實可以省略。(不過沒有測試過!)
⑶ 怎麼恢復mysql資料庫
mysql資料庫恢復方法:
方法一:
命令恢復資料庫:
mysql -u root –password=root密碼 資料庫名 < 備份文件.sql
方法二:
第一步:用管理員許可權登錄並進入後台管理界面,點「資料庫->資料恢復」。
第二步:在數據恢復設置中選擇「從本地文件」進行恢復,然後通過右邊的「瀏覽」按鈕找到之前保存下來的.sql文件。
第三步:點「提交」按鈕後將出現詢問「分卷數據成功導入資料庫,需要自動導入本次其他的備份嗎?」一般繼續點「確定」按鈕即可。之後的資料庫文件就完全導入到當前網站了。這時出現再次要求輸入管理員帳號的提示。訪問網站地址時也會看到所有信息都恢復到備份資料庫時的內容了。
小提示:
不管採取哪種方式備份和恢復資料庫,一定要注意備份和恢復時使用的版本要相同,甚至是語言種類也要一致,否則會存在亂碼的問題。
⑷ 數據誤刪除怎麼恢復
如果是電腦上,可以通過回收站還原找回,如果徹底清除了,只能通過數據恢復軟體來數據恢復了。
遇到這個情況,可以打開回收站,找到被誤刪除的文件,選中並且右擊文件,然後就可以選擇"還原"。 這樣操作後,回收站里被誤刪的文件就還原到被刪除之前的位置了。
如果在網上搜索回收站清空的恢復方法,會發現很多教程推薦修改注冊表的方式進行恢復。然而,經過專業人員測試,此方法並不能將刪除的文件找回來。
微信不小心誤點擊刪除了重要的微信數據,微信數據刪除在正常情況下是完全可以恢復的,切記不要胡亂操作。
回收站是每個電腦系統所自動的一個功能,一般刪除後的數據都會保存在這個裡面,這些數據刪除也是臨時刪除的,因為如果誤刪後,一般是用於存放一些臨時刪除的數據文件。
當文件不小心刪除後,可以直接打開回收站,找到相應文件,點擊「還原」即可找回丟失文件。
如果數據不能恢復,我們可以選擇「嗨格式數據恢復大師」適用於恢復一些難度較高,系統自帶功能所不能恢復的文件,文件恢復的成功率也都較高。在數據恢復操作時也都相對比較簡單,只需要掃描一下數據,然後選擇需要恢復的數據進行恢復就行了。
⑸ 重裝系統後,mysql應該怎麼恢復過去
1、先在運行中輸入services.msc,找到MysQL的服務,將其停止;
2、然後備份新安裝的胡攜MY.INI和DATA這兩個目錄,直褲扒伏接將其原來mysql/data下的文件拷到新安裝的mysql/data目錄下即可;
3、啟動MysQL服務。該方法只在新安裝的資料庫與舊資料庫此局版本相同的情況下實驗成果。重新打開navicat,發現原來的資料庫都可以使用了。
⑹ oracle資料庫執行腳步出錯,怎麼恢復資料庫
數據恢復方法是利用oracle提供的閃回方法進行數據恢復,適用於delete刪除(一條記錄)方式:
首先需要知道是什麼時間進行的刪除操作,如果不能確定具體時間點則選擇盡量准確的刪除數據前的時間。然後利用
select * from 表名 as of timestamp to_timestamp('刪除時間點','yyyy-mm-dd hh24:mi:ss')
語句可以找回刪除的數據。利用
insert into 表名 (select * from 表名 as of timestamp to_timestamp('刪除時間點','yyyy-mm-dd hh24:mi:ss'));
語句就可以將恢復出來的數據插入原表中(注意要保證主鍵不重復)。
另一種方法可以通過閃回整個表來恢復誤刪除的數據,但僅適用於表結構沒有發生改變且用戶有flash any table許可權的情況下,語句如下:
·alter table 表名 enable row movement
⑺ 資料庫的恢復策略有幾種
資料庫運行過程中常見的故障有3類:事物故障、系統故障、介質故障。
恢復策略:
1、事物故障:
發生事務故障時,被迫中斷的事務可能已對資料庫進行丁修改,為了消除該事務對資料庫的影響,要利用日誌文件中所記載的信息,強行回滾該事務,將資料庫恢復到修改前的初始狀態。
為此,要檢查日誌文件中由這些事務所引起的發生變化的記錄,取消這些沒有完成的事務所做的一切改變,這類恢復操作稱為事務撤銷。
2、系統故障:
系統故障的恢復要完成兩方面的工作,既要撤銷所有末完成的事務,還要重做所有已提交的事務,這樣才能將資料庫真正恢復到一致的狀態。
3、介質故障:
介質故障比事務故障和系統故障發生的可能性要小,但這是最嚴重的一種故障,破壞性很大,磁碟上的物理數據和日誌文件可能被破壞,這需要裝入發生介肢純質故障前最新的後備資料庫副本,然後利用日誌文件重做該副本後所運行的所有事務。
(7)資料庫恢復採用的方法擴展閱讀:
「數據故障恢復」和「完整性約束」、「並發控制」一樣,都是資料庫數據保護機制中的一種完整性控制。所有的系統都免不了會發生故障,有可能是硬體失靈,有可能是軟體系統崩潰,也有可能是其他外界的原因,比如斷電等等。
資料庫運行的突然中斷會使資料庫處在一個錯誤的狀態局飢雀,而且故障排除後沒有辦法讓系統精確地從斷點繼續執行下去。這就要求DBMS要有一套故障後的數據恢復機構,保證數桐早據庫能夠回復到一致的、正確地狀態去。
參考資料來源:網路-事務故障
參考資料來源:網路-系統故障
參考資料來源:網路-介質故障
⑻ 數據恢復的數據恢復方法
分享一款功能超級強大的文件恢復軟體——EasyRecovery,可以為用戶恢復未受物理損害的硬碟中的絕大部分文件信息。
一、下載方便、界面簡潔
圖5:繼續恢復窗口
總而言之,這是一款易上手、實用度高的文件恢復軟體,如果您也有文件丟失或誤刪後找不到的困擾,可以嘗試一下這款軟體。