不可轻言放弃,否则对不起自己!

发布新日志

  • oracle本地磁盘数据文件更改到lv上

    2012-12-20 11:30:45

    背景

    oracle数据库的所有数据文件安装在本地系统盘,现要将所有本地系统盘上的数据文件转移到外挂磁阵lv上。

     

    实现过程

    说明:

    这里仅以一个本地永久数据文件转移到lv上为示例。

    步骤一 创建测试表空间

    #本地数据文件

    SQL> create tablespace wyztest datafile '/opt/oracle/oradata/mmsgdb/wyztest.dbf' size 50M;  

     

    表空间已创建。

     

    步骤二 创建用户表,并插入数据记录

    #创建用户

    SQL> create user test identified by test 

      2  default tablespace wyztest

      3  profile default;

     

    用户已创建。

     

    SQL> grant create table to test;

     

    授权成功。

     

    SQL> grant create session to test;

     

    授权成功。

     

    SQL> grant resource to test;

     

    授权成功。

     

    SQL> grant unlimited tablespace to test;

     

    授权成功。

     

    SQL> commit;

     

    提交完成。

     

    SQL> exit

    Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - 64bit Production

    With the Partitioning, OLAP, Data Mining and Real Application Testing options 断开

     

    #创建用户表,并插入两条记录

    oracle@mmsc103:~> sqlplus test/test@mmsgdb

     

    SQL*Plus: Release 11.1.0.6.0 - Production on 星期三 8 31 12:11:17 2011

     

    Copyright (c) 1982, 2007, Oracle.  All rights reserved.

     

     

    连接到:

    Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - 64bit Production

    With the Partitioning, OLAP, Data Mining and Real Application Testing options

     

    SQL> show user

    USER "TEST"

    SQL> create table modules (id integer not null);

     

    表已创建。

     

    SQL> insert into modules values(1);

     

    已创建 1 行。

     

    SQL> insert into modules values(2);

     

    已创建 1 行。

     

    SQL> commit;

     

    提交完成。

     

    SQL> select * from modules;        #表中数据有两条记录,用于迁移后检查数据是否有丢失

     

            ID

    ----------

             1

             2

     

    SQL> exit

     

    步骤三 创建lv,修改lv属主为oracle

    #创建lv

    mmsc103:/opt/oracle # lvcreate -L 290M -n oratest vg_dlsc_uoa

      Rounding up size to full physical extent 292.00 MB

      Logical volume "oratest" created

     

    #修改lv属主信息

    mmsc103:/opt/oracle # cd /dev

    mmsc103:/dev # chown -R oracle.oinstall vg_dlsc_uoa

    mmsc103:/dev # chown -R oracle.oinstall vg_dlsc_uoa/*

    mmsc103:/dev/vg_dlsc_uoa # ls -l

    total 0

    lrwxrwxrwx 1 oracle oinstall 35 Aug 31 11:41 lv_dlsc_uoa -> /dev/mapper/vg_dlsc_uoa-lv_dlsc_uoa

    lrwxrwxrwx 1 oracle oinstall 31 Aug 31 12:16 oratest -> /dev/mapper/vg_dlsc_uoa-oratest

    mmsc103:~ # cd /dev/mapper/

    mmsc103:/dev/mapper # ls -l

    total 0

    lrwxrwxrwx 1 root root     16 Aug 31  2011 control -> ../device-mapper

    brw------- 1 root root 253, 0 Aug 31 11:41 vg_dlsc_uoa-lv_dlsc_uoa

    brw------- 1 root root 253, 1 Aug 31 12:16 vg_dlsc_uoa-oratest

    mmsc103:/dev/mapper # chown -R oracle.oinstall vg_dlsc_uoa-oratest

    mmsc103:/dev/mapper #

     

    说明:

       父目录、目录下文件以及mapper文件的属主都要修改,否则rman操作会报权限不足(Permission denied)。

     

     

    步骤四 mount状态下拷贝本地文件到lv

    #关闭数据库

    SQL> shutdown immediate

    数据库已经关闭。

    已经卸载数据库。

    ORACLE 例程已经关闭。

     

    #启动数据库到mount状态

    SQL> startup mount

    ORACLE 例程已经启动。

     

    Total System Global Area 1603411968 bytes

    Fixed Size                  2144824 bytes

    Variable Size            1124074952 bytes

    Database Buffers          469762048 bytes

    Redo Buffers                7430144 bytes

    数据库装载完毕。

    SQL> exit

    Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - 64bit Production

    With the Partitioning, OLAP, Data Mining and Real Application Testing options 断开

     

    #复制本地数据文件到lv

    oracle@mmsc103:~> rman target/

     

    恢复管理器: Release 11.1.0.6.0 - Production on 星期三 8 31 11:45:14 2011

     

    Copyright (c) 1982, 2007, Oracle.  All rights reserved.

     

    已连接到目标数据库: MMSGDB (DBID=3157020426, 未打开)

     

    RMAN> copy datafile '/opt/oracle/oradata/mmsgdb/wyztest.dbf' to '/dev/vg_dlsc_uoa/oratest';

     

    启动 backup 31-8 -11

    使用目标数据库控制文件替代恢复目录

    分配的通道: ORA_DISK_1

    通道 ORA_DISK_1: SID=316 设备类型=DISK

    通道 ORA_DISK_1: 启动数据文件副本

    输入数据文件: 文件号=00013 名称=/opt/oracle/oradata/mmsgdb/wyztest.dbf

    输出文件名=/dev/vg_dlsc_uoa/oratest 标记=TAG20110831T115029 RECID=1 STAMP=760621832

    通道 ORA_DISK_1: 数据文件复制完毕, 经过时间: 00:00:01

    完成 backup 31-8 -11

     

    RMAN> quit

     

     

    步骤五 修改控制文件并open数据库

    oracle@mmsc103:~> sqlplus / as sysdba

     

    SQL*Plus: Release 11.1.0.6.0 - Production on 星期三 8 31 11:50:50 2011

     

    Copyright (c) 1982, 2007, Oracle.  All rights reserved.

     

     

    连接到:

    Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - 64bit Production

    With the Partitioning, OLAP, Data Mining and Real Application Testing options

     

    SQL> alter database rename file '/opt/oracle/oradata/mmsgdb/wyztest.dbf' to '/dev/vg_dlsc_uoa/oratest';    

     

    数据库已更改。

     

    SQL> alter database open;

     

    数据库已更改。

     

    步骤六 查看迁移结果

    SQL> select FILE_NAME from dba_data_files where TABLESPACE_NAME ='WYZTEST';

     

    FILE_NAME

    --------------------------------------------------------------------------------

    /dev/vg_dlsc_uoa/oratest     #路径已经不是本地路径(/opt/oracle/oradata/mmsgdb)了

     

    SQL> quit

    Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - 64bit Production

    With the Partitioning, OLAP, Data Mining and Real Application Testing options 断开

     

    #查看前后后表中数据记录

    oracle@mmsc103:~> sqlplus test/test@mmsgdb

     

    SQL*Plus: Release 11.1.0.6.0 - Production on 星期三 8 31 12:21:50 2011

     

    Copyright (c) 1982, 2007, Oracle.  All rights reserved.

     

     

    连接到:

    Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - 64bit Production

    With the Partitioning, OLAP, Data Mining and Real Application Testing options

     

    SQL> select * from modules;

     

            ID

    ----------

             1

             2

     

    SQL>

     

    #两条记录,数据都在。

     

     

    步骤七:环境清理(可选)

    可以删除本地路径下的原迁移前的数据文件,可选操作。

     

    附录

    变更永久数据文件位置步骤

    1db处于mount状态;

    2mv或者cp操作,将文件拷贝到指定位置;

    3、修改控制文件:alter database rename file ‘xxxx’ to ‘xxxxxxx’;

    说明:永久数据文件包括:

    select file_name from dba_data_files;

    system01.dbf

    sysaux01.dbf

    undotbs01.dbf

    users01.dbf

     

    select member from v$logfile;

    redo01.log

    redo02.log

    redo03.log

     

     

    变更临时文件位置

    由于临时文件不存放数据,可以将原先临时文件drop掉,并重新创建在lv上既可。

    select file_name from dba_temp_files;

    temp01.dbf

     

    变更控制文件位置

    select * from v$controlfile;

    control01.ctl

    control02.ctl

    control03.ctl

     

    由于控制文件比较特殊,并没有想到好方法,思路如下:

    1、在lv上新增控制文件(建议数量为3个);

    2、创建pfile文件,修改控制文件路径信息为lv上的控制文件;

    3、使用pfile创建spfile,并启动数据库

  • oracle专有与共享模式

    2012-12-20 11:03:06

    名词解释

    专有服务器模式(DEDICATED:一个客户端连接对应一个服务器进程。

     

    共享服务器模式(SHARE:多个客户端连接对应一个服务器进程,服务器端存在一个进程调度器来管理。

     

    说明:

    共享服务器模式必须使用net services.也就是必须配置tns信息(即使客户端与服务端为同一台机器,也要配置TNS,且通过IPC协议进行通讯)。它适合用于高并发,事务量小,如果此时采用了共享模式,可以大大减少由于高度并发对于ORACLE服务器的资源消耗。

     

    模式说明

    专有服务器模式

    每次在对Oracle进行访问的时候,Oracle服务器的Listener会得到这个访问请求,然后会为这个访问创建一个新的进程来进行服务。所以说,对于每一个客户端的访问,都会生成一个新的进程进行服务,是一种类似一对一的映射关系。这种连接模式的一个很重要的特点就是UGA(用户全局域)是存储在PGA(进程全局域)中的,这个特性也很好的说明了当前用户的内存空间是按照进程来进行分配的。

    共享服务器模式

        类似一种在程序编写时常用到的连接池(pool)的概念。采用这种模式的话,在数据库的初始化的时候就会创建一批服务器连接的进程,然后把这些连接进程放入一个连接池来进行管理。初始化的池中的进程数量在数据库初始化建立的时候是可以手动设置的。在连接建立的时候,Listener首先接收到客户端的建立连接的请求,然后Listener去生成一个叫做调度器(dipatcher)的进程与客户端进行连接。调度器把客户端的请求放在SGA(系统全局域)的一个请求队列中,然后再共享服务器连接池中查找有无空闲的连接,然后让这个空闲的服务器进行处理。处理完毕以后再把处理结果放在SGA的相应队列中。调度器通过查询相应队列,得到返回结果,再返回给客户端。这种连接模式的优点在于服务器进程的数量可以得到控制,不大可能出现因为连接人数过多而造成服务器内存崩溃。但是由于增加了复杂度以及请求相应队列,性能上有所下降。

     

    优缺点比较

    专有服务器模式的优缺点

    优点:

    1)每个用户都有一个连接,不至于有的应用占着连接造成别的客户的请求给挂起了;

    2)数据库处理性能较高。

     

    缺点:

    1)内存管理上,此种模式随着用户连接数的增加而消耗更多的系统CPU与内存。

    因为随着连接数的增加,每增加一个连接,就要分配一份PGA,如果增加10000个连接,那就是10000PGA要提供,内存很容易吃爆掉。而共享连接方式优点在于连接数

     

    共享服务器模式优缺点

    优点:

    1)减少了实例中的进程数

    2)增加了更多并发用户的数量

    3)实现动态负载均衡

    4)减少了空闲服务器进程数量

    5)降低了对内存的使用

     

    缺点:

    1)共享服务器的代码路径比专用服务器长,所以它天生就比专用服务器慢;

    2)存在人为死锁的可能,因为它是串行的,只要一个连接阻塞,则该服务器进程上的所有用户都被阻塞,并且极可能死锁;

    3)存在独占事务的可能,因为如果一个会话的事务运行时间过长,它独占共享资源,其它用户只能等待,而专用服务器,每个客户端是一个会话;

    4)共享服务器模式限制了某些数据库特性,例如:不能单独启动和关闭实例,不能进行介质恢复。

     

    共享服务初始化参数的一些说明

    shared_servers

    指定了当instance 启动的时候share_servers启动的数量(可通过shared server process查看),不要将这个参数设置得太大,否者启动数据库instance 的时候就会花更多时间,Oracle启动过后会根据负载来动态调整shared_servers。如果为0,表示数据库没有启动共享服务模式。 这个参数是配置shared server 必须的,而且只有这个参数是必须的。

     

    修改参数:  alter system set shared_servers=1;

     

    max_shared_servers

    ORACLE在同一个时刻最大能够使用的share_servers数量,不要将这个参数设置小于 shared_servers,如果动态修改shared_servers大于max_shared_serversORACLE会覆盖max_shared_servers的值,此时你需要修改max_shared_servers,同时也不能大于processes的值。这个参数是为了给占用很大资源操作而设的(批处理),为了预留一些process DBA任务(rman备份)

     

    shared_server_sesions:

    指定了总共允许的的 shared server session 的数量。如果设置了这个参数,那么就不要将这个值超过sessions,如果没有设置这个值,那么只要还有空闲的session,就可以被使用。设置这个值是为专有连接预留 user sessions的。

     

    dispatchers(调度进程)

    配置 dispatcher process 。如果不设置这个参数,只要设置了shared_serversoracle 也会自动设置一个基于tcp协议的dispatcher

        还需要查看操作系统支持一个dispatcher能处理多少个connections

        SQL> select * from v$dispatcher;

     

    max_dispatchers:

    设置同一时刻能够同时运行的最多的dispatchers的数量,必须大于等于 dispatchers ,小于processes。这个参数也会被dispatchers覆盖。

     

    关闭调度进程:

    1、首先要查询到DISPATCHERSNAME

    SELECT NAME,NETWORK FROM V$DISPATCHER;

     

    2、然后关闭调度进程:

    ALTER SYSTEM SHUTDOWN IMMEDIATE 'D000';

     

     

    关闭共享模式:

    shared_servers 参数置为0alter system set shared_servers=0;),那么所有以共享方式连接到数据库都不能成功,但是未释放的共享连接会继续 保持连接,直到断开。

    如果将 shared_servers max_shared_servers 都设为0alter system set max_shared_servers=0;),那么共享连接将被终结。所有的共享方式连接都断开了的话,就可以使用 alter system set dispatcher=''; dispatcher清除,防止下次启动数据库又打开了共享连接方式。

       

    判断oracle是共享模式还是专用模式的方法

    1.、参数查询

    show parameter shared_server; (注:8i应为:show parameter mts_servers;)

    SQL> show parameter shared_server;

     

    NAME                                 TYPE        VALUE

    ------------------------------------ ----------- ------------------------------

    max_shared_servers                   integer     0 

    shared_server_sessions               integer    

    shared_servers                       integer     0  --0表示专用模式

     

    2. 、查看v$session 视图

    SQL> select username,server,program from v$session where username is not null;

     

    USERNAME     SERVER    PROGRAM

    --------- --------- -------------------

    GWM            NONE   

    SYS            SHARED        plsqldev.exe

    SYS            SHARED        plsqldev.exe

    SYS            DEDICATED     sqlplus.exe  --专用模式

     

    3. 查看监听: lsnrctl service

    oracle@RAC10:~> lsnrctl service

     

    LSNRCTL for Linux: Version 11.1.0.7.0 - Production on 21-12

  • 表与表空间大小查询

    2012-12-20 11:01:42

    查看表大小

    有两种含义的表大小:一种是分配给一个表的物理空间数量,而不管空间是否被使用。可以这样查询获得字节数:

    select segment_name, bytes

    from user_segments

    where segment_type = 'TABLE';

    或者

    Select Segment_Name,Sum(bytes)/1024/1024 From User_Extents Group By Segment_Name

     

    另一种表实际使用的空间。这样查询:

    analyze table AREAINFO compute statistics;

     

    select   TABLE_NAME,TABLESPACE_NAME, NUM_ROWS ,AVG_ROW_LEN,  NUM_ROWS*AVG_ROW_LEN  

    from user_tables

    where table_name = 'AREAINFO';

    说明:

    表名称要大写,红色加粗部分。

     

    查看每个表空间的大小

    Select Tablespace_Name,Sum(bytes)/1024/1024 From Dba_Segments Group By Tablespace_Name

     

     

    查看剩余表空间大小

    SELECT tablespace_name 表空间,sum(blocks*8192/1000000) 剩余空间M FROM dba_free_space GROUP BY tablespace_name;

     

    检查系统中所有表空间总体空间

    select b.name,sum(a.bytes/1000000)总空间 from v$datafile a,v$tablespace b where a.ts#=b.ts# group by b.name;

    通过多个视图获取表空间信息

    select

    a.a1 表空间名称,

    c.c2 类型,

    c.c3 区管理,

     b.b2/1024/1024 表空间大小M,

     (b.b2-a.a2)/1024/1024 已使用M,

     substr((b.b2-a.a2)/b.b2*100,1,5) 利用率

    from

    (select tablespace_name a1, sum(nvl(bytes,0)) a2 from dba_free_space group by tablespace_name) a,

     

      (select tablespace_name b1,sum(bytes) b2 from dba_data_files group by tablespace_name) b,

     

      (select tablespace_name c1,contents c2,extent_management c3 from dba_tablespaces) c

      where a.a1=b.b1 and c.c1=b.b1;

     

     

    该语句通过查询dba_free_spacedba_data_filesdba_tablespaces这三个数据字典表,得到了表空间名称,表空间类型,区管理类型,以为单位的表空间大小,已使用的表空间大小及表空间利用率。dba_free_space表描述了表空间的空闲大小,dba_data_files表描述了数据库中的数据文件,dba_tablespaces表描述了数据库中的表空间。

      上面语句中from子句后有三个select语句,每个select语句相当于一个视图,视图的名称分别为abc,通过它们之间的关联关系,我们得到了表空间的相关信息。
  • oracle查询时间

    2012-12-20 09:11:36

    查询星期几:
    select to_char(sysdate,'day') from dual;
    查询几号:
    select to_char(sysdate,'dd') from dual;
    查询小时数:
    select to_char(sysdate,'hh24') from dual;
    查询时间:
    select to_char(sysdate,'hh24:mi:ss') from dual;
    查询日期时间:
    select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;

    查询星期几:
    select to_char(to_date('2006-11-21','YYYY-MM-DD'),'DAY') from dual;
    select to_char(to_date('2006-11-21','YYYY-MM-DD'),'DAY','NLS_DATE_LANGUAGE = American') from dual;
    alter session set nls_date_language = 'simplified chinese';
    ALTER SESSION SET NLS_DATE_LANGUAGE='AMERICAN';

    查询两个日期间的天数:
    FLOOR:返回等于或小于x的最大整数:
    select floor(to_date('20061121','yyyymmdd') - to_date('20061120','yyyymmdd')) from dual;

    //获取小时
    SELECT EXTRACT(HOUR FROM TIMESTAMP '2005-10-10 10:10:10') FROM DUAL;
    //获取月份
    SELECT EXTRACT(MONTH FROM SYSDATE) FROM DUAL;


    //计算一年多少天
    select add_months(trunc(sysdate,'year'), 12) - trunc(sysdate,'year') from dual;

    //注意:trunc(sysdate,'year')截取生成==>'2006-01-01';
    select trunc(sysdate,'year') from dual;

    //查询一年中的第几天
    select TO_CHAR(SYSDATE,'DDD'),sysdate from dual;

    next_day(sysdate,6)是从当前开始下一个星期五。后面的数字是从星期日开始算起。 
    1  2  3  4  5  6  7 
    日 一 二 三 四 五 六
    select next_day(to_date('2006-11-21','YYYY-MM-DD'),6);

    //返回一个月份的最后一天
    Select last_day(date'2006-02-01') D from dual;
    Select last_day(to_date('2006-02-01','YYYY-MM-DD')) from dual;
    //返回一个月份的最后一天是星期几
    select to_char(last_day(to_date('2006-11-21','YYYY-MM-DD')),'DAY') from dual;


    //获取上个月末天:
    select to_char(add_months(last_day(sysdate),-1),'yyyy-MM-dd') LastDay from dual;
    ==>注意:last_day(sysdate)表示sysdate这个月的最后一天
    add_months(last_day(sysdate),-1)表示上个月的最后一天

    //上月今天
    select to_char(add_months(sysdate,-1),'yyyy-MM-dd') PreToday from dual;

    //上月首天
    select to_char(add_months(last_day(sysdate)+1,-2),'yyyy-MM-dd') firstDay from dual;

    按照每周进行统计
    select to_char(sysdate,'ww') from dual group by to_char(sysdate,'ww');

    按照每月进行统计
    select to_char(sysdate,'mm') from dual group by to_char(sysdate,'mm');

    按照每季度进行统计
    select to_char(sysdate,'q') from dual group by to_char(sysdate,'q');

    按照每年进行统计
    select to_char(sysdate,'yyyy') from dual group by to_char(sysdate,'yyyy');
  • alter system switch logfile 与 alter system archive log current区别

    2012-12-20 09:10:40

    alter system switch logfile 不仅交换LOGFILE而且还存档
    而alter system archive log current只是存档,不一定会交换logfile



    官方解释

    SWITCH LOGFILE Clause

    The SWITCH LOGFILE clause lets you explicitly force Oracle Database to begin writing to a new redo log file group, regardless of whether the files in the current redo log file group are full. When you force a log switch, Oracle Database begins to perform. a checkpoint but returns control to you immediately rather than when the checkpoint is complete. To use this clause, your instance must have the database open.

    ARCHIVE LOG CURRENT Clause

    Specify CURRENT to manually archive the current redo log file group of the specified thread, forcing a log switch. If you omit the THREAD parameter, then Oracle Database archives all redo log file groups from all enabled threads, including logs previous to current logs. You can specify CURRENT only when the database is open.



    论坛:
    我发现两个命令执行后都产生归档了,我也观察了是不是有这样的区别,就是switch logfile后他的状态等待没有完成的事务,等事务完成后会归档,
    而archive log current是直接就归档了。
  • grid默认监听未注册

    2012-12-20 09:09:41

    grid@linux173:~> crsctl stat res -t

    --------------------------------------------------------------------------------

    NAME           TARGET  STATE        SERVER                   STATE_DETAILS      

    --------------------------------------------------------------------------------

    Local Resources

    --------------------------------------------------------------------------------

    ora.DG_ORA.dg

                   ONLINE  ONLINE       linux173                                    

    ora.LISTENER.lsnr

                   ONLINE  INTERMEDIATE linux173                 Not All Endpoints R

                                                                 egistered           

    ora.asm

                   ONLINE  ONLINE       linux173                 Started            

    ora.ons

                   OFFLINE OFFLINE      linux173                                     

    --------------------------------------------------------------------------------

    Cluster Resources

    --------------------------------------------------------------------------------

    ora.cssd

          1        ONLINE  ONLINE       linux173                                     

    ora.diskmon

          1        OFFLINE OFFLINE                                                  

    ora.evmd

          1        ONLINE  ONLINE       linux173

     

     原因:

       R2存在两个监听,一个是默认监听,一个是业务数据监听,信息如下:

    监听名称

    默认端口

    管理者

    LISTENER

    1521

    grid

    LISTENER_ORA

    自定义

    oracle

    其中,(OS级)grid用户管理默认监听LISTENER;(OS级)oracle用户管理业务监听,端口自定义,但不能使用1521端口。

    遇见这个问题,首先查看grid的默认监听文件,确认默认监听中端口与当前crs中是否一致。通过listener.ora文件中端口与crs中启用的端口(可通过netstat –an过滤1521端口,查看1521是否处于监听状态),经相互对比,默认监听文件中端口是1522crs中是1521,说明有人修改过默认监听配置文件中端口,导致crs中与监听配置文件中不一致。解决过程如下:

    1、  修改默认监听配置文件中监听端口为1521

    2、  停掉has中默认监听资源(crsctl stop res ora.LISTENER.lsnr

    3、  has中删掉默认监听资源(srvctl remove listener -l LISTENER

    grid@linux173:~> crsctl stat res -t

    --------------------------------------------------------------------------------

    NAME           TARGET  STATE        SERVER                   STATE_DETAILS      

    --------------------------------------------------------------------------------

    Local Resources

    --------------------------------------------------------------------------------

    ora.DG_ORA.dg

                   ONLINE  ONLINE       linux173                                    

    ora.asm

                   ONLINE  ONLINE       linux173                 Started            

    ora.ons

                   OFFLINE OFFLINE      linux173                                    

    --------------------------------------------------------------------------------

    Cluster Resources

    --------------------------------------------------------------------------------

    ora.cssd

          1        ONLINE  ONLINE       linux173                                    

    ora.diskmon

          1        OFFLINE OFFLINE                                                  

    ora.evmd

          1        ONLINE  INTERMEDIATE linux173

    结果显示是没有默认监听资源的,已经成功删除.

     

    4、  重新创建默认监听(srvctl add listener -l LISTENER -o $ORACLE_HOME

    grid@linux173:~> srvctl add listener -l LISTENER -o $ORACLE_HOME

    grid@linux173:~> crsctl stat res -t                             

    --------------------------------------------------------------------------------

    NAME           TARGET  STATE        SERVER                   STATE_DETAILS      

    --------------------------------------------------------------------------------

    Local Resources

    --------------------------------------------------------------------------------

    ora.DG_ORA.dg

                   ONLINE  ONLINE       linux173                                    

    ora.LISTENER.lsnr

                   OFFLINE OFFLINE      linux173                                     

    ora.asm

                   ONLINE  ONLINE       linux173                 Started            

    ora.ons

                   OFFLINE OFFLINE      linux173                                    

    --------------------------------------------------------------------------------

    Cluster Resources

    --------------------------------------------------------------------------------

    ora.cssd

          1        ONLINE  ONLINE       linux173                                    

    ora.diskmon

          1        OFFLINE OFFLINE                                                  

    ora.evmd

          1        ONLINE  ONLINE       linux173

     

    5、  启动默认监听(crsctl start res ora.LISTENER.lsnr

    grid@linux173:~> crsctl start res ora.LISTENER.lsnr

    CRS-2672: Attempting to start 'ora.LISTENER.lsnr' on 'linux173'

    CRS-2676: Start of 'ora.LISTENER.lsnr' on 'linux173' succeeded

     

    6、  查看默认监听状态

    grid@linux173:~>  crsctl stat res -t               

    --------------------------------------------------------------------------------

    NAME           TARGET  STATE        SERVER                   STATE_DETAILS      

    --------------------------------------------------------------------------------

    Local Resources

    --------------------------------------------------------------------------------

    ora.DG_ORA.dg

                   ONLINE  ONLINE       linux173                                    

    ora.LISTENER.lsnr

                   ONLINE  ONLINE       linux173                                    

    ora.asm

                   ONLINE  ONLINE       linux173                 Started            

    ora.ons

                   OFFLINE OFFLINE      linux173                                    

    --------------------------------------------------------------------------------

    Cluster Resources

    --------------------------------------------------------------------------------

    ora.cssd

          1        ONLINE  ONLINE       linux173                                    

    ora.diskmon

          1        OFFLINE OFFLINE                                                  

    ora.evmd

          1        ONLINE  ONLINE       linux173   
  • 安装grid报错

    2012-12-20 09:08:48

    rid@linux173:~/oraInventory/grid> ./ runInstaller

    You do not have sufficient permissions to access the inventory '/home/oracle/ora                                                           Inventory'. Installation cannot continue. It is required that the primary group                                                            of the install user is same as the inventory owner group.

    Make sure that the ins                                                           tall user is part of the inventory owner group and restart the installer.: Permi                                                           ssion denied

     

    原因:

    根据提示信息,当前安装用户grid,不具有对目录“/home/oracle/ora                                                           Inventory”拥有足够的写权限(sufficient permissions to access),修改方向也是根据提示信息来解决:

    Installation cannot continue. It is required that the primary group                                                            of the install user is same as the inventory owner group.

    进入/home/oracle目录,修改ora                                                           Inventory目录的属主为grid.oinstall,再执行runInstaller命令进行安装grid操作。
  • ORA-01756: quoted string not properly terminated

    2012-12-20 09:06:41

    ORA-02291: integrity constraint (WEBSVC.FK_MENUID_SELF_REF) violated - parent

    key not found

     

     

    ERROR:

    ORA-01756: quoted string not properly terminated


    解决方法:

    通过vi一些sql文件,发现里面中文出现乱码,通过设置环境变量中语言解决:

    setenv NLS_LANG "SIMPLIFIED CHINESE"

    setenv LANG en_US

  • perl sprintf

    2012-12-17 14:34:12

    #!/usr/bin/perl
    use warnings;
    use strict;
    #说明
    $~="DESC";
    write;
    format DESC=
    ================================================================================
       
        说明:
             本脚本完成Sms_UserTable表数据构造与导入(SqlLoad)。
        
    ================================================================================
    .
     
    print "\n请输入上限(只能是正整数):\n";
    my $num=<STDIN>;
    chomp($num);
    if($num gt 0  and $num ne "")
    {
        open(FILE,">Sms_UserTable.txt") || die "Can not open file,$!";
        for(my $i=0;$i<$num;$i++)
        {
            my $MSISDN=sprintf "86131%08d",rand(99999999);
            my $sServices="1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111";
            print FILE "$MSISDN\,";
            print FILE "$sServices\n";
        }
        close(FILE);
       
        #导入数据
        &load_data;
       
    }
    else
    {
        print "\n上限输入非法,退出!\n\n";
        exit;
    }
    sub load_data
    {
        if(-f "Sms_UserTable.txt")
        {
            print "\n拼接文件\n";
           
            open(CTL,">Sms_UserTable.ctl") || die "";
            
                print CTL "load data\n";
                print CTL "infile 'Sms_UserTable.txt'\n";
                print CTL "Append\n";
                print CTL "into table Sms_UserTable\n";
                print CTL "fields terminated by \",\"\n";
                print CTL "\(MSISDN, sServices\)\n";
            close(CTL);
           
            #判断文件是否存在
            if(-f "Sms_UserTable.ctl")
            {
               #执行sqlldr:
              
               print "\n请输入数据库用户名:\n";
               my $user=<STDIN>;
               chomp($user);
              
               if($user eq "" || $user eq "\n")
               {
                   print "\n输入数据库用户名非法,退出!\n\n";
                   exit;
               }
              
               print "\n请输入数据库用户名对应密码:\n";
               my $pass=<STDIN>;
               chomp($pass);
       
               if($pass eq "" || $pass eq "\n")
               {
                   print "\n输入数据库用户名对应口令非法,退出!\n\n";
                   exit;
               }
              
               print "\n请输入数据库别名:\n";
               my $sid=<STDIN>;
               chomp($sid);      
              
               if($sid eq "" || $sid eq "\n")
               {
                   print "\n输入数据库用户别名非法,退出!\n\n";
                   exit;
               }
              
               print "\n开始导入数据\n";
               #sqlldr user/pwd@sid control="insert.ctl"
               system("sqlldr $user\/$pass\@$sid control=\"Sms_UserTable.ctl\" readsize=9999999 rows=100000 bindsize=9999999 direct=y");
            }
            else
            {
                print "\n拼接控制文件不存在,退出!\n\n";
                exit;
            }
           
       
        }
        else
        {
            print "\n[Sms_UserTable.txt]文件不存在,退出!\n\n";
            exit;
        }
    }
  • RMAN报错

    2011-09-15 21:08:21

    /opt/oracle/product/11g/bin/rman target / auxiliary sys/sys@STDSDPDG  cmdfile=$HOME/gen_std.rcv
    。。。。。。。。
    释放的通道: prmy1
    释放的通道: prmy2
    释放的通道: prmy3
    释放的通道: prmy4
    释放的通道: prmy5
    释放的通道: prmy6
    释放的通道: stby1
    释放的通道: stby2
    释放的通道: stby3
    释放的通道: stby4
    DBGANY:     Mismatched message length! [21:15:34.655] (krmiduem)
    DBGANY:     Mismatched message length! [21:15:34.656] (krmiduem)
    MAN-00571: ===========================================================
    RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
    RMAN-00571: ===========================================================
    RMAN-00600: internal error, arguments [3045] [] [] [] []
    RMAN-00571: ===========================================================
    RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
    RMAN-00571: ===========================================================
    RMAN-03002: Duplicate Db 命令 (在 09/15/2011 21:15:34 上) 失败
    RMAN-03015: 在存储的脚本Memory Script中出现错误
    RMAN-03009: backup 命令 (prmy1 通道上, 在 09/15/2011 21:15:34 上) 失败
    ORA-17629: 无法连接到远程数据库服务器
    ORA-17627: ORA-01017: invalid username/password; logon denied
    ORA-17629: 无法连接到远程数据库服务器
  • oracle temp表空间暴涨-part4

    2011-08-09 19:24:11

    最后说说对当前系统临时表空间的处理。在使用BO的前提下,临时表空间胀大的情况也许是不可避免的。所以建议开发组从几个方面着手:
    ü       借助AWR报告,确定究竟是BO造成的临时表空间使用量过高还是应用本身问题;
    ü       如果确定是BO本身问题,可以确定一个基本的峰值。将临时表空间文件设置一个增长上限,不要关闭autoextend开关;
    ü       如果是应用本身的问题,也不要轻易关闭autoextend开关。因为如果Temp表空间需要资源而无法分配,那么前端应用会产生异常报错;
    ü       不断诊断和重构应用代码,加入处理量控制代码,力图做到每次处理的数据量存在可控上限。防止出现瞬时处理量胀大的情况;
    4、结论
    这个案例,告诉我们两点思考之处:
    ü       分清主次因果;数据库诊断调优是一项综合性强的技术。我们看到的大多是问题的表象,甚至是很奇怪的表象。这时候,我们就需要分析问题的根源,理清主次矛盾、孰因孰果,定位到问题的核心;
    ü       分清轻重远近;很多性能问题的根源不是某个或者某几个SQL造成的,而是和开发过程中一些习惯和细节问题日积月累起来。这种情况下,修改重构是一个过程,不可能一蹴而就。所以,调优要从远近轻重的角度制定方案。首先让应用跑起来,支持生产。之后才是将问题一点点的解决。Oracle推出的outline等技术也就是这个含义。
  • oracle temp表空间暴涨-part3

    2011-08-09 19:23:21

    Temp表空间增加到20G,说明在系统运行的某个阶段,由于会话并发或者其他的原因,引起系统内部排序、分组等PGA高消耗操作剧烈增加,瞬时超过了Temp原有的大小。从而引发Oracle进行Temp表空间的自动拓展,拓展到当前的大小。之后会话操作结束,临时段segment对象被回收,但是文件大小不会重新回收。所以导致了Temp表空间膨胀的事实。
    那么,有什么样的原因可能导致出现瞬时Temp空间消耗高峰呢?几种可能的情况如下:
    ü       系统本身特点。我们说最大使用Temp表空间的就是sort和group by操作。对一些OLAP、DSS系统而言,无论是进行报表生成还是数据整理汇总析取,都伴随着海量数据的sort或者group by。一般情况下的PGA设置是无法满足如此巨大的空间需求的,必然要消耗相当的Temp表空间。根据笔者的了解,一些数据仓库性质的系统对Temp的消耗达到几十上百G是很常见的;
    ü       应用本身对SQL处理量失控。SQL是一种描述性语言,修改一条记录和修改一千万条记录的语句结构可能都是相同的。但是,对系统而言,两者的差异是天壤之别。比如,当我们尝试将获取到数据集合bulk collect到一个数组时候,要关注到可能的数据量规模。如果数据集合较小,一切都好说。但是如果数据集合达到百万级以上,那么瞬时百万条数据全部请求存放在PGA中,进而引起Temp的过量使用;
    ü       第三方工具的使用。很多第三方工具,特别是带有数据分析处理的软件,通过专门的业务实体层封装SQL语句。一些时候,这种封装SQL进行连接、汇总时也会带来大量的Temp消耗;
    3、问题解决
    经过沟通,确认系统发生的变更情况。在最近一段时间,系统安装了BO相关组件,多用户在反复同时生成报表的时候,可能会出现Temp消耗高峰的情况。
    同时,观察应用系统的部分代码,存在SQL处理量未受控的情况,建议开发组根据工作进度情况进行重构处理。
    至于说特定SQL执行时间过长,通过诊断(或者AWR、ASH)确定了问题SQL,进行执行计划修正后问题解决。
  • oracle temp表空间暴涨-part2

    2011-08-09 19:22:35

    表空间从类型上有若干分类的方式,一种是按照“文件file”的大小,区别为small file tablespace和big file tablespace。另一种是按照表空间用途而定的。此种分类方法可以将表空间划分为持久化表空间(Permanent Tablespace)、Undo表空间和临时表空间(Temporary Tablespace)。
    Temporary临时表空间是Oracle一种内部空间调控的产物。根据Oracle官方文档中的介绍,Temporary表空间主要是针对session会话自身的操作使用的。
    当一个会话通过SQL或者PL/SQL将数据集合获取,进行大面积的sort或者group by操作时,会话会严重的消耗PGA资源。PGA是针对会话自身特有信息的一块内存区域,用于保存会话自身特有、无法与其他会话共享的信息。如果数据集很大,这样对内存PGA的资源消耗就会很大。Oracle在这个时候,就会采用类似操作系统虚拟内存技术的方法,从硬盘上借一块空间给PGA置换使用,缓解PGA的不足。
    在使用Temporary表空间的时候,是系统自动完成的临时段segment对象创建和销毁。这个过程对用户会话而言是透明的。
    临时表空间对应的文件就是临时文件temp file,在Oracle中可以使用dba_temp_files视图进行查询。
    SQL> col file_name for a50;
    SQL> select file_name, bytes/1024/1024, AUTOEXTENSIBLE from dba_temp_files;
    FILE_NAME                                         BYTES/1024/1024 AUTOEXTENSIBLE
    -------------------------------------------------- ---------------
    D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\TEMP01.DBF              123YES
    通常,在系统创建的时候,Oracle会创建临时表空间Temp作为系统默认临时表空间Temporary Tablespace。而且,通常Temp表空间都是设置为支持自动拓展的。
    2、问题分析
    回到那位兄弟的问题,简单归纳出来就是“系统中出现批作业缓慢的现象,发现临时表空间暴增”。
    从上面我们对于Temp表空间的分析介绍,我们可以初步认为临时表空间的暴增是一个结果,而不是一个原因。或者说,至少是某个原因的结果。
    什么意思呢?首先,Oracle文件有自动膨胀autoextend的功能,但是却没有自动缩减的能力。临时表空间容纳的对象,都是系统创建、管理的临时段对象。当会话结束、SQL命令结果返回的时候,临时表空间的内容是可以回收的。所以,Temp表空间的自动膨胀大小结果不是一个累积的效果,而是一个峰值效果。
  • oracle temp表空间暴涨-part1

    2011-08-09 19:21:10

    说说临时表空间Temp的异常胀大
    笔者接到一个做开发上线的兄弟电话,说正在试运行的系统存储过程突然变慢,而且偶然发现数据库的Temp表空间突然增加到20多G。这位兄弟不知道是不是与存储过程突然变慢有关,而且应该如何处理。
    1、从Temporary Tablespace谈起
    表空间(Tablespace)、段对象(Segment)、分区(Extent)和数据块(Block)是Oracle逻辑层面上最重要的几个概念。其中,表空间是各个逻辑层面顶层概念,也是与Oracle物理结构文件可以建立关系的重要环节。
    SQL> select tablespace_name, contents, logging from dba_tablespaces;
    TABLESPACE_NAME               CONTENTS LOGGING
    ------------------------------ --------- ---------
    SYSTEM                        PERMANENT LOGGING
    UNDOTBS1                      UNDO     LOGGING
    SYSAUX                        PERMANENT LOGGING
    TEMP                          TEMPORARY NOLOGGING
    USERS                         PERMANENT LOGGING
    EXAMPLE                       PERMANENT NOLOGGING
    6 rows selected
  • oracle temp表空间暴涨-part1

    2011-08-09 19:21:10

    说说临时表空间Temp的异常胀大
    笔者接到一个做开发上线的兄弟电话,说正在试运行的系统存储过程突然变慢,而且偶然发现数据库的Temp表空间突然增加到20多G。这位兄弟不知道是不是与存储过程突然变慢有关,而且应该如何处理。
    1、从Temporary Tablespace谈起
    表空间(Tablespace)、段对象(Segment)、分区(Extent)和数据块(Block)是Oracle逻辑层面上最重要的几个概念。其中,表空间是各个逻辑层面顶层概念,也是与Oracle物理结构文件可以建立关系的重要环节。
    SQL> select tablespace_name, contents, logging from dba_tablespaces;
    TABLESPACE_NAME               CONTENTS LOGGING
    ------------------------------ --------- ---------
    SYSTEM                        PERMANENT LOGGING
    UNDOTBS1                      UNDO     LOGGING
    SYSAUX                        PERMANENT LOGGING
    TEMP                          TEMPORARY NOLOGGING
    USERS                         PERMANENT LOGGING
    EXAMPLE                       PERMANENT NOLOGGING
    6 rows selected
  • 界面测试

    2011-08-04 09:10:17

    界面风格
    1、所有页面类似的文字风格是否一致和搭配,包括背景颜色、字体、颜色、行间距等。
    2、界面是否支持直接回车,回车的处理和点击确认或提交等按钮的逻辑是否完全一致。
    3、界面的布局是否方便用户操作。
    4、界面上所要输入的信息,作为真正使用该业务场景的用户,能否提供所需的信息。
    5、影响重大的操作需要提醒用户进行确认,避免误操作。
    界面逻辑
    1、界面上输入的字段原则上trim前后空格。
    2、各个输入字段的几种边界值、规范中明确规定的取值是否都支持,并进行验证。
    3、变长的内容,上限能否支持?例如后台拼装的字符串有没有超过限度,界面上的下拉列表不能没有限制,表格的行数支持多少,etc。
    4、页面是否需要翻页处理。
    5、是否支持多个浏览器同时操作,是否有保护措施。
    6、界面处理的数量上限是多少?
    7、界面的开发和测试不能停留于界面的操作,需要结合实际的业务进行开发测试。
    8、界面是否存在上下文关联。会话中是否保存了某些信息存在影响
    9、界面的前转、回退、停止操作是否存在影响
    10、页面快速重复提交是否存在问题?
    11、是否对界面上的字段对业务上的有效性进行校验。
    12、塞班斯法案:密码不能明文显示、保存等
    13、不同页面的实现是否一致,例如添加和修改时特定字段的校验是否一致?
    14、大小写是否敏感?
    15、是否存在权限控制的问题?
    文字信息
    1、同一个实体在不同界面(以及日志等)使用的术语是否一致。
    2、展示内容在各种长度或组合的情况下,是否会影响美观。
    3、文字信息是否通顺,有无错别字。
    4、关注字符集的问题,至少是使用统一的字符集,包括日志、资源文件、源代码。
    兼容性
    1、主流浏览器的支持(当前定义主流为IE 6 7 8,其他的不宣称支持)
    2、脚本开关,IE的internet选项设置->高级->显示每个脚本错误的通知,开关勾上,界面有脚本异常时可以及时暴露出来
    3、不同操作系统和数据库是否存在兼容性影响。
    4、不同语言的操作系统及其他国际化问题。
  • 脚本usage

    2011-07-28 16:02:11

    use Getopt::Std;
    #使用方法
    getopts("su");
    if (!($opt_u || $opt_s))
    {
       print "\n【使用方法】\n";
       print "\nperl exp_sysparm_tab.plx \n \n            选项: -u  -s \n\n\t           -u: upgrade  表示导出升级后版本相关信息\n\n\t  
            -s: setup    表示导出安装目标版本相关信息\n \n \n";
    }
    if($opt_u)
    {}
    elsif($opt_s)
    {}
    else
    {}
  • 脚本测试

    2011-07-27 18:19:56

    脚本测试
     权限问题
      具有可执行权限
     平台移植
      1、不同操作系统间移植
      2、同操作系统、不同系统补丁版本间移植
     脚本产生的日志
      1、日志路径合理性
      2、日志内容(可读性高、清晰、详尽但不冗余)
      3、日志文件过大,是否要分割或定期清理等
     脚本中参数取值
      1.边界值
      2、参数取值的合理性
     脚本阅读能力
      1、能看懂脚本,知道脚本实现的功能
      2、会进行脚本的单步/断点调测
      3、脚本性能
      4、脚本变量、函数/方法等是否存在冗余情况
      5.脚本的可阅读性、编码规范性
      6、将操作分成若干个逻辑组
      7、提供脚本执行摘要
     路径
      1、脚本中调用其他脚本,绝对不能使用相对路径,必须为绝对路径
      2、脚本使用到的目录,不存在,脚本独立创建,不能人为干预
     临时文件
      1、产生的临时文件/文件夹,脚本最终要清除
      2、临时文件命名最好能以时间戳命名
     记录
      脚本描述、功能介绍、使用方法(资料体现)
     脚本易用性
      脚本提供usage
  • 删除用户

    2011-07-25 14:19:12

    RACST01:~ # userdel mmsg
    userdel: account `mmsg' is currently in use.
  • ORA-27046错误码解决方法

    2011-06-24 16:01:38

    ORA-27046错误码解决方法
    背景
    当前数据库undo表空间使用undotbs1,数据文件大小已大26G,严重占用系统分区空间。为了解决这个问题,重新创建另外一个undo表空间,并使数据库在使用新的undo表空间启动。在使用新的undo表空间前,创建pfile文件,结果就出现了本文描述的问题。

    现象
    通过spfile文件创建pfile,报ORA-27046
    SQL> create pfile='/home/oracle/product/11g/dbs/pfile' from spfile;
    create pfile='/home/oracle/product/11g/dbs/pfile' from spfile
    *
    ERROR at line 1:
    ORA-01565: 标识文件 '?/dbs/spfile@.ora' 时出错
    ORA-27046: 文件大小不是逻辑块大小的倍数
    Additional information: 1

    原因分析
    出现这个原因,往往是因为spfile文件被破坏导致的。Spfile文件是一个二进制文件,不能修改,一旦修改,则使用该spfile文件启动数据库时,数据库是无法启动的。即:修改了spfile文件后,该文件报废。

    解决方法
    方法1:使用admin下init文件启动数据库,并重新创建spfile文件;
    方法2:将现有的spfile文件中的有效内容拷贝到文本文件中,使用该文本文件启动数据库后并重新创建spfile文件。

982/5<12345>
Open Toolbar