Archive

Archive for the ‘Oracle’ Category

面对一个全新的环境,作为一个Oracle DBA,首先应该了解什么?

July 12th, 2009

面对一个全新的环境,作为一个Oracle DBA,首先应该了解什么?

在这里,不谈那些大的方面,比如了解整个IT环境整体情况,假设你已经知道了这些,接下来需要面对的就是这些一个个活生生的database了.这里总结了一些一般的思路来面对一个全先的database,从而快速了解你面对的环境概要.

这也不是教科书,只是一些心得和体会,对于这种问题,每个人的认识的角度是不一样的.欢迎大家继续补充完善.

1、先要了解当前的Oracle 数据库的版本和平台和相关信息
   这个很重要,忙乎了半天还知道你的数据库是哪个版本,跑在什么系统上,那岂不是很悲哀,所以我个人认为这是第一步需要了解的。下面的这些脚本可以帮助你获取你需要的相关信息。

   select * from v$version;
   select * from dba_registry_database;
   select dbid, name, open_mode, database_role, platform_name from v$instance;
   select dbms_utility.port_string from dual;

   set serveroutput on
   declare
     ver VARCHAR2(100);
     compat VARCHAR2(100);
   begin
     dbms_utility.db_version(ver, compat);
     dbms_output.put_line(’Version: ‘ || ver ||’ Compatible: ‘ || compat);
   end;
   /
2、其次要了解你的数据库中装了哪些组件
   select * from dba_registry;
 
3、搞清楚这个环境是单机还是集群?
   这个判断方法很多,我这里给出一个借助dbms_utility来判断的方法。

   set serveroutput on

   declare
     inst_tab dbms_utility.instance_table;
     inst_cnt NUMBER;
   begin
     if dbms_utility.is_cluster_database then
        dbms_utility.active_instances(inst_tab, inst_cnt);
        dbms_output.put_line(’-’ || inst_tab.FIRST);
        dbms_output.put_line(TO_CHAR(inst_cnt));
     else

        dbms_output.put_line(’Not A Clustered Database’);
     end if;
   end;
   /

4、是否配置了DataGuard?
   select protection_mode, protection_level, remote_archive, database_role, dataguard_broker,guard_status
   from v$database;

5、是否起用了归档模式?
   conn /as sysdba
   archive log list;
   select log_mode from v$database;
 
6、是否起用了flashback database特性?
   select flashback_on from v$database;
   如果是,再进一步查看FRA的配置情况
7、是否起用了force logging和补充日志?
   select force_logging,supplemental_log_data_min, supplemental_log_data_pk, supplemental_log_data_ui,
          supplemental_log_data_fk, supplemental_log_data_all
   from v$database;

8、了解控制文件的组成
   select * from v$controlfile;
9、了解日志文件的组成
   select l.group#, lf.type, lf.member, l.bytes, l.status LOG_STATUS, lf.status LOGFILE_STATUS
   from v$log l, v$logfile lf
   where l.group# = lf.group#
   order by 1,3;

10、了解参数文件的组成和位置
    show parameter spfile
    create spfile from pfile…
    create pfile from spfile;
    create spfile from memory;
    create pfile from memory;

11、了解instance的相关信息
    select instance_name, host_name, status, archiver, database_status, instance_role, active_state
    from v$instance;

12、用户和密码相关
    是否使用了缺省密码?
    是否使用了profile?
    是否起用了密码验证函数?
    用户身份验证的方法?
    密码是否区分大小写等。

    select name, value from gv$parameter where name = ‘resource_limit’;
    select profile, resource_name, limit from dba_profiles order by 1,2;

    select username, profile from dba_users where account_status = ‘OPEN’ order by 1;
 
    select d.username, u.account_status
    from dba_users_with_defpwd d, dba_users u
    where d.username = u.username and account_status = ‘OPEN’
    order by 2,1;

 
13、是否打开了BLOCK CHANGE TRACKING
    select filename, status, bytes from v$block_change_tracking;
14、起用了那些特性(Feature)?
    DBMS_FEATURE_USAGE_REPORT
 
15、表空间和数据文件的规划
    这个大家都很熟悉,就不写了
 
16、字符集相关
    select * from database_properties;
 
17、系统中是否存在invalid对象
    select owner, object_type, COUNT(*)
    from dba_objects
    where status = ‘INVALID’
    group by owner, object_type;

18、更进一步的
    是否使用了ASM?
    当前系统的备份方法和策略是什么?
    网络文件的配置是如何的?
 
19、查看一下最近的alert日志,获取一些有用的信息
20、跑几个性能分析报告,看看最近系统的运行状态如何
21、跑一个RDA报告,收集完整的系统状态报告
 
好了,有了这一些基本信息(不完全),你基本上对你新接触的这个系统有了一个大概的了解,接来下,你再慢慢的深入分析,然后制订出一套符合实际情况的运维规范来,慢慢的养猪吧。

Oracle

Oracle从非归档模式变成归档模式

January 21st, 2009

更改数据库的归档模式需要重新启动数据库,在mount模式下修改,简要步骤
1   以shutdown immediate 方式关闭数据库
2  启动实例到mount状态
3  更改运行模式并打开数据库

操作步骤:
1   登录数据库查看数据库的归档状态
     SQL> archive log list;
     如果出现信息:
     Database log mode              No Archive Mode
     Automatic archival             Disabled
     则为非归档模式

2  关闭数据库
     SQL>shutdown immediate;

3   启动数据库到mount状态
     SQL>startup mount;

4   启动归档模式
     SQL>alter database archivelog;       (非归档模式为:alter database noarchivelog)
  
5   打开数据库
     SQL>alter database open;
      查看归档模式状态
     SQL>archive log list
      如果出现信息:
      Database log mode              Archive Mode
      Automatic archival             Enabled
      成功改成归档模式

Oracle , ,

linux下oracle自动启动脚本

December 26th, 2008

在Linux平台下安装好Oracle之后,Oracle服务是不会随着系统的启动而自动启动的。下面这个脚本即为在linux下面的自动启动Oracle脚本。
################################################################
#!/bin/bash
#
#by:cuijie
#http://www.cuijie.net.cn
#date:2008.12.26
#root用户登录
#
#
ORA_HOME=/u01/app/oracle/product/10.2.0/db_1
ORA_OWNER=oracle
#
case "$1" in
’start’)
echo -n "Oracle 10g is starting…"
su – $ORA_OWNER -c "$ORA_HOME/bin/dbstart" &
su – $ORA_OWNER -c "$ORA_HOME/bin/lsnrctl start"
touch /var/log/oracle10g
echo
;;

’stop’)
echo -n "Oracle 10g is stopting…"
su – $ORA_OWNER -c "$ORA_HOME/bin/dbshut" &
su – $ORA_OWNER -c "$ORA_HOME/bin/lsnrctl stop"
rm -f /var/log/oracle10g
echo
;;

‘restart’)
echo -n "Oracle 10g is restarting…"
$0 stop
$0 start
;;

*)
echo "Usage:oracle{start|stop|restart}"
exit 1

esac
exit 0
################################################################
将上面的脚本复制粘贴到linux下面的合适位置处。如名字为Oracle10g.sh,然后chmod a+x Oracle10g.sh为该文件赋予可执行的属性。然后以oracle用户登录(root也可以)进入到
[oracle@test ~]$ cd $ORACLE_HOME/bin
vi打开dbstart,找到“ORACLE_HOME_LISTNER=/ade/vikrkuma_new/oracle”,将这行替换为“ORACLE_HOME_LISTNER=$ORACLE_HOME”。不然会提示“failed to auto-start oracle net listene using /ade/vikrkuma_new/oracle/bin/ tnslsnr”的错误。(也可以使用sed -i ’s/ORACLE_HOME_LISTNER=\/ade\/vikrkuma_new\/oracle/ORACLE_HOME_LISTNER=\$ORACLE_HOME/’ bin/dbstart替换命令来替换)

[root@test cuijie]# chmod a+x oracle10g.sh
[root@test cuijie]# echo “/home/cuijie/oracle10g.sh start” /etc/rc.local
这样在系统启动的时候就能够自动启动oracle了。另外如果想加入系统服务使用/sbin/chkconfig –add 也可以加入,这样使用service就可以像启动ssh等这类服务一样方便了。

Linux, Oracle , ,

SQL*Loader使用指南

December 11th, 2008

Oracle 的SQL*LOADER可以将外部数据加载到数据库表中。下面是SQL*LOADER的基本特点:

1)能装入不同数据类型文件及多个数据文件的数据
2)可装入固定格式,自由定界以及可度长格式的数据
3)可以装入二进制,压缩十进制数据
4)一次可对多个表装入数据
5)连接多个物理记录装到一个记录中
6)对一单记录分解再装入到表中
7)可以用 数对制定列生成唯一的KEY
8)可对磁盘或 磁带数据文件装入制表中
9)提供装入错误报告
10)可以将文件中的整型字符串,自动转成压缩十进制并装入列表中。

1.2控制文件
控制文件是用一种语言写的文本文件,这个文本文件能被SQL*LOADER识别。SQL*LOADER根据控制文件可以找到需要加载的数据。并且分析和解释这些数据。控制文件由三个部分组成:

l 全局选件,行,跳过的记录数等;
l INFILE子句指定的输入数据;
l 数据特性说明。

1.3输入文件
对 于 SQL*Loader, 除控制文件外就是输入数据。SQL*Loader可从一个或多个指定的文件中读出数据。如果 数据是在控制文件中指定,就要在控制文件中写成 INFILE * 格式。当数据固定的格式(长度一样)时且是在文件中得到时,要用INFILE “fix n”

load data
infile ‘example.dat’ “fix 11″
into table example
fields terminated by ‘,’ optionally enclosed by ‘”‘
(col1 char(5),
col2 char(7))
example.dat:
001, cd, 0002,fghi,
00003,lmn,
1, “pqrs”,
0005,uvwx,

当数据是可变格式(长度不一样)时且是在文件中得到时,要用INFILE “var n”。如:

Read more…

Oracle ,

Oracle安装后修改计算机名字的问题

November 28th, 2008

在xp sp2上装好xp后突然发现没有修改原来的计算机名字,由于原来的计算机名字是一大串字母,这样以后访问isqlplus的时候很是不方便,于是就修改了计算机名字,具体修改方法如下。

在xp上改好名字后打开oracle的安装目录D:\oracle\product\10.2.0\db_1\NETWORK\ADMIN打开listener.ora文件

# listener.ora Network Configuration File: d:\oracle\product\10.2.0\db_1\network\admin\listener.ora
# Generated by Oracle configuration tools.

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = PLSExtProc)
      (ORACLE_HOME = d:\oracle\product\10.2.0\db_1)
      (PROGRAM = extproc)
    )
  )

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
      (ADDRESS = (PROTOCOL = TCP)(HOST = cuijie)(PORT = 1521))
    )
  )

打开tnsnames.ora文件

# tnsnames.ora Network Configuration File: d:\oracle\product\10.2.0\db_1\network\admin\tnsnames.ora
# Generated by Oracle configuration tools.

ORCL =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = cuijie)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )

EXTPROC_CONNECTION_DATA =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
    )
    (CONNECT_DATA =
      (SID = PLSExtProc)
      (PRESENTATION = RO)
    )
  )

将上面红色的字体改成你修改后的计算机名字重新启动服务就ok了

Oracle

oracle进度条不走的问题贴图

November 27th, 2008

反复装还是过不去,下载的zip包经过校验也没有错误的。没办法,又到oracle的官网上下了个,重新解压就好了。依然不知道怎么回事,呵呵!

Oracle

解决sqlplus乱码问题

July 9th, 2008

解决方法:
export NLS_LANG=”SIMPLIFIED CHINESE_CHINA.ZHS16GBK”
或者把 NLS_LANG=”SIMPLIFIED CHINESE_CHINA.ZHS16GBK”
写到.bash_profile 中去

Oracle

oracle 10g 解决sqlplus Backspace 不能使用

July 9th, 2008

      在centos环境下使用sqlplus,在backspace会出现 一串的乱码。出现乱码是由于oracle的sqlplus不使用gnu的readline库造成的。

      解决方法;

1、要使用backspace时,同时按住ctrl键。
2、设置环境变量
vi  /home/oracle/.bash_profile
添加stty erase ^h
 
 centos 5 测试通过

Oracle ,

修改oracle数据库参数文件出错及解决办法

July 7th, 2008

为了通过logminer分析oracle日志,要修改系统参数utl_file_dir,因为没经验,查了数据库启动参数文件

show parameter spfile;

为%ORACLE_HOME%\DATABASE\SPFILE%ORACLE_SID%.ORA,所以直接用EditPlus修改了数据库启动的启动参数文件spfile,在其中增加了系统参数utl_file_dir,可重启数据库后竟然无法启动数据库。原来是不能直接修改启动参数文件spfile的。

sql> shutdown immediate ;
通信通结束
重新启动机器
sql> startup ;
ORA-00600: internal error code, arguments: [733], [538970160], [pga heap], [], [
], [], [], []

 

错误说明:
ORA-00600: internal error code, arguments: [733], [538970160], [pga heap], [], [], [], [], []

The 733 argument shows that is essentially an out of memory condition, the second argument is
the amount of memory in bytes requested!

In short unless you actually have to use a server parameter file – think RAC, you may consider
the potential drawbacks to outweigh the advantages.

说明PGA heap 分配出错,需要 538970160 B 字节。

 

 

修改oracle数据库参数文件出错解决办法:

一、按需要修改pfile文件,并用该pfile文件启动数据库

(实际此后半句步骤可省,因为第二步由pfile创建spfile并不一定要启动数据库,只要登入sqlplus控制台即可)

修改D:\oracle\admin\zfmi\pfile\init.ora.2312322 为init.ora .

在数据库启动时,先指定用增加参数utl_file_dir后(我的目的是要在数据库启动时增加此参数)的pfile文件启动

sql> startup pfile =\’ D:\oracle\admin\zfmi\pfile\init.ora\’;

Total System Global Area 135338868 bytes
Fixed Size 453492 bytes
Variable Size 109051904 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
数据库装载完毕。
数据库已经打开。

 

二、由pfile创建spfile:

sql>create spfile from pfile ;

ERROR 位于第 1 行:
ORA-01078: 处理系统参数失败
LRM-00109: could not open parameter file
\’D:\ORACLE\ORA92\DATABASE\initZFMI.ORA\’

原来默认在$oracle_home\database (unix 下是$oracle_home/dbs 下)下查找pfile ,将init.ora 拷贝到 D:\ORACLE\ORA92\DATABASE ,修改名字为initZFMI.ora

sql> create spfile from pfile ;
文件已创建。

三、重启数据库,默认用新生成的spfile文件启动,检验spfile参数
sql> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
sql> startup
ORACLE 例程已经启动。

Total System Global Area 135338868 bytes
Fixed Size 453492 bytes
Variable Size 109051904 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
数据库装载完毕。
数据库已经打开。

SQL> show parameter spfile;

NAME TYPE VALUE
———————————— ———– ——————————
spfile string %ORACLE_HOME%DATABASESPFILE%
ORACLE_SID%.ORA

目前oralce 已经使用了spfile ,否则value 值是空。

 

附:pfile与spfile相关资料:

Oracle中pfile和spfile之间的联系与区别:pfile:用于Oracle8i,在oracle9i中也可以用,以文本形式存在,可以用vi编辑器对其中参数进行修改。文件格式为initSID.ora;
spfile:用于oracle9i,以二进制文本形式存在,不能用vi编辑器对其中参数进行修改。文件格式为spfileSID.ora。

 

如果要对spfile文件进行修改,可以采用下面的SQL语言进行修改,此方法修改前提是该spfile中已经有此参数。如只是要修改数据库启动参数,则用此命令后重启数据库即可,无需由pfile生成spfile。
SQL> ALTER SYSTEM SET PARAMETER = \’VALUES\’;

如果不方便使用SQL语句进行操作,可以使用SQL语句:
SQL> CREATE SPFILE FROM PFILE;
此方法将二进制文本形式的spfile转换成

Oracle

Oracle10g EM乱码之快速解决

June 30th, 2008

如果安装时,我们系统环境变量设置的是中文环境,那么就不会有这个问题.这个问题根本原因在于安装时,JDK/JRE字符集的自动选择.

$ORACLE_HOME/jdk/jre/lib$ORACLE_HOME/jre/1.4.2/lib/ 目录下都有多种字符集字体配置文件:

[oracle@danaly ~]$ cd $ORACLE_HOME/jdk/jre/lib[oracle@danaly lib]$ ls font*zh_CN*font.properties.zh_CN.Redhat  font.properties.zh_CN.Redhat2.1  font.properties.zh_CN.Sun  font.properties.zh_CN_UTF8.Sun
[oracle@danaly lib]$ cd $ORACLE_HOME/jre/1.4.2/lib/[oracle@danaly lib]$ ls font*zh_CN*font.properties.zh_CN.Redhat  font.properties.zh_CN.Redhat2.1  font.properties.zh_CN.Sun  font.properties.zh_CN_UTF8.Sun 

我们只要用合适的中文字符集文件替换缺省文件即可,我选择使用font.properties.zh_CN.Redhat来替换缺省字体定义文件:

[oracle@danaly lib]$ cp font.properties.zh_CN.Redhat font.properties 

替换之后需要清理一下Cache,重启EM即可.

Cache路径通常位于:

$ORACLE_HOME/oc4j/j2ee/oc4j_applications/applications/em/em/cabo/images/cache/zhs 

清除所有gif文件即可.然后重新启动EM:

[oracle@danaly zhs]$ emctl stop dbconsoleTZ set to PRCoracle Enterprise Manager 10g Database Control Release 10.2.0.1.0  Copyright (c) 1996, 2005 oracle Corporation.  All rights reserved.http://danaly.hurrray.com.cn:1158/em/console/aboutApplicationStopping oracle Enterprise Manager 10g Database Control ...  ...  Stopped. [oracle@danaly zhs]$ emctl start dbconsoleTZ set to PRCoracle Enterprise Manager 10g Database Control Release 10.2.0.1.0  Copyright (c) 1996, 2005 oracle Corporation.  All rights reserved.http://danaly.hurrray.com.cn:1158/em/console/aboutApplicationStarting oracle Enterprise Manager 10g Database Control .............. started. ------------------------------------------------------------------Logs are generated in directory /opt/oracle/product/10.2.0/danaly.hurrray.com.cn_danaly/sysman/log  

现在登陆Web页面,EM显示就可以正常显示中文了.

Oracle