Oracle-禁止用户对自己的表执行drop,alter操作
在大型项目的数据管理中,数据库的安全隐患非常大,既要允许开发人员能够登陆数据库,查询数据,但是又不能对表进行删除,修改权限。针对这种情况有两种解决方案:1.在sys用户建立触发器,不允许用户删除和修改表。2.建立B用户,给B用户对A用户表的insert,update权限,不给其他权限。这里先说下1的实现:[@more@]CREATE OR REPLACE TRIGGER T_TEST BEFORE DROP OR ALTER ON databaseDECLAREBEGINIF ora_dict_obj_owner = 'TEST' AND ora_sysevent = 'DROP' THENraise_application_error(-20002,'不允许删除对象');ELSIF ora_dict_obj_owne
Oracle递归查询sql
Oracle递归查询sql[@more@]查询自己已经所有的父节点select * from base_prod_area t START WITH t.area_id in(2110291,752262,2142624) CONNECT BY PRIOR t.parent_id=t.area_id查询自己已经所有的子节点select * from base_prod_area t START WITH t.area_id in(752254) CONNECT BY PRIOR t.area_id=t.parent_id
Oracle分页查询之order by
Oracle分页查询之order by[@more@]今天在做oracle分页查询时发现同一条记录出现在了不同的页中。出现这种原因是因为分页时使用了order by,并且order by的字段,同一个值有多条记录。解决方法是在再加一个order by字段,确保这两个字段的值的同时只能确定一条记录就行了
ORA-00824:cannot set sga_target due to existing internal setting --SOLUTION
ORA-00824:cannot set sga_target due to existing internal setting --SOLUTION[@more@]C:Documents and SettingsAdministrator>sqlplus / as sysdbaSQL*Plus: Release 10.2.0.1.0 - Production on Thu Oct 14 21:46:55 2010Copyright (c) 1982, 2005, Oracle. All rights reserved.Connected to an idle instance.SQL> startupORA-00824: cannot set sga_target due to existing internal settings, see alert log for more information#to solve this problem# 1-create pfile from your spfielSQL> create pfile from spfile
oracle ORA-00904 poltyp 标识符无效
今天在用exp命令导出数据库时,发生了上面的错误,原因分析如下:[@more@]使用了11g的客户端去导10g的数据库,会发生如上的错误,我电脑上同时装着10g和11g,去系统环境变量里,把10g的路径移到11g的路径前面即可。
Oracle的分页查询
分页查询格式:SELECT * FROM (SELECT A.*, ROWNUM RN FROM (SELECT * FROM TABLE_NAME) A WHERE ROWNUM <= 40)WHERE RN >= 21[@more@]其中最内层的查询SELECT * FROM TABLE_NAME表示不进行翻页的原始查询语句。ROWNUM <= 40和RN >= 21控制分页查询的每页的范围。上面给出的这个分页查询语句,在大多数情况拥有较高的效率。分页的目的就是控制输出结果集大小,将结果尽快的返回。在上面的分页查询语句中,这种考虑主要体现在WHERE ROWNUM <= 40这句上。选择第21到40条记录存在两种方法,一种是上面例子中展示的在查询的第二
查看和修改Oracle字符集
查看字符集命令:select userenv('language') from dual [@more@]修改字符集:1、用sysdba角色用户登录sqlplus: 命令行输入:sqlplus sys as sysdba2、输入口令,进入sqlplus:sql>---3、依次键入下面的命令行执行:shutdown immediate;STARTUP MOUNT;ALTER SESSION SET SQL_TRACE=TRUE;ALTER SYSTEM ENABLE RESTRICTED SESSION;ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;ALTER SYSTEM SET AQ_TM_PROCESSES=0;ALTER DATABASE OPEN;ALTER DATABASE character set INTERNAL_USE AL32UTF8;ALTER SESSION SET SQL_TRACE=FALSE;shutdown imme
Oracle 11g 导出空表解决办法
11G中有个新特性,当表无数据时,不分配segment,以节省空间[@more@] 解决方法: 1、insert一行,再rollback就产生segment了。 该方法是在在空表中插入数据,再删除,则产生segment。导出时则可导出空表。 2、设置deferred_segment_creation 参数 该参数值默认是TRUE,当改为FALSE时,无论是空表还是非空表,都分配segment。 需注意的是:该值设置后对以前导入的空表不产生作用,仍不能导出,只能对后面新增的表产生作用。如需导出之前的空表,只能用第一种方法。搞了我好久,最后查到这个方法。先查询一下当前用户下的
Oracle11新特性——备份恢复功能增强
http://yangtingkun.itpub.net/post/468/429571[@more@]
Oracle 启动命令
启动监听:lsnrctl start 查看监听状态:lsnrctl status启动数据库:sqlplus /nologconn sys/kfdb as sysdbastartup[@more@]
Problems with OWB 11.2 on Winsows XP
Problems:当我在电脑安装完成OWB11.2,想要进入Design Center的时候,出现如下错误"Unable to create an instance of the Java Virtual Machine:Located at path:D:oracleproduct11.2.0owb_homejdkjrevinclientjvm.dll"Answer:打开OWB安装路径,我本地是D:oracleproduct11.2.0owb_homeowbbin找到owb.conf这个文件AddVMOption -Xmx768m 改为 AddVMOption -Xmx512m[@more@]
Oracle-AUL:黑夜前的最后救赎
今天自己测试了一下工具AUL,在truncated表之后恢复数据,在此记录下来。在AUL官方网站有详细步骤http://www.dbatools.net/mydul/aul-example.html1.建立测试用的表空间TEST,建表TEST,插入1000条数据。2.TRUNCATE TABLE TEST后,TEST表数据全部清空。3.在Oracle目录中,我本地是D:oracle_dbproduct10.2.0oradataorcl,拷贝出来两个文件SYSTEM01.DBF--系统表空间数据文件,需要用它来确定哪个用户,哪个表TEST01.DBF--这个是前面建的测试表空间TEST的数据文件,表TEST的数据还存在这里面4.我们需要工具AUL来恢复TRUNCATE掉的数据,下载地
Oracle-位图索引
Oracle位图索引是建立在基数较小的列上的索引,这个大家都知道--create bitmap index z_index on T(type);但是需要注意的是,如果这个列需要经常更新或者每次操作都会更新这个列,那么就不要建立位图索引。因为建立位图索引,一个键指向多行数据,当更新某一行的索引列时,这个键指向的所有的行都被锁定,在提交事务之前别人是无法进行update和insert的,它一次最多只允许一个人进行插入或者更新,否则会产生阻塞。[@more@]
Oracle隐式类型转换导致索引失效
Oracle隐式类型转换导致索引失效隐式类型转换就是Oracle在判断类型是自动将varchar2类型转换为number类型,或者将number类型转换为varchar2类型,隐式类型转换必须要求是可以转化的,比如varchar2类型的123可以转化为number,但是abc就不可以转换注:隐式类型转换number转换成varchar2时,索引会失效。varchar2转换为number时,索引并不失效-- Create tablecreate table Z_HASH(ID VARCHAR2(100) primary key,NAME VARCHAR2(100))--创建存储过程,插入数据CREATE OR REPLACE PROCEDURE "ETL_Z_HASH_" ISBEGINFOR i IN 1..100000
select into与EXECUTE IMMEDIATE的用法
正确写法是:vch_Sql:='select sysdate from dual';EXECUTE IMMEDIATE vch_Sql into v_s;而不是:vch_Sql:='select sysdate into :1 from dual';EXECUTE IMMEDIATE vch_Sql USING v_s;[@more@]195133729