重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
1、首先新建一张测试表TEST,里面输入记录。由于删除/更新/插入恢复步骤相同,这里仅演示删除数据的情况。
创新互联建站自2013年起,是专业互联网技术服务公司,拥有项目网站建设、网站设计网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元淄博做网站,已为上家服务,为淄博各地企业和个人服务,联系电话:13518219792
2、删除其中1条记录,查看表中记录情况,由下图可见,记录2被删除了。
3、恢复之前先确定要恢复到的时间点,下图可以看出2018-03-07 15:33:00数据是正确的。
SELECT *
FROM TEST AS OF TIMESTAMP TO_TIMESTAMP('2018-03-07 15:33:00', 'YYYY-MM-DD HH24:MI:SS');
4、下面进行表数据恢复。
FLASHBACK TABLE TEST TO TIMESTAMP TO_TIMESTAMP('2018-03-07 15:33:00', 'YYYY-MM-DD HH24:MI:SS');
可以看到报错了,原因是没有开启行移动。
5、开启该表的行移动。
ALTER TABLE TEST ENABLE ROW MOVEMENT;
6、再次执行数据恢复。
FLASHBACK TABLE TEST TO TIMESTAMP TO_TIMESTAMP('2018-03-07 15:33:00', 'YYYY-MM-DD HH24:MI:SS');
然后查看数据情况,可以看到已经恢复了。
表的恢复 对误删的表,只要没有使用PURGE永久删除选项,那么从flash back区恢复回来希望是挺大的
1、创建用户表空间:
CREATE TABLESPACE test_data
//创建表空间test_data
LOGGING
DATAFILE 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\TEST_DATA01.DBF'
//创建的数据文件
SIZE 32M
//初始大小
AUTOEXTEND ON
//数据文件自动扩容
NEXT 32M MAXSIZE 2048M
EXTENT MANAGEMENT LOCAL;
2、删除表空间,同时删除数据文件:
drop tablespace test_data including contents and datafiles;
3、创建用户临时表空间:
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、创建用户并指定表空间:
CREATE USER xiaoming IDENTIFIED BY xm123
//创建用户xiaoming,设置密码为xm123
DEFAULT TABLESPACE TEST_DATA
//指定默认表空间为test_data
TEMPORARY TABLESPACE TEST_TEMP;
//指定临时表空间为test_temp
指定默认表空间以后,用户xiaoming创建的表都在这个表空间下,除非额外指定;
当然,要给用户xiaoming授权才能创建表。
哦,是这样的,oracle就是多了一个用户的概念,一个链接的概念,他们的之间的关系好像是m:n
不过你们说的oracle 11以前的版本,11g 有个racle 11g sqldeveloper 这个可视 的 sql软件
配置
打开sqldeveloper——》Connections——》右键Connections——》弹出New / Select Database Connection
Connection Name
Username
Password
Hostname 默认localhost
Port 默认1521
SID 默认xe
这个和你安装的时候添的东西有关
然后弄个用户,这个用户和你安装的那个不一样
create 用户名 identified by 密码 ----创建用户
grant select to 用户名 ----授权 查找
grant resources to 用户名 ----授权 资源
上面这段是在那个类似CMD里面打的--PL/SQL
总之PL/SQL是一个写代码的,我也是先学的SQLSERVER,MYSQL什么的,后来才用Oracle 对那种代码也烦,后来就用了11g 可视的编辑,快捷好用,就和你们SQLSERVER一样
最后,你要是链接数据库什么的,可以使用odbc,不过,hibernate更好多,写hql比sql简单的多,而其无论什么数据库都是一样hql 至于备份,记得是有那个按钮选项的,至少11g是有导入,导出的,我那个时候做毕业设计的时候老师就要我导出的。
图片找不到了,不过网上应该有~~
备份数据库:mysql\bin\mysqldump -h(ip) -uroot -p(password) databasename database.sql
恢复数据库:mysql\bin\mysql -h(ip) -uroot -p(password) databasename database.sql
复制数据库:mysql\bin\mysqldump --all-databases all-databases.sql
修复数据库:mysqlcheck -A -o -uroot -p54safer
文本数据导入: load data local infile \"文件名\" into table 表名;
数据导入导出:mysql\bin\mysqlimport database tables.txt
mysql 的数据导入,导出
可以定义一个触发器,来把删除的记录写到一个日志表中,方法如下。
测试方法:
创建原始表,插入数据:
create table test
(id int,
name varchar2(10));
insert into test values (1,'张三');
insert into test values (2,'李四');
commit;
创建日志表:
create table test_log
(id int,
name varchar2(10),
deletedate date);
创建触发器:
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;
执行删除操作:
delete from test where id=2;
commit;
检测test表,及test_log表:
所以,可以证明,删除成功,并且将删除的数据写入到了日志表中。
如果是ddl语句删除的数据,比如truncate,drop什么的,你就去找找alertlog日志,这里会有记录。
如果是dml语句,delete那么就真的没办法了。毕竟dml不记录日志,除非你有相关触发器做记录。