Oracle主键选择对插入的影响
主键一般使用序列或者UUID使用UUID主要优点是分布式环境下,主键不会重复;缺点是性能相对较低。序列则相反,他在分布式环境下会重复,但是性能较高。实验分别测试序列,UUID,使用RAW类型的UUID,测试100W数据插入的时间。import java.sql.Connection;import java.sql.DriverManager;...
Linux批量编码转换
单位JAVA开发的标准编码都是GBK我们定义Web项目的数据库初始化脚本在META-INF目录下,分别为data.sql和tables.sql在windows环境,我们使用NSIS安装包自动执行这些SQL文件。但是到了Linux系统,一切都变了。比如,这些SQL文件都是GBK编码,而linux命令行默认都是utf-8,并且即使设置了console的编码,输入到数据库也是...
外键一定要加索引
Mysql创建外键约束会自动创建一个索引,但是Oracle不会这样做。所以Oracle在创建外键之后,一定要手动创建索引。如果没有在外键上创建索引,会经常遇到如下问题。1.死锁 --创建实验表create table emp as select * from hr.employees;create table dept as select *...
Oracle用户及角色的权限管理[Oracle基础]
1.查看所有用户: select * from dba_users; select * from all_users; select * from user_users;2.查看用户或角色系统权限(直接赋值给用户或角色的系统权限): select * from dba_sys_privs; select * from user_sys_privs;3.查看角色(只能查看登陆用户拥有的角色)所包含的权限sql...
生成某一用户下所有表数据的insert语句
转自王工的博客http://blog.csdn.net/wzy0623/article/details/8445228功能:生成某一用户下所有数据表数据的insert语句,放入d:\insert.sql文件。限制:只支持number、char、varchar2、date、long、clob数据类型。提示:数据量小还可以,大了就别用这种方式了,会很慢。CREATE OR REPLACE DIRECTORY mydi...
一张详解SQL连接的图
参考:http://www.dbabeta.com/2011/visual-sql-joins.html
文件系统满了库启不来的处理过程
问题:测试那边的dba突然说一个库文件系统被undo撑爆了,想改下undo的属性,但是现在库启不来,让帮忙给启下。后面他自己改undo。hp-u的机器。思路:mount,删或者挪一个控制文件来腾出点小空间,open,再重建undo。$ bdf Filesystem kbytes used avail %...
Oracle关于nvl的一个Bug
今天王工处理了一个关于nvl的Bug。这个问题十分诡异,发生在Oracle的特定版本,特定用法。王工不仅明确了Bug发生的条件,还推断了大致的原因。王工的技术总能让我联想到海...版本: Oracle Database 11g Enterprise Edition Release 11.2.0.1....
Oracle OMF 为鸡肋
Oracle OMF 为鸡肋 又听到有人说Oracle OMF 能减轻DBA 的工作量,Oracle 数据库服务器自己创建数据文件和自动销毁不再需要的文件。 作为一个真正意义上的DBA 来看,Oracle OMF 无非是一个鸡肋产品,对...
Logminer简单分析日志的实验
使用Logminer必须开启归档模式。Logminer通过分析在线日志和归档日志,可以挖掘DDL和DML,十分强大。实验简单的分析在线日志,查看一个用户相应的操作。最后关闭Logminer。SQL程序:begin for x in (select member from v$logfile) loop  ...
Oracle10G LOGMNR捕获不到记录(二)
很早以前就碰到这个问题,一直以为是由于没有设置FORCE_LOGGING的问题,今天才发现不是这个问题。上一篇文章介绍了问题的现象,并给出了解决方法,这里简单说明一下问题产生的原因。Oracle10G LOGMNR捕获不到记录...
Oracle10G LOGMNR捕获不到记录(一)
很早以前就碰到这个问题,一直以为是由于没有设置FORCE_LOGGING的问题,今天才发现不是这个问题。 问题起源是在10g的版本上使用LOGMNR找不到刚刚执行的DML操作:SQL> SELECT GROUP#, SEQUENCE#, STAT...
通过修改数据字典,变更表的owner
仅仅作为实验的记录操作风险很大实验首先创建两个用户edmond和test,在edmond模式下,创建一张表。然后通过修改Oracle数据字典,将这个表的owner改为test。可以看到实验表T的obj#为75934,他的所有者edmond的user#为92登录到dba帐号,将实验表T的owner改为93(TEST帐号)最后使用TEST帐号登录,查看T表的信息,owne...
如何通过sid查询造成死锁的sql语句,并杀死会话
1,一个update语句拿不到行锁被阻塞,会话sid=8888,如何找出阻塞者的sql,给出如何杀掉阻塞者会话的语句。设计一个实验(一) 会话1 跟新一行数据库,持有锁,目的就是查询出下面造成这天行锁的sql语句SQL> update emp1 set sal=323 where empno=7369;1 row updated. (二)会话2 ...
Oracle闪回删除恢复误删数据
单位把程序做成了exe的安装包。安装包在初始化数据库的时候,会先drop所有的表,然后建表,最后插入数据。在开发用的数据库,一个同事加了一天班,给所有的表和字段都加了注释,估计是用于PD反向工程。但是不凑巧,第二天另外一个同事运行安装包直接把他的表覆盖了...大致过程如下,同事A:create table a(...
使用Windows脚本进行逻辑备份
开发、测试和演示的数据库可以使用逻辑备份。首先,得到所有非系统用户,然后进行逻辑备份,最后删除过期的数据。backup.batrem 设置备份路径set backupdir=c:\tmp\rem 获取所有用户的列表@echo off@echo set echo off &nbs...
解决memory_target设置过小导致不能启动数据库的问题
我们的项目比较特殊,经常需要外出演示,领导觉得Oracle企业版过于庞大,让我们尝试一下OracleXE对资源的最低要求。看看我们古董级的电脑(512M 内存)能否运行我们的演示程序。但是我设置的memory_target过低,导致数据库不能启动了。解决过程如下,创建pfile,修改参数,然后使用pfile启动数据库。SQL> alter system s...
清除用户下所有的数据(清库)
我们的项目出于测试、演示或者研发自己觉得清爽的原因,经常需要清除数据库中的数据。但是表间定义了大量的外键关联,删除数据还需要遵从一定的业务关系,非常麻烦。我们的小伙伴通常都是Drop user xxx cascade;然后找到初始化脚本重新来过。其实可以在删除表数据之前,先禁用外键约束,删除之后,再启动约束。首先,...
使用数据泵导出DDL语句
数据泵可以导出dump文件的DDL语句。C:\\Users\\lihuilin>impdp lihuilin/xxxxxx directory=tmp dumpfile=test.dmp sqlfile=test.sqlImport: Release 11.2.0.1.0 - Production on 星期日 11月 10 23:29:50 2013Copyright (c) 1982, 2009, Oracle and/or its affiliates....
Oracle Exp误导入系统帐号的补救方法
单位一个同事误把Exp导入了system帐号,但是系统已经运行了一段时间,数据需要保留,所以不能用源dmp文件重新初始化..解决过程如下1.确定误导入对象的范围2.表的处理3.其他对象的处理4.删除system帐号下误导入的对象初始化对象,并导入system帐号create table t1 as select rownum n from dual connect b...