1、首先新建一張測(cè)試表TEST,里面輸入記錄。由于刪除/更新/插入恢復(fù)步驟相同,這里僅演示刪除數(shù)據(jù)的情況。
創(chuàng)新互聯(lián)建站自2013年起,是專(zhuān)業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元淄博做網(wǎng)站,已為上家服務(wù),為淄博各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:13518219792
2、刪除其中1條記錄,查看表中記錄情況,由下圖可見(jiàn),記錄2被刪除了。
3、恢復(fù)之前先確定要恢復(fù)到的時(shí)間點(diǎn),下圖可以看出2018-03-07 15:33:00數(shù)據(jù)是正確的。
SELECT *
FROM TEST AS OF TIMESTAMP TO_TIMESTAMP('2018-03-07 15:33:00', 'YYYY-MM-DD HH24:MI:SS');
4、下面進(jìn)行表數(shù)據(jù)恢復(fù)。
FLASHBACK TABLE TEST TO TIMESTAMP TO_TIMESTAMP('2018-03-07 15:33:00', 'YYYY-MM-DD HH24:MI:SS');
可以看到報(bào)錯(cuò)了,原因是沒(méi)有開(kāi)啟行移動(dòng)。
5、開(kāi)啟該表的行移動(dòng)。
ALTER TABLE TEST ENABLE ROW MOVEMENT;
6、再次執(zhí)行數(shù)據(jù)恢復(fù)。
FLASHBACK TABLE TEST TO TIMESTAMP TO_TIMESTAMP('2018-03-07 15:33:00', 'YYYY-MM-DD HH24:MI:SS');
然后查看數(shù)據(jù)情況,可以看到已經(jīng)恢復(fù)了。
表的恢復(fù) 對(duì)誤刪的表,只要沒(méi)有使用PURGE永久刪除選項(xiàng),那么從flash back區(qū)恢復(fù)回來(lái)希望是挺大的
1、創(chuàng)建用戶表空間:
CREATE TABLESPACE test_data
//創(chuàng)建表空間test_data
LOGGING
DATAFILE 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\TEST_DATA01.DBF'
//創(chuàng)建的數(shù)據(jù)文件
SIZE 32M
//初始大小
AUTOEXTEND ON
//數(shù)據(jù)文件自動(dòng)擴(kuò)容
NEXT 32M MAXSIZE 2048M
EXTENT MANAGEMENT LOCAL;
2、刪除表空間,同時(shí)刪除數(shù)據(jù)文件:
drop tablespace test_data including contents and datafiles;
3、創(chuàng)建用戶臨時(shí)表空間:
CREATE TEMPORARY TABLESPACE test_temp
TEMPFILE 'D:\oracle\product\10.2.0\oradata\orcl\test_temp01.dbf'
SIZE 32M
AUTOEXTEND ON
NEXT 32M MAXSIZE 2048M
EXTENT MANAGEMENT LOCAL;
4、創(chuàng)建用戶并指定表空間:
CREATE USER xiaoming IDENTIFIED BY xm123
//創(chuàng)建用戶xiaoming,設(shè)置密碼為xm123
DEFAULT TABLESPACE TEST_DATA
//指定默認(rèn)表空間為test_data
TEMPORARY TABLESPACE TEST_TEMP;
//指定臨時(shí)表空間為test_temp
指定默認(rèn)表空間以后,用戶xiaoming創(chuàng)建的表都在這個(gè)表空間下,除非額外指定;
當(dāng)然,要給用戶xiaoming授權(quán)才能創(chuàng)建表。
哦,是這樣的,oracle就是多了一個(gè)用戶的概念,一個(gè)鏈接的概念,他們的之間的關(guān)系好像是m:n
不過(guò)你們說(shuō)的oracle 11以前的版本,11g 有個(gè)racle 11g sqldeveloper 這個(gè)可視 的 sql軟件
配置
打開(kāi)sqldeveloper——》Connections——》右鍵Connections——》彈出New / Select Database Connection
Connection Name
Username
Password
Hostname 默認(rèn)localhost
Port 默認(rèn)1521
SID 默認(rèn)xe
這個(gè)和你安裝的時(shí)候添的東西有關(guān)
然后弄個(gè)用戶,這個(gè)用戶和你安裝的那個(gè)不一樣
create 用戶名 identified by 密碼 ----創(chuàng)建用戶
grant select to 用戶名 ----授權(quán) 查找
grant resources to 用戶名 ----授權(quán) 資源
上面這段是在那個(gè)類(lèi)似CMD里面打的--PL/SQL
總之PL/SQL是一個(gè)寫(xiě)代碼的,我也是先學(xué)的SQLSERVER,MYSQL什么的,后來(lái)才用Oracle 對(duì)那種代碼也煩,后來(lái)就用了11g 可視的編輯,快捷好用,就和你們SQLSERVER一樣
最后,你要是鏈接數(shù)據(jù)庫(kù)什么的,可以使用odbc,不過(guò),hibernate更好多,寫(xiě)hql比sql簡(jiǎn)單的多,而其無(wú)論什么數(shù)據(jù)庫(kù)都是一樣hql 至于備份,記得是有那個(gè)按鈕選項(xiàng)的,至少11g是有導(dǎo)入,導(dǎo)出的,我那個(gè)時(shí)候做畢業(yè)設(shè)計(jì)的時(shí)候老師就要我導(dǎo)出的。
圖片找不到了,不過(guò)網(wǎng)上應(yīng)該有~~
備份數(shù)據(jù)庫(kù):mysql\bin\mysqldump -h(ip) -uroot -p(password) databasename database.sql
恢復(fù)數(shù)據(jù)庫(kù):mysql\bin\mysql -h(ip) -uroot -p(password) databasename database.sql
復(fù)制數(shù)據(jù)庫(kù):mysql\bin\mysqldump --all-databases all-databases.sql
修復(fù)數(shù)據(jù)庫(kù):mysqlcheck -A -o -uroot -p54safer
文本數(shù)據(jù)導(dǎo)入: load data local infile \"文件名\" into table 表名;
數(shù)據(jù)導(dǎo)入導(dǎo)出:mysql\bin\mysqlimport database tables.txt
mysql 的數(shù)據(jù)導(dǎo)入,導(dǎo)出
可以定義一個(gè)觸發(fā)器,來(lái)把刪除的記錄寫(xiě)到一個(gè)日志表中,方法如下。
測(cè)試方法:
創(chuàng)建原始表,插入數(shù)據(jù):
create?table?test?
(id?int,
name?varchar2(10));
insert?into?test?values?(1,'張三');
insert?into?test?values?(2,'李四');
commit;
創(chuàng)建日志表:
create?table?test_log
(id?int,
name?varchar2(10),
deletedate?date);
創(chuàng)建觸發(fā)器:
create?or?replace?trigger??t_delete_test
before?delete?on?test
for?each?row
begin
insert?into?test_log(id,name,deletedate)
values(?:old.id,?:old.name,?sysdate);
end;
執(zhí)行刪除操作:
delete?from?test?where?id=2;
commit;
檢測(cè)test表,及test_log表:
所以,可以證明,刪除成功,并且將刪除的數(shù)據(jù)寫(xiě)入到了日志表中。
如果是ddl語(yǔ)句刪除的數(shù)據(jù),比如truncate,drop什么的,你就去找找alertlog日志,這里會(huì)有記錄。
如果是dml語(yǔ)句,delete那么就真的沒(méi)辦法了。畢竟dml不記錄日志,除非你有相關(guān)觸發(fā)器做記錄。