Oracle10G的silent(静默)安装、升级和卸载
Oracle提供了不需要OUI的安装,本文主要介绍了以下三个方面的内容:1、如何以silent模式安装和卸载10g的软件2、如何以silent模式安装和卸载10g数据库3、如何以silent模式将9i库升级到10g测试环境:1、RHEL AS3U8 2、Solaris 9要安装的是Oracle10.2.0.1 系统上已经安装有Oracle9.2.0.4 [@more@]1、如何以silent模式安装和卸载10g的软件1.1 制作response文件,该文件记录了交互式中回答的值 有两种方式制作: <1> 在安装软件目录下有个response目录, 其下有enterprise.rsp standard.rsp custom.rsp 可以配置其中一个文件
关于参数_b_tree_bitmap_plans的设置
最近做一个应用系统的升级工作,其中数据库升级部分执行到一半就停下来了,检查数据库,发现是停在一个批量调用insert语句中.将语句找出来手工执行,发现一次insert操作都要125秒, 仔细检查执行计划, 发现居然没有进行并行扫描(本来系统设置了并行扫描功能),而且在别的系统中都可以正常执行.经过对比执行计划后发现, 有问题的系统中把B树索引转换为bitmap索引后再进行比较,导致并行功能没有启动. 查阅相关资料后确定:该转换由隐藏参数_b_tree_bitmap_plans决定。如果该参数为true,则进行转换,否则不进行转换。而8i里,该参数缺省为false,所
SQLServer中动态查询sql返回值给变量的方法
1) DECLARE @tbname sysname,@sql varchar(100) SET @sql='SELECT '+@tbname+'=name FROM sysobjects where id=1' EXEC(@sql) SELECT @tbname 2) declare @num int, @sqls nvarchar(4000) set @sqls='select @a=count(*) from tableName ' exec sp_executesql @sqls,N'@a int output',@num output [@more@]
update关联更新在sqlserver和oracle中的实现
sqlserver和oracle中实现update关联更新的语法不同,都可以通过inline view(内嵌视图)来实现,总的来说sqlserver更简单些. 测试例子如下:[@more@]create table tmp_a(cpcode varchar2(10),sb_ym varchar2(6),flag char(1));create table tmp_b(cpcode varchar2(10),sb_ym varchar2(6),flag char(1));insert into tmp_a(cpcode,sb_ym,flag)values('3201910001','200406','e');insert into tmp_a(cpcode,sb_ym,flag)values('3201910002','200406','e');insert into tmp_b(cpcode,sb_ym,flag)values('3201910001','200406','r');insert into tm
在不同版本中, 在PLSQL中MAX/MIN函数对CHAR型数据处理的返回类型不同
在不同版本中, 在PLSQL中MAX/MIN函数对CHAR型数据处理的返回类型不同以下版本返回VARCHAR2类型:9.2.0.4 9.2.0.5 9.2.0.6 9.2.0.7 10.1.0.110.1.0.210.1.0.3以下版本返回CHAR类型:8.1.7.410.1.0.4 10.1.0.510.2.0.1 注意:无论在哪个版本下在sqlplus下返回都是char类型测试例子:[@more@]create table tbl_a ( r1 char(1) );create table tbl_b ( r1 char(6), r2 char(6) );insert into tbl_a values ( '1' );insert into tbl_b values ( '1', 'BB' );commit;DECLARECURSOR C1 ISSELECT MAX(R1) A_R1 FROM TBL_A;ORA_RTN NUMBER;WK_R2 CH
关于Oracle字符类型的比较
今天纠正了一个概念: 以前一直以为char类型的比较就是直接比较,和varchar2比较一样,汗...........主要是平时设计表时基本都用varchar2,很少用char关于字符值的比较, Oracle使用以下两种比较规则:1、空格补齐比较语法对于类型CHAR、NCHAR、text literals、USER函数值, 在进行比较时, 先在较短的那个字符串后补上空格以使长度相等, 然后再进行比较.所以, 'ab'='ab '2、非补齐比较语法对于类型VARCHAR2、NVARCHAR2, 则不用补齐, 直接进行比较.[@more@]C:>sqlplus scott/tiger@vm_dbSQL*Plus: Release 9.2.0.1.0 -
Oracle Bug: 在PL/SQL中使用开窗函数后报ORA-00905
今天在一个存储过程中使用到了分析函数中的开窗函数的功能,开窗函数是用来指定分析函数工作的数据窗口大小,这个数据窗口大小可能会随着行的变化而变化。结果编译时老是报错:PL/SQL: ORA-00905: missing keyword, 把该SQL语句从程序中抽出来在sqlplus下单独执行没有问题, 想到好像以前的版本(似乎是8i)中都不支持在PLSQL中写分析函数,怀疑在新版本中支持得有问题,在metalink中搜了下,果然是Bug 3083373 :https://metalink.oracle.com/metalink/plsql/f?p=130:14:11074853651227166603::::p14_database_id,p14_docid,p14_show_header,p14
把表函数授权给其它用户时的bug
最近在安装一个软件产品时,发现在混合使用pipelined函数和表函数时,在赋权限给其它用户时,Oracle 9.2.0.1版本有bug. tom kyte在asktom的文章:http://asktom.oracle.com/pls/ask/f?p=4950:8:::::F4950_P8_DISPLAYID:4447489221109中建议从9201升级到9205、9206以上metalink上的BUG号为:2204827https://metalink.oracle.com/metalink/plsql/ml2_documents.showDocument?p_id=2204827&p_database_id=BUG上面说这个bug在版本9202就fixed了[@more@]下面语句测试环境Oracle 9.2.0.1 for WindowsSQL> create table tx_vw ( x int );Tabl
关于导出时出现EXP-00091错误
今天有人问导出数据库时老是发现有EXP-00091错误,但又发现数据导入后也没有什么问题。其实这个错误产生原因是表数据的统计信息和当前表实际信息不一致,比如表实际有10000行,统计信息却只有500行,后果是导致CBO生成的执行计划可能不是最优路径,不过可以把这个报错看作是一个警告。如果不想看到这个警告,可以通过添加参数STATISTICS=NONE 来进行屏蔽[@more@]
Oracle10g中MERGE功能的增强
Oracle9i引入了MERGE命令,你能够在一个SQL语句中对一个表同时执行inserts和updates操作.MERGE命令从一个或多个数据源中选择行来updating或inserting到一个或多个表.在Oracle 10g中MERGE有如下一些改进:1、UPDATE或INSERT子句是可选的2、UPDATE和INSERT子句可以加WHERE子句3、在ON条件中使用常量过滤谓词来insert所有的行到目标表中,不需要连接源表和目标表4、UPDATE子句后面可以跟DELETE子句来去除一些不需要的行[@more@]首先创建示例表:create table PRODUCTS( PRODUCT_ID INTEGER, PRODUCT_NAME VARCHAR2(60), CATEGORY VARC
Undocument Function 【转载】
这篇文章介绍了一些Oracle未写入帮助文档的函数,其中有些函数在跟踪文件(trace文件)Oracle后台系统给出的[@more@]10.1.0 9.2.0 SYS_OP_VECOR 位运算 or 对16进制的进行的运算 两个参数应为 BINARY 10.1.0$lg@tone.lg.ok >select SYS_OP_VECOR('ff','10') from dual; SY -- FF SYS_OP_VECXOR 位运算 xor 对16进制的进行的运算 两个参数应为 BINARY 10.1.0$lg@tone.lg.ok >select SYS_OP_VECXOR('ff','10')
Oracle10g的新数据类型:本地浮点数据类型
Oracle在10gR1推出本地浮点数据类型(Native Floating-Point Data Types): BINARY_FLOAT(单精度32位)和BINARY_DOUBLE(双精度64位). 这些新数据类型都是基于IEEE二进制浮点运算标准,ANSI/IEEE Std 754-1985 [IEEE 754]. [@more@]使用这些类型时要加上文字f(BINARY_FLOAT)或者d(BINARY_DOUBLE).比如,2.07f 、3.000094dSQL和PL/SQL都支持这些新的数据类型: SQL例子: CREATE TABLE t (f BINARY_FLOAT, d BINARY_DOUBLE); Table created. INSERT INTO t VALUES (2.0f, 2.0d); 1 row created. INSERT INTO t VALUES (1.5f/0.5f, 1.5d/0.5d); 1
常见等待事件的分析解决方法
我们可以通过视图v$session_wait来查看系统当前的等待事件,以及与等待事件相对应的资源的相关信息,从而可确定出产生瓶颈的类型及其对象。v$session_wait的p1、p2、p3告诉我们等待事件的具体含义,根据事件不同其内容也不相同,下面就一些常见的等待事件如何处理以及如何定位热点对象和阻塞会话作一些介绍。 [@more@]<1> db file scattered read DB 文件分散读取这种情况通常显示与全表扫描相关的等待。当全表扫描被限制在内存时,它们很少会进入连续的缓冲区内,而是分散于整个缓冲存储器中。如果这个数目很大,就表明该表找不到索
Oracle10gR2在RH9下启动监听器错误解决方法
在RedHatLinux9下安装完Oracle10.2.0.1后,发现启动监听器老是报错如下:TNS-12537: TNS:connection closedTNS-12560: TNS:protocol adapter errorTNS-00507: Connection closedLinux Error: 29: Illegal seek[@more@]重建监听器也不能解决,最后在metalink上找到答案,原来不知道谁将/etc/hosts下的127.0.0.1 localhost.localdomain localhost给删除了,Oracle从10.1.0.3开始在启动监听器时需要使用到localhost这个本地名字来支持ONS (Oracle Notification Services).解决方法就是将127.0.0.1 localhost.localdomain localhost添加到/etc/host
LINUX 基准安全清单[转载]
系统安全记录文件操作系统内部的记录文件是检测是否有网络入侵的重要线索。如果你的系统是直接连到Internet,你发现有很多人对你的系统做Telnet/FTP登录尝试,可以运行"#more /var/log/secure | grep refused"来检查系统所受到的攻击,以便采取相应的对策,如使用SSH来替换Telnet/rlogin等。[@more@]启动和登录安全性 1. BIOS安全 设置BIOS密码且修改引导次序禁止从软盘启动系统。 2. 用户口令 用户口令是Linux安全的一个基本起点,很多人使用的用户口令过于简单,这等于给侵入者敞开了大门,虽然从理论上说,只
sqlldr并行加载问题
最近有人问我说,使用sqlldr进行直接路径加载时添加并行参数parallel=true后,并没有发现数据加载效率提高多少.[@more@]我先是怀疑机器不是多cpu的,但对方机器有8个cpu;后来仔细查看文档才知道参数parallel并不是让一个sqlldr语句起多个进程来加载数据,而是不锁住加载表,允许别的直接路径加载. 所以要使parallel起作用,应该先将要加载的数据文件分成多个,用多个sqlldr语句同时加载,如下例:sqlldr userid=scott/tiger control=load1.ctl data=data1.txt direct=y parallel=true &sqlldr userid=scott/tiger control=load2.ctl data=data2
sqlldr加载clob类型遇到的问题
当使用sqlldr加载很长的字符串(超过4000)到表中的clob类型中时,老是报错: 数据文件的字段超出最大长度.查找相关资料后得知,sqlldr每次读入文件中数据流的数据类型默认为CHAR ,长度为 255 .所以只要超过255字符的段都会报这个错.解决方法很简单,在控制文件中字段后添加上char(1000000),例如:LOAD DATA INFILE * INTO TABLE DEMO TRUNCATE
使用rowid来在线重定义表
网上已经有很多在线重定义表的例子,但是大多基于主键进行的,其实oracle也支持rowid的方式进行重定义,下面就简单举个例子. [@more@]SQL> create table demo_1 (id number);表已创建。SQL> insert into demo_1 values (1);已创建 1 行。SQL> insert into demo_1 values (2);已创建 1 行。SQL> insert into demo_1 values (2);已创建 1 行。SQL> insert into demo_1 values (3);已创建 1 行。SQL> insert into demo_1 values (3);已创建 1 行。SQL> commit;提交完成。SQL> execute dbms_redefinition.can_redef_tabl
sqlserver的update操作比oracle快得多
最近听朋友说sqlserver平台上update操作比oracle要快得多,于是做了下测试.测试机就是pc机,同时安装oracle9204和sqlserver2000,分别单独启动进行测试.对于100万行具有4个int类型的表,同时更新4个字段,sqlserver要37秒,oracle要164秒,差距很明显.经过查阅相关资料,知道sqlserver在update的时候居然是表级锁,就是说其它会话不能对该表进行update,会被阻塞,即使update的行和第一个会话update的行不一样也不行.即sqlserver是通过锁住整个表资源来达到update的高性能,牺牲了并行性,当有大量用户同时进行update时就会导致整个系统全部慢下来.而or
10g文档中的bug
今天看10g的文档Database Reference,在附录A Database Limits的Physical Database Limits中,发现有个地方写得不是很准确:Smallfile (traditional) Tablespaces Number of blocks (4 MB) blocks 意思是对于传统表空间,其最大尺寸是4M个数据块(block)这个说法是不准确的,应该说是传统表空间的中每个数据文件的最大尺寸是4M个数据块(block)举例如下(block=8k):[@more@]SQL> create tablespace demo datafile '/u01/oradata/oradb/demo01.dbf' size 25600M; Tablespace created.SQL> alter tablespace demo add datafile