Oracle数据删除恢复和数字与字符串之间的转换

Oracle数据删除恢复和数字与字符串之间的转换

1. 如何删除标准临时表?

举例:

------创建临时表

CREATE GLOBAL TEMPORARY TABLE t1

ON COMMIT PRESERVE ROWS AS

SELECT * FROM dual;

------删除临时表

TRUNCATE TABLE t1;

DROP TABLE t1;

 

2. drop删除的表如何恢复

1delete删除表记录行

 对当次操作,及时补救措施即为rollback;当前提是不能有显示的commit或者隐式的commit语句。

举例一:回退成功的例子

SQL> select count(*) from t1;

 

  COUNT(*)

----------

      2640

 

SQL> delete from t1;

 

已删除2640行。

 

SQL> rollback;

 

回退已完成。

 

SQL> select count(*) from t1;

 

  COUNT(*)

----------

      2640

举例二:回退失败的例子

SQL> select count(*) from t1;

 

  COUNT(*)

----------

      2640

 

SQL> delete from t1;

 

已删除2640行。

 

SQL> commit;

 

提交完成。

 

SQL> select count(*) from t1;

 

  COUNT(*)

----------

         0

 

SQL> rollback;

 

回退已完成。

 

SQL> select count(*) from t1;

 

  COUNT(*)

----------

         0

举例三:回退失败的例子

SQL> select count(*) from t1;

 

  COUNT(*)

----------

      2640

 

SQL> delete from t1;

 

已删除2640行。

 

SQL> create table t11 as select * from dual;

 

表已创建。

 

SQL> rollback;

 

回退已完成。

 

SQL> select count(*) from t1;

 

  COUNT(*)

----------

         0

注:DML语句是insert ,update, delete --->这个是要COMMIT才能存储在ORACLE数据库里;

DDL语句,是系统自动提交的,不需要你手动COMMIT

 

2drop删除表

用闪回操作恢复数据(要求:回收站数据没被删除)

举例:

Step1:误删表

SQL> select count(*) from

 

  COUNT(*)

----------

      2640

 

SQL> drop table t1;

 

表已删除。

 

Step2: 在表回收站查看是否有删除表信息

SQL> select * from recyclebin;

 

OBJECT_NAME                    ORIGINAL_NAME                    OPERATION

------------------------------ -------------------------------- ---------

TYPE                      TS_NAME                        CREATETIME

------------------------- ------------------------------ -------------------

DROPTIME               DROPSCN PARTITION_NAME                   CAN CAN

------------------- ---------- -------------------------------- --- ---

   RELATED BASE_OBJECT PURGE_OBJECT      SPACE

---------- ----------- ------------ ----------

BIN$xiLonmibSl+XC749TXPv6A==$0 T1                               DROP

TABLE                     USERS                          2015-04-29:11:46:58

2015-04-30:13:45:59   69114325                                  YES YES

224295      224295       224295          8

 

Step3: 恢复数据

SQL> flashback table t1 to before drop;

 

闪回完成。

 

SQL> select count(*) from t1;

 

  COUNT(*)

----------

      2640

   数据恢复完成。

   注:

1)相关的技术还有很多,有待进一步补充!

2)清空表回收站语句:PURGE RECYCLEBIN;

 

3. 快速删除表所有数据行,并保留表结构?

truncate table table_name;而避免用delete from table_name

 

4. 数据库DMLDDL区别?

 

5.  oracle数据库delete删除数据恢复的方法

SCN(系统改变号),它的英文全拼为:System Change Number,它是数据库中非常重要的一个数据结构。SCN提供了Oracle的内部时钟机制,可被看作逻辑时钟,这对于恢复操作是至关重要的

  注释:Oracle 仅根据 SCN 执行恢复。

它定义了数据库在某个确切时刻提交的版本。在事物提交时,它被赋予一个唯一的标示事物的SCN。一些人认为 SCN是指, System Commit Number,而通常 SCN在提交时才变化,所以很多情况下,这两个名词经常被交替使用。

方法一:案例测试

Step1:不小心删除了表中的数据,并提交了(commit)

 

SQL> select count(*) from t1;

 

  COUNT(*)

----------

      2640

 

SQL> delete from t1;

 

已删除2640行。

 

SQL> commit;

 

提交完成。

 

SQL> select count(*) from t1;

 

  COUNT(*)

----------

         0

 

Step2: 获得当前的SCN

如果能够确切知道删除之前SCN最好,如果不知道,可以进行闪回查询尝试.

SQL> select dbms_flashback.get_system_change_number from dual;

 

GET_SYSTEM_CHANGE_NUMBER

------------------------

                69117175

 

SQL> select count(*) from t1 as of scn 69117175;

 

  COUNT(*)

----------

         0

 

SQL> select count(*) from t1 as of scn 69116888;

 

  COUNT(*)

----------

      2640

可以看到在SCN=69116888时,数据都在。

 

Step3: 恢复数据

SQL>  insert into t1 select * from t1 as of scn 69116888;

 

已创建2640行。

 

方法二:案例测试

 

Step1: 误删数据,并commit

SQL> select count(*) from t1;

 

  COUNT(*)

----------

      2640

 

SQL> delete from t1;

 

已删除2640行。

 

SQL> commit;

 

提交完成。

 

SQL> select count(*) from t1;

 

  COUNT(*)

----------

         0

Step2: 误删数据后的还原

 

SQL> select timestamp_to_scn(to_timestamp('2015-04-30 15:00:00','yyyy-mm-dd hh24:mi:ss')) from dual;

 

 

TIMESTAMP_TO_SCN(TO_TIMESTAMP('2015-04-3015:00:00','YYYY-MM-DDHH24:MI:SS'))

---------------------------------------------------------------------------

                                                                  69118620

 

SQL> select count(*) from t1 as of scn 69118620;

 

  COUNT(*)

----------

      2640

 

SQL> insert into t1 select * from t1 as of scn 69118620;

 

已创建2640行。

 

 

6. oracle中如何将数字转换成字符型?

补充知识:

Oracle中格式化参数FM的意义:

You will notice that in some examples, the format_mask parameter begins with "FM". This means that zeros and blanks are suppressed.

   在格式参数FMT中,前面加上FM代表去掉返回结果中的前后空格和0。

SQL> SELECT to_char(SYSDATE,'mm,day') FROM dual;

 

TO_CHAR(SYSD

------------

04,星期四

 

SQL> SELECT to_char(SYSDATE,'fmmm,day') FROM dual;

 

TO_CHAR(SYSD

------------

4,星期四

 

 

 

举例:数值转化

SQL> select '1:'||to_char(0.12345,'99900.00') NUM from dual;

 

NUM

-----------

1:    00.12

 

SQL> select '1:'||to_char(0.12345,'00.00') NUM from dual;

 

NUM

--------

1: 00.12

 

SQL> select '1:'||to_char(0.12345,'FM00.00') NUM from dual;

 

NUM

--------

1:00.12

 

SQL> select '1:'||to_char(0.12345,'FM990.00') NUM from dual;

 

NUM

---------

1:0.12

 

SQL> select '1:'||to_char(34.12345,'FM990.00') NUM from dual;

 

NUM

---------

1:34.12

 

SQL> select '1:'||to_char(12334.12345,'FM990.00') NUM from dual;

 

NUM

---------

1:#######

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值