zoukankan      html  css  js  c++  java
  • Oracle小知识

    用TO_SINGLE_BYTE()函数转成半角 在插入
    SQL> !lsnrctl set log_status off;
    ! 在SQL里面表示执行非SQL的语句
    如:
    SQL> !fdisk -l
    window下是$,linux下是!

    跨schema的交叉型trigger在exp/imp时会丢失,因为所依赖的基表在exp/imp时断开了。
    除非你把这些shema全都导出。

    Number的数据声明如下:
    表示                     作用                        说明
    Number(p, s)        声明一个定点数        p(precision)为精度,s(scale)表示小数点右边的数字个数,精度最大值为38,scale的取值范围为-84到127
    Number(p)         声明一个整数             相当于Number(p, 0)
    Number            声明一个浮点数          其精度为38,要注意的是scale的值没有应用,也就是说scale的指不能简单的理解为0,或者其他的数。
     
    定点数的精度(p)和刻度(s)遵循以下规则:
    ?        当一个数的整数部分的长度 > p-s 时,Oracle就会报错
    ?        当一个数的小数部分的长度 > s 时,Oracle就会舍入。
    ?        当s(scale)为负数时,Oracle就对小数点左边的s个数字进行舍入。
    ?        当s > p 时, p表示小数点后第s位向左最多可以有多少位数字,如果大于p则Oracle报错,小数点后s位向右的数字被舍入

    oracle update 多表关联
     
    UPDATE a
       SET (ID, NAME) = (SELECT b.ID, b.NAME
                           FROM b
                          WHERE a.ID = b.ID)
     WHERE EXISTS (SELECT 1
                     FROM b
                    WHERE a.ID = b.ID) 

    查看SCN:
    SELECT dbms_flashback.get_system_change_number FROM dual;
    SELECT CURRENT_SCN FROM V$DATABASE;

    注意理解系统时间标记与scn 的每5 分钟匹配一次这句话,举个例子,比如scn:339988,339989 分别匹配08-05-3013:52:00 和2008-13:57:00,则当你通过as of timestamp 查询08-05-30 13:52:00 或08-05-30 13:56:59 这段时间点
    内的时间时,oracle 都会将其匹配为scn:339988 到undo 表空间中查找,也就说在这个时间内,不管你指定的时间点是什么,查询返回的都将是08-05-30 13:52:00 这个时刻的数据。

    查看SCN 和 timestamp 之间的对应关系:
    select scn,to_char(time_dp,'yyyy-mm-dd hh24:mi:ss')from sys.smon_scn_time;

    当查询的记录的结果集大于总记录的20%时,一定要使用全表扫描

    当AWR显示,占用资源较多的SQL是类似时,这是对这些SQL就应该使用绑定变量来减少硬解析.

    select name,value ,ISSYS_MODIFIABLE from v$parameter
    如果ISSYS_MODIFIABLE 返回的是false,说明该参数无法用alter system语句动态修改,需要重启数据库

    oracle子查询中能使用order by

    from 子句后面的内联视图是可以使用order by子句进行排序的。

    然而,其它视图或子查询是不能用order by进行排序的

    如果你要用选择前几条的话,需要在套一层变成from后面的内联视图。

    比如
    select * from dept a
      2  where a.deptno in
      3  (
    select depton from (
      4  select b.deptno from dept b
      5  order by b.dname
      6  ) [where rownum < 5])

    修改temp表空间自动增长:
    alter database tempfile 'D:\ORACLE\ORADATA\DBA\TEMP01.DBF' autoextend on next 20m;
    修改表空间自动增长:
    alter database datefile 'D:\ORACLE\ORADATA\DBA\user01.DBF' autoextend on next 20m;

    alter index rebuild与alter index rebuild online的区别
    online时可以在该索引的基表上执行DML,在在对基表操作的同时可以REBUILD INDEX,但是不能执行DDL语句,所以他们的锁机制是不样的。
    创建索引时通常会对该表设置一个表级共享(DML)锁,如果设置ONLINE ,
    如 果是非ONLINE方式,通常会对该表设置一个表级共享(DML)锁,那么就对DML语句冲突,如果设置ONLINE ,(会使用临时日志IOT表来记录中间改变的数据),但要使用两倍于传统方法的空间.表会变成行级共享锁,在创建索引或者ALTER完成后,对临时日志表 与基表进行MERGE

    注意并行处理,DDL,位图索引不能使用ONLINE。

    colb,字符串大对象,存的是长字符串数据
    blob,二进制大对象,存的是二进制型,比如图像、音频数据

    SQLPLUS 默认不是自动提交的.

    自动提交命令:
    SQL>set autocommit on

    临时表空间不能脱机。system,和正在使用(有活动session或transaction)的也不能。

    退出SQLPLUS 时会自动提交
    指定DDL,如CREATE , ALTER, DROP ,会自动提交
    执行DCL,如GRANT,REVOKE,会自动提交

    查询正在执行的sql
    select OSUSER, PROGRAM, USERNAME, SCHEMANAME, B.Cpu_Time, STATUS, B.SQL_TEXT 
      from V$SESSION A 
      LEFT JOIN V$SQL B ON A.SQL_ADDRESS = B.ADDRESS 
                      AND A.SQL_HASH_VALUE = B.HASH_VALUE 
      where b.SQL_TEXT is not null
    order by b.cpu_time desc

    Oracle在to_char()函数在计算一年中第几周是从该年的1月1日开始的。

    oracle 8i 官方下载地址
    http://www.oracle.com/technology/global/cn/software/products/oracle8i/index.html

    正在连接的用户不能删除,确实要删除的话,如下
    1、select sid,serial#,username from v$session where user='USERNAME';
    2、alter system kill session 'sid,serial#';
    3、drop user username cascade

    在排除索引限制的条件下,如果索引还是没有被引用,可以检查下参数。
    optimizer_index_cost_adj为100,该参数影响优化器选择索引还是全表扫描的倾向,将其修改为35.

    在Oracle中,要获得日期中的年份,例如把sysdate中的年份取出来,并不是一件难事。
      常用的方法是:Select to_number(to_char(sysdate,''yyyy'')) from dual,
      而实际上,oracle本身有更好的方法,那就是使用Extract函数,
      使用方法是:Select Extract(year from sysdate) from dual,这种方法省掉了类型转换,看上去更加简洁。
      相应的,要取得月份或日,可以用select extract (month from sysdate) from dual和select extract (day from sysdate) from dual。
    此方法获得的结果,是数值型的,大家可以设置一个方法测试一下。
    select EXTRACT(year FROM to_date('2009-11-10','yyyy-mm-dd')) year from dual;

    查询数据库默认的表空间类型:
    SQL> select property_name,property_value from database_properties where property_name='DEFAULT_TBS_TYPE';

    PROPERTY_NAME            PROPERTY_VALUE
    ------------------        ------------------
    DEFAULT_TBS_TYPE          BIGFILE

    在10g中,有一个特性,就是bigfile tablespace,这种类型的表空间只能有一个数据文件,且该数据文件允许有4G的数据快,即如果db_block_size=8k的话,最大容量为4G*8K=32T,当然,这个还要看操作系统的限制了。

    修改数据库默认的表空间类型为smallfile,就可以为表空间创建多个数据文件了。
    SQL> alter database set default smallfile tablespace;
    Database altered.

    也可以在创建表空间时,指定表空间类型:create smallfile/bigfile  tablespace ....

    exp 失败执行的脚本:
     
    catexp.sql
      这个脚本是用于生成exp命令执行时所需要的一些表和视图,在执行exp命令出现找不到什么什么表,什么什么视图时使用。
    catmeta.sql
      这个脚本是在升级后执行exp命令出现错误时运行,说是因为升级不成功,运行这个脚本可以重新创建系统表。

    select date'2009-11-11' as d from dual;
    select * from t where t.day=date'2009-11-11';
     
    日期一般就用to_date(str,format)格式转换
    像'yyyy-mm-dd'这样的可以直接用date'xxxx'简化


    RAC 启动,一般的话,启动底层crs,下面的服务都起来了.
    在root用户下启动crs:
    crsctl start crs
    手动启动rac的命令如下:
    ||||||||||||||||||||||||||||||||||||

    RAC的启动和关闭
            如果都遵循了上面的安装步骤,那么每次节点重新启动的时候,所有服务都会自动启动,如果需要关闭或者启动某个节点,如下所示
            *停止RAC
                    emctl stop dbconsole
                    srvctl stop instance -d orcl -i orcl1
                    srvctl stop instance -d orcl -i orcl2
                    srvctl stop asm -n rac1
                    srvctl stop asm -n rac2
                    srvctl stop nodeapps -n rac1
                    srvctl stop nodeapps -n rac2
            *启动RAC       
                    和上面的步骤正好相反即
                    srvctl start nodeapps -n rac1
                    srvctl start nodeapps -n rac2
                    srvctl start asm -n rac1
                    srvctl start asm -n rac2
                    srvctl start instance -d orcl -i orcl2
                    srvctl start instance -d orcl -i orcl1
                    emctl start dbconsole
                   
            使用 SRVCTL 启动/停止所有实例
    启动/停止所有实例及其启用的服务。
    srvctl start database -d orcl
    srvctl stop database -d orcl 

    sqlplus命令save可以把sql语句保存到文件中,可是默认的存放路径是$ORACLE_HOME/bin,即sqlplus可执行文件存放的位置,当然有的人说在文件名前加绝对路径即可:save d:\oracle\admin\oradb\emp.sql
    可是这种写法未免太麻烦,特别是使用get命令,也得使用绝对路径,因此如果能够修改save的默认位置,那么save/get就好写的多了。

    查询某一对象的类型,比如查询'v$datafile'是同义词还是视图?
    select * from all_objects where object_name=upper('v$datafile')
  • 相关阅读:
    JS 检查是否在微信浏览器
    php如何判断文件是否存在,包括本地和远程文件
    SQL 截取字段空格之前的数据
    JS 上拉加载
    struts2项目需要加入的jar包
    eclipse+maven+jetty环境下修改了文件需要重启才能修改成功
    根据父节点查询出所有的子节点
    oracle中,行转列函数wm_concat()结果有长度限制,重写该函数解决
    乱码!Eclipse 的控制台console必须用GBK编码。
    webpack 入门和常用插件的使用
  • 原文地址:https://www.cnblogs.com/datalife/p/1985320.html
Copyright © 2011-2022 走看看