TQ's BLOG

Oracle关于时间/日期的操作

Posted by TQ on 八月 18th, 2009

1.日期时间间隔操作

当前时间减去7分钟的时间

select  sysdate,sysdate - interval '7' MINUTE  from dual; 

当前时间减去7小时的时间

当前时间减去7天的时间

1
SELECT  sysdate - interval '7' day  FROM dual ;

当前时间减去7月的时间

select  sysdate,sysdate - interval '7' month from dual ; 

当前时间减去7年的时间

select  sysdate,sysdate - interval '7' year   from dual ; 

时间间隔乘以一个数字

select  sysdate,sysdate – 8 *interval ‘2′ hour   from dual;

2.日期到字符操作

select  sysdate,to_char(sysdate,’yyyy-mm-dd hh24:mi:ss’)  from dual ;

select  sysdate,to_char(sysdate,'yyyy-mm-dd hh:mi:ss')  from dual ; 

select  sysdate,to_char(sysdate,'yyyy-ddd hh:mi:ss')  from dual ; 

select  sysdate,to_char(sysdate,'yyyy-mm iw-d hh:mi:ss')  from dual ; 

   参考oracle的相关关文档(ORACLE901DOC/SERVER.901/A90125/SQL_ELEMENTS4.HTM#48515)

3. 字符到日期操作

select  to_date(’2003-10-17 21:15:37′,’yyyy-mm-dd hh24:mi:ss’) from dual

具体用法和上面的to_char差不多。

4. trunk/ ROUND函数的使用

select  trunc(sysdate ,’YEAR’)  from dual

select  trunc(sysdate )  from dual

select  to_char(trunc(sysdate ,’YYYY’),’YYYY’)  from  dual

5.oracle有毫秒级的数据类型

–返回当前时间 年月日小时分秒毫秒

select to_char(current_timestamp(5),’DD-MON-YYYY HH24:MI:SSxFF’) from dual;

–返回当前 时间的秒毫秒,可以指定秒后面的精度(最大=9)

select to_char(current_timestamp(9),’MI:SSxFF’) from dual;

6.计算程序运行的时间(ms)

declare

    type rc is ref cursor;

    l_rc rc;

    l_dummy all_objects.object_name%type;

    l_start number default dbms_utility.get_time;

begin

    for  I  in 1 .. 1000

    loop

        open l_rc for

          ’select object_name  from all_objects ‘||

‘where object_id = ‘ || i;

        fetch l_rc into l_dummy;

        close l_rc;

    end loop;

    dbms_output.put_line

    ( round( (dbms_utility.get_time-l_start)/100, 2 ) ||

      ‘ seconds…’ );

end;

在WINDOWS 下改变sqlplusw字体大小

Posted by TQ on 八月 18th, 2009

有时在做演示时希望修改SQLPLUSW字体大小,可通过修改注册表完成。
位置:
\HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraDb10g_home1

增加String Value
sqlplus_font  其值为terminal
sqlplus_font_size  其值可为 数值,如16,18,20 …

重启SQLPLUSW后可观察到效果

- The End -
转自:http://space.itpub.net/13940/viewspace-611702

备份策略的选择

Posted by TQ on 八月 14th, 2009

数据量
归档否
是否是容易加载,而比恢复更快
是否有存储软件
是否为裸设备

数据量:
如果数据量小,每天全备份
如果数据量大,要有rman的备份策略

归档否:
非归档数据库:只有冷备份
归档:既可以冷备份,也可以热备份

是否是容易加载,而比恢复更快:
如果数据是每天统一灌入,以后就是查询
可以每天冷备份,失败后先将数据库恢复到备份点,再重新灌入

是否有存储软件:
如果有其它存储软件
最好归档,rman,增量

是否为裸设备:
如果是裸设备
rman或逻辑备份
还有ocopy
ocopy from_file [to_file [a | size_1 [size_n]]]
ocopy -b from_file to_drive
ocopy -r from_drive to_dir

Oracle备份

Posted by TQ on 八月 14th, 2009

备份:
    DBWR:
    LGWR:(oradata中)三个日志redo01.log、redo02.log、redo02.log。
    ARCH:归档日志:备份redo日志。    要完整恢复archivelog归档。
    CKPT:通知DBWR、LGWR、ARCH什么时候写;通知控制文件写。

至少备份(2个):数据文件、redo log。
    物理备份:v$datafile、v$logfile、v$controlfile、v$recovery_log、密码文件、参数文件。
        (前三个最重要!)
    逻辑备份:二进制文件、文本文件——用DML、DDL、DCL。
          导入/导出:IMP、EXP

冗余机制:备份要放到其它物理位置。

物理备份、逻辑备份 都是“垃圾数据”。

当恢复时,
非归档:如不要最新的数据时,OK!   noarchivelog
归档:日志(LGWR、ARCH),可部分或完整恢复。

设置为归档:
① >startup mount;
② >alter database archivelog;        –>10G
   >alter system archive log start;    –>9i
③ >alter database open;
④ >archive log list;
归档文件存放在:/u01/app/flash_recovery_area/    (10g)
单机>alter system switch logfile;    切换日志,会在归档目录下有日志产生。
集群>alter system archive log current;

>archive log all;    看哪些日志要归档

冷备份:
停止数据库后做的备份;
所有的数据库都可以冷备份;
冷备份不能备局部,必须备份整体;
没有增量备份策略;
需要的空间较大;
概念简单,执行简单。

冷备份的执行步骤:
⑴ 一致性停止数据库(shutdown immediate;)
⑵ 备份:数据文件、控制文件、日志文件、
     密码文件、参数文件、临时文件(可选)
⑶ 启动数据库。

书写冷备份脚本:
select ‘copy ‘||name||’ d:\bk’ from v$datafile
union all
select ‘copy ‘||name||’ d:\bk’ from v$controlfile
union all
select ‘copy ‘||name||’ d:\bk’ from v$tempfile
union all
select ‘copy ‘||member||’ d:\dk’ from v$logfile;
这是是脚本的局部,前面得加停止数据库,后面加启动数据库,另外加上参数文件和密码文件的备份命令。
运行脚本
查看日志
1。数据库停止了
2。复制成功
3。数据库启动了

优点:
    冷备份是最可靠的备份;
    在不完全恢复前和后都最好做冷备份。
缺点:
    必须停止数据库;
    空间占用大,冷备份是一个整体,不能备份局部,所以使用的时候有一定的局限性,当然如果是归档数据库可以备份局部,但一般我们不这么做,因为归档数据库可以热备份,不必停止数据库。

冷备份的恢复:
停止数据库,将备份复制回原来的目录就可以。
将数据库带回到备份的时间点。如果想恢复全部的交易,要应用归档的日志。

热备份:
数据库open下的备份;
数据库必须处于归档状态;
可以备份局部;
没有增量备份策略。

备份内容:
    数据文件、控制文件、归档日志文件、密码文件、参数文件;
    不能备份在线的日志文件redo log。

数据文件的备份:
alter tablespace users begin backup;
host copy ####  *****
alter tablespace users end backup;
除了临时表空间外,所有表空间都要做一遍。
> select *  from v$backup;

alter tablespace users begin backup;
1。将该表空间的文件单独存盘。
2。将该表空间的文件头冷冻。
3。日志的产生加入了变化块的原来拷贝。
4。数据文件体不影响,因为文件头中没有我们的数据,所以交易可以继续。
5。恢复的时候需要归档文件的支持。

alter tablespace users end backup;
将文件头解冻
将控制文件中最新的存盘时间SCN写入文件头
一句话,热备份的文件是一个〖无效的垃圾文件〗,需要〖日志的配合〗才能恢复,所以归档数据库是热备份的前提条件。热备份的文件中〖只有一个数据块〗是保真的,就是被冷冻的数据文件头的〖第一个块〗,文件头有8个块,数据库只冷冻一个,因为数据库只是需要一个SCN坐标而已。其余7个数据块含有范围的信息,是会改变的,不能冷冻。我们备份的垃圾文件的数据块有两类:一是SCN小于头的块,另一类是SCN大于头的块,凡是大于文件头的块都有一个该块的原形存在于日志文件中。

2009年8月14日 测试引用

Posted by TQ on 八月 14th, 2009

0001390: ffdf e2ff dfe2 ffdf e2ff df00 0000 7171  …………..qq
00013a0: 71c4 ddc1 e2ff dfe2 ffdf e2ff dfe2 ffdf  q……………
00013b0: e2ff dfe2 ffdf e2ff df00 0000 e2ff dfe2  …………….
00013c0: ffdf e2ff df00 0000 0000 0000 0000 e2ff  …………….
00013d0: dfe2 ffdf e2ff df00 0000 0000 0000 0000  …………….
00013e0: e2ff dfe2 ffdf e2ff dfe2 ffdf 0000 0000  …………….
00013f0: 0000 e2ff dfe2 ffdf 0000 0000 0000 0000  …………….
0001400: 0000 0000 e2ff dfe2 ffdf e2ff dfe2 ffdf  …………….
0001410: e2ff dfe2 ffdf 0000 00e2 ffdf e2ff dfe2  …………….
0001420: ffdf e2ff df00 0000 e2ff dfe2 ffdf e2ff  …………….
0001430: df00 0000 e2ff df00 0000 e2ff dfe2 ffdf  …………….
0001440: e2ff dfe2 ffdf e2ff dfe2 ffdf e2ff dfe2  …………….
0001450: ffdf e2ff dfe2 ffdf e2ff dfe2 ffdf e2ff  …………….


Copyright © 2009 TQ 试用 WP. All rights reserved.