Archive

Posts Tagged ‘Oracle’

面对一个全新的环境,作为一个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 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 ,