2009年04月20日

一、特殊符号ascii定义
 制表符 char(9)
 换行符 char(10)
 回车符 char(13)

二、嵌套使用repalce,注意每次只能提交一个符号,如先回车再换行
          select REPLACE(gg, chr(10), ”) from dual
    要注意chr(13) | | chr(10) 此类结合使用的情况比较多,回车换行在notepad中是比较好看点的,所以要考虑此种情况
          select translate(string,chr(13)||chr(10),’,') from dual;
1、例子一
create table TEST_1
(
  VA  VARCHAR2(10),
  VB  NUMBER(2),
  VC  VARCHAR2(10),
  VD  NUMBER(11,2),
  VE  NUMBER(11,4),
  VCL CLOB
);

SQL> select vb,vc,replace(vc,chr(10),”) as TT, translate(vc,chr(10),’,') from test_1;
 
 VB VC         TT         TRANSLATE(VC,CHR(10),’,')
— ———- ———- ————————-
  0 Aaaaaaaaa  Aaaaaaaaa  Aaaaaaaaa
  1 Aaaaaaaaa  Aaaaaaaaa  Aaaaaaaaa
  2 大Ba       大Babc带   大Ba,b,c带
    b                    
    c带                  
 
  3 C          C          C
  1 D          D          D
  5 A          A          A
  5 A          A          A
  0 A          A          A
  0 A          A          A
 
 2、例子二
要注意chr(13) | | chr(10) 此类结合使用的情况比较多,回车换行在notepad中是比较好看点的,所以要考虑此种情况
select vb,vc,replace(vc,chr(10),”) as TT, translate(vc,chr(13)||chr(10),’,') from test_1;
SQL> select vb,vc,replace(vc,chr(10),”) as TT, translate(vc,chr(13)||chr(10),’,') from test_1;
 
 VB VC         TT         TRANSLATE(VC,CHR(13)||CHR(10),
— ———- ———- ——————————
  0 Aaaaaaaaa  Aaaaaaaaa  Aaaaaaaaa
  1 Aaaaaaaaa  Aaaaaaaaa  Aaaaaaaaa
  2 大Ba       大Babc带   大Babc带
    b                    
    c带                  
 
  3 C          C          C
  1 D          D          D
  5 A          A          A
  5 A          A          A
  0 A          A          A
  0 A          A          A
 
11 rows selected

三、对于字符大对象的符号处理
    对于clob字段中的符号处理,先to_char然后一样的处理

SQL> select to_char(vcl),replace(to_char(vcl),chr(10),’[]‘) from test_1;
 
TO_CHAR(VCL)                                                                     REPLACE(TO_CHAR(VCL),CHR(10),’
——————————————————————————– ——————————————————————————–
嵌套使用repalce,注意每次只能提交一个符号,如先回车再换行                        嵌套使用repalce,注意每次只能提交一个符号,如先回车再换行[]select REPLACE(gg, chr(10), ”) from dual[]sel
select REPLACE(gg, chr(10), ”) from dual                                       
select translate(string,chr(13)||chr(10),’,') from dual;                        
 

ORA-00988: missing or invalid password(s)

oracle用户的口令必须是字母打头,数字不能做为开头,否则在创建数据链路或其他使用口令的地方会出现错误。
10g以下为ora-00988
10g以上为ora-00933
错误

ORA-31495错误,该错误为CDC不能使用捕捉表错误,初步定位为CDC出现问题。

检查CDC的捕捉表正常,但没有数据能捕捉,详细分析后检查change_tables发现下列表出现了两张不同schema的捕捉定义
将错误的订阅视图DROP,检查CDC的捕做表,问题解决

创建CDC过程挂起不报错,后台出现ORA-07445错误,其余其他表全部创建成功正常运行。而问题表错误为:
ORA-07445: exception encountered: core dump [0000000000000000] [SIGSEGV] [Invalid permissions for mapped object] [0x000000000] [] []
Trace文件内出现问题的操作为oracle内部的系统级操作:
BEGIN SYS.DBMS_CDC_UTILITY.SETUP_SYNC_TABLE(‘PCS_CDC_SERVICES’,'CDC_B_WT); END;
怀疑是该表的某类系统级资源被不正常锁定或占用引起;
重新启动数据库可解决此问题.
2007年01月19日
同事接报,昨天imp一个只有100k大小的dmp文件都成功,但今天imp就不行报ora-04030错误 out of memory了。
分析是否是内存耗光了引起,但询问得知新库还没用,看SGA2G多,shared_pool为200M
Pga为24M,也正常,怀疑是否是os对内存有限制,用unlimit进行调整成无限制后,restart oracle问题还是存在。怀疑是否是补丁没大,查看oracle9i版本是最新的。
最后检查DB 的参数设置,发现open_cursors设置为50万个之多。调整为500个后,问题解决。原来是open_cursors耗光了SGA内存引起的不正常。
提醒我们首先检查oracle的参数设置是否正确?检查alert.log是否有错误,然后才引申到OS级,oracle bug级别的问题。
我们对用户调参数的问题估计过高造成错误定位的偏差。
碰到ora-04030错误的朋友,你们也要检查参数是否设置合理正常。
2006年12月31日

连接时就挂在哪儿,排查原因,listener,tnsname,sqlnet都是正常的。最后怀疑是否1521端口被占用了。将号改成1522,重启listener,问题就解决了。

2006年12月29日

SQL> select * from test_1;

NFZ                     NMSG
———————– ——————————————————————————–
512221197602044091     
522123197512230017     
512221197602044091     

SQL> update test_1 set nmsg=’代理名121′;

3 rows updated

SQL> commit;

Commit complete

SQL> select asciistr(nfz) a, asciistr(nmsg) b from test_1;

A                                                                                B
——————————————————————————– ——————————————————————————–
512221197602044091                                                               \4EE3\7406\540D121
522123197512230017                                                               \4EE3\7406\540D121
512221197602044091                                                               \4EE3\7406\540D121

SQL> select instr(asciistr(nmsg),’\')  from test_1;

INSTR(ASCIISTR(NMSG),’\')
————————-
                        1
                        1
                        1

SQL>

1. 首先要确认裸设备文件是属于oracle:dba的属性。裸设备文件一般放在/dev/目录下
2. 创建表空间时要检查裸设备文件名称,如果前面没有加r要加r说明是个逻辑卷否则会报错,"ORA-20497 该文件in use/IBM AIX报不能quenu IO/权限拒绝"
3. 例子:
裸设备:/dev/rac_qk01_5g
检查ls -l
Brw-rw—    oracle  dba   /dev/rac_qk01_5g
创建表空间
CREATE TABLESPACE PCS_LOG DATAFILE
  ‘/dev/rrac_qk01_5g’ size 5100m autoextend off
EXTENT MANAGEMENT LOCAL AUTOALLOCATE
SEGMENT SPACE MANAGEMENT AUTO;
  

一定要在前面加r才可

         
                  ESS800裸盘生成datafile步骤

一、 根据所需数据文件的大小,从磁盘使用登记表中选定vpath,如vpathxy
1、 列出所选定vpath的剩余物理分区数 FREE PPs
# lspv vpathxy
2、 决定使用的PPs数,如PPs=mn

二、 决定生成的逻辑卷名,如abc_lv1

三、 生成逻辑卷
1、 smitty hacmp
——System Managent (c-spoc)
——HACMP Concurrent Logical Volume Managent
——Concurrent Loical Volume
——Add a Concurrent Logical Volume
显示要生成逻辑卷所在的卷组名后压回车键确认
2、 将光标移至要使用的vpathxy后压F7键选定。再压回车键后,显示:
Number of Logical- Partitions        [mn]—————————-(1)
Physical Volume Names             vpathxy
Logical Vloume Name              [abc_lv1]———————–(2)
Logical Vloume Type               [raw]—————————-(3)
(只需输入3项,其余均不用输入)
3、 回车键确认
显示:        Command:running
等待显示变为:Command:ok
并显示所生成的逻辑卷名后用F10退出或用F3生成另一个逻辑卷
4、 列出生成的逻辑卷参数、设备名
# lslv abc_lv1
# ls -al /dev/rabc_lv1

四、 修改设备的所有者
1、#chown  oracle:dba  /dev/rabc_lv1
2、telnet 到同一个HACMP的另一台主机,#chown  oracle:dba  /dev/rabc_lv1

五、计算可用于oracle的datafile size
size=128*mn*0.97

2005年09月19日

dos2unix, unix2dos 對應指令

dos2unix, unix2dos 用在 DOS <=> UNIX text file 轉換
DOS 格式 0d 0a
UNIX 格式 0a
有時手邊無此工具, 可用功能相同的指令組合
dos2unix:
sed -i” "s/\r//" file
or
cat file | col -b > newfile
or
cat file | tr -d "\r" > newfile
cat file | tr -d "\015" > newfile

unix2dos:
sed -i” "s/$/\r/" file
sed -i” "s/$/\x0d/" file

-i后面的是单引号组成

以上適用 GNU sed, FreeBSD 下的 sed 不適用

查找至::http://pank.org/blog/archives/000209.html

4.1 unix2dos.c程序模块

  unix2dos.c程序模块:用来把UNIX格式的文件转换为DOS/WINDOWS格式的文件。
  unix2dos.c程序模块源代码如下所示:
/* $Date: 2001/03/28 12:19:21 $
 *
 * UNIX to DOS text format conversion.
 *
 * $Log: unix2dos.c,v $
 * Revision 1.1 2001/03/28 12:19:21 vong
 * Initial revision
 * Written by Haowen Huang
*/
static const char rcsid[] =
  "$Id: unix2dos.c,v 1.1 2001/03/28 12:19:21 vong Exp $";

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include "file_transfer.h"

/*
 * Convert file named by pathname to DOS
 * text format, on standard output:
*/
int
unix2dos(const char *pathname) {
  int ch;           /* Current input character */
  FILE *in = 0;        /* Input file */

  if ( !(in = fopen(pathname,"r")) ) {
    fprintf(stderr,"Cannot open input file.\n");
    return 2;
  }
  while ( (ch = fgetc(in)) != EOF ) {
    if ( ch == ‘\n’ )
      putchar(‘\r’);
    putchar(ch);
  }
  fclose(in);
  return 0;
}

4.2 dos2unix.c程序模块

  dos2unix.c程序模块:用来把DOS/WINDOWS格式的文件转换为UNIX格式的文件。
  dos2unix.c程序模块源代码如下所示:

/* $Date: 2001/03/28 12:29:37 $
 *
 * The DOS to UNIX text conversion:
 *
 * $Log: dos2unix.c,v $
 * Revision 1.1 2001/03/28 12:29:37 vong
 * Initial revision
 * Written by Haowen Huang
*/
static const char rcsid[] =
  "$Id: dos2unix.c,v 1.1 2001/03/28 12:29:37 vong Exp $";

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include "file_transfer.h"

/*
 * Convert file named by pathname, to
 * UNIX text file format on standard output:
*/
int
dos2unix(const char *pathname) {
  int ch;           /* Current input character */
  int cr_flag;         /* True when CR prev. encountered */
  FILE *in = 0;        /* Input file */

  if ( !(in = fopen(pathname,"r")) ) {
    fprintf(stderr,"Cannot open input file.\n");
    return 2;
  }
  cr_flag = 0; /* No CR encountered yet */
  while ( (ch = fgetc(in)) != EOF ) {
    if ( cr_flag && ch != ‘\n’ ) {
      /* This CR did not preceed LF */
      putchar(‘\r’);
    }
    if ( !(cr_flag = ch == ‘\r’) )
      putchar(ch);
  }
  fclose(in);
  return 0;