Archive for the ‘ Oracle ’ Category

ASM管理命令和操作笔记

首先创建磁盘(如果是虚拟机,通过添加hard disk 文件加磁盘)
[需要停虚拟机,将盘添加到第二个节点]
[root@node1 ~]#fdisk /dev/sdf
输入以下:n/p/1/enter/enter
node1上初始化ASM盘
[root@node1 ~]#/etc/init.d/oracleasm createdisk NOVA3 /dev/sdf1
node2 上扫描并列盘
[root@node2 ~]#/etc/init.d/oracleasm scandisks
[root@node2 ~]# /etc/init.d/oracleasm listdisks
NOVA1
NOVA2
NOVA3
登录node1添加磁盘
[root@node1 ~]#su – oracle
[root@node1 ~]#ORACLE_SID=+ASM1
[root@node1 ~]#sqlplus / as sysdba
SQL>alter diskgroup RAC_DISK add disk ‘ORCL:NOVA3′ name test_asmdisk;
登录node2测试
SQL> select path from v$asm_disk;
PATH
——————————————————————————–
ORCL:NOVA3
/dev/raw/raw2
/dev/raw/raw1
ORCL:NOVA1
ORCL:NOVA2
/dev/raw/raw3
/dev/raw/raw4
SQL> select NAME,ALLOCATION_UNIT_SIZE,TOTAL_MB from v$asm_diskgroup;
NAME ALLOCATION_UNIT_SIZE TOTAL_MB
—————————— ——————– ———-
RAC_DISK 1048576 8180
在node1上执行,ASM上创建一个表空间
[oracle@node1 ~]$ sqlplus / as sysdba
SQL*Plus: Release 10.2.0.1.0 – Production on Fri May 8 17:19:58 2009
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 – Production
With the Partitioning, Real Application Clusters, OLAP and Data Mining options
SQL> create tablespace nova_test datafile ‘+RAC_DISK’ size 200M;
Tablespace created.
SQL> create user nova identified by nova default tablespace nova_test;
User created.
SQL> grant dba to nova;
Grant succeeded.
SQL> conn nova/nova;
Connected.
SQL> create table t_test as select * from dba_objects;
Table created.
SQL> select count(*) from t_test;
COUNT(*)
———-
50029
SQL>
登录node2上执行,做一下测试。
[oracle@node2 ~]$ sqlplus / as sysdba
SQL*Plus: Release 10.2.0.1.0 – Production on Fri May 8 17:24:00 2009
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 – Production
With the Partitioning, Real Application Clusters, OLAP and Data Mining options
SQL> conn nova/nova
Connected.
SQL> select count(*)from t_test;
COUNT(*)
———-
50029
SQL>
其他命令操作
alter diskgroup dgroup1 add failgroup fgroup1 disk ‘ORCL:NOVA3′ failgroup fgroup2 disk ‘ORCL:VOL6′;
自动平衡的工作进度
desc v$asm_operation
select * from v$asm_operation;
查询ASM磁盘组对应关系
select label,failgroup from v$asm_disk;
查看磁盘组的名称和状态
SQL> select state,header_status,substr(name,1,12) Name,free_mb,substr(path,1,16) PATH from v$asm_disk;

STATE HEADER_STATU NAME FREE_MB PATH
——– ———— ———— ———- —————-
NORMAL FOREIGN 0 /dev/raw/raw2
NORMAL FOREIGN 0 /dev/raw/raw1
NORMAL UNKNOWN 0 ORCL:NOVA1
NORMAL UNKNOWN 0 ORCL:NOVA2
NORMAL MEMBER RAC_DISK_000 2496 /dev/raw/raw3
NORMAL MEMBER RAC_DISK_000 3334 /dev/raw/raw4
NORMAL MEMBER TEST_ASMDISK 826 ORCL:NOVA3
查看ASM磁盘管理均衡情况
SQL>select operation,state,power,actual,sofar,est_work,est_minutes from v$asm_operation;
登入到ASM的实例,删除磁盘组中VOL4磁盘
alter diskgroup RAC_DISK drop disk NOVA3;
强制让ASM自动平衡
alter diskgroup RAC_DISK rebalance;
加入故障盘到磁盘组
alter diskgroup dgroup1 add failgroup fgroup1 disk ‘ORCL:NOVA3′ failgroup fgroup2 disk ‘ORCL:NOVA4′;

删除ASM残留信息方法和重建步骤

node1&&node2都运行一下命令
cd /opt/ora10g/product/10.2.0/db_1/dbs
rm -rf *
cd /opt/ora10g/admin
rm -rf *

dd if=/dev/zero of=/dev/raw/raw3 bs=8192 count=12800
dd if=/dev/zero of=/dev/raw/raw4 bs=8192 count=12800

dd if=/dev/zero of=/dev/raw/raw1 bs=8192 count=12800[crs disk ]
dd if=/dev/zero of=/dev/raw/raw2 bs=8192 count=12800[vot disk]
/etc/init.d/oracleasm createdisk NOVA1 /dev/sdd1
/etc/init.d/oracleasm createdisk NOVA2 /dev/sde1
vi /etc/oratab [删除+ASM相关字段]

crs_unregister ora.node2.ASM2.asm
crs_unregister ora.node1.ASM1.asm

删除ASM实例的方法

[oracle@node1 ~]$ sqlplus / as sysdba

SQL*Plus: Release 10.2.0.1.0 – Production on Sun Apr 26 14:56:13 2009

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

Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 – Production
With the Partitioning, Real Application Clusters, OLAP and Data Mining options

SQL> select instance_name from v$asm_client;

no rows selected

SQL> select name from v$asm_diskgroup;

NAME
——————————
RAC_DISK

SQL> drop diskgroup RAC_DISK including contents ;

Diskgroup dropped.
SQL> shutdown immediate
ORA-15100: invalid or missing diskgroup name
ASM instance shutdown

[oracle@node1 ~]$ oradism -delete -asmsid +ASM
[oracle@node1 ~]$ oradism -delete -asmsid +ASM1
[oracle@node1 ~]$ oradism -delete -asmsid +ASM2
srvctl stop asm -n node1
srvctl stop asm -n node2

[oracle@node2 ~]$ crs_stat -t
Name Type Target State Host
————————————————————
ora….SM1.asm application ONLINE ONLINE node1
ora….E1.lsnr application OFFLINE OFFLINE
ora.node1.gsd application ONLINE ONLINE node1
ora.node1.ons application ONLINE ONLINE node1
ora.node1.vip application ONLINE ONLINE node1
ora….SM2.asm application ONLINE OFFLINE
ora….E2.lsnr application OFFLINE OFFLINE
ora.node2.gsd application ONLINE ONLINE node2
ora.node2.ons application ONLINE ONLINE node2
ora.node2.vip application ONLINE ONLINE node2
[oracle@node2 ~]$ crsctl check crs
CSS appears healthy
CRS appears healthy
EVM appears healthy

srvctl add asm -n node1 -i +ASM1 -o /opt/ora10g/admin

删除自动存储管理实例+ASM
实例+ASM的删除是在数据库被卸载之后完成的,并删除/ORACLE_HOME/dbs目录下的所有文件(除了与ASM相关的)。因此必须完成下列步骤:
1)在命令提示符中,设置oracle_sid环境变量为+ASM实例:
# export oracle_sid=+ASM
2)启动SQL*Plus并以sys用户连接到自动存储管理+ASM实例:
# sqlplus / as sysdba
3)使用下列命令来确定是否有数据库实例正在使用自动存储管理实例+ASM:
SQL>select instance_name from v$asm_client;
该命令结果列出所有正在运行并使用+ASM实例的数据库实例。只要+ASM包含正在支持的数据库实例,就不能删除该+ASM实例。
4)如果没有与+ASM相关联的数据库实例,则删除与该实例相关联的磁盘组。
首先,识别与+ASM相关联的磁盘组:
SQL>select name from v$asm_diskgroup;
其次,用下列命令删除每个要删除的磁盘组:
SQL>drop diskgroup<disk_group_name>including contents;
5)关闭+ASM实例并退出SQL*Plus:
SQL>shutdown
SQL>exit
6)在命令提示符中输入下列命令,删除+ASM服务:
oradim -delete -asmsid +ASM

Oracle 修改归档模式

首先查看数据库现有模式可使用以下语句
select name,log_mode from v$database;
也可以用下面的语句
archive log list;(该方法需要as sysdba)

对于非归档模式的数据库该为归档模式(主要以Oracle 10g为参考)使用以下步骤:
1. SQL> alter system set log_archive_dest_1=’location=/oracle/oracle10g/log/archive_log’;
该语句含义是确定归档日志的路径,实际上Oracle 10g可以生成多份一样的日志,保存多个位置,以防不测

例如再添加一个日志位置可使用以下语句
SQL>alter system set log_archive_dest_2=’location=/oracle/oracle10g/log2/archive_log’;

2.关闭数据库
SQL> shutdown immediate

3.启动数据mount状态:
SQL> startup mount;

4、修改数据库为归档模式:
SQL> alter database archivelog;

5、打开数据库,查询:
SQL> alter database open;

修改日志文件命名格式:
SQL> alter system set log_archive_max_processes = 5;
SQL> alter system set log_archive_format = "archive_%t_%s_%r.log" scope=spfile;

修改完成后可以查看日志模式是否修改成功!

特别指出的是在Oracle 9i中还要修改参数log_archive_start = true才能生效,oracle 10g中已经废除了该参数,所以不需要设置该参数。
————————————————————————————————
SQL> SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount
ORACLE instance started.

Total System Global Area 1258291200 bytes
Fixed Size 1978336 bytes
Variable Size 318771232 bytes
Database Buffers 922746880 bytes
Redo Buffers 14794752 bytes
Database mounted.
SQL> alter database archivelog;

Database altered.

SQL> alter database open;

Database altered.

SQL>

spfile和pifle的一点浅浅的认识

写给不明白的,或者模糊的,分享一下。
关于pfile和spfile的文件,spfile是二进制文件,是不可以直观来查看和修改的,改了之后就会损坏它的内部格式,需要通过命令来创建,pfile是文本文件可以修改,当startup的时候默认读取参数的先后顺序是
spfileSID.ora->spfile.ora->initSID.ora->init.ora;
spfileNOVABD1->spfile.ora->initNOVADB1.ora>->init.ora
想对二进制文件进行了修改,应该先将spfile文件生成文本文件pfile,然后修改pfile文件,
将二进制文件spfile生成文本文件pfile,(默认生成的路径为$ORACLE_HOME/dbs)
SQL>create pfile from spfile;
例如我的initNOVADB1.ora就是最近生成的。
[oracle@node1 dbs]$ ls -ltr
total 96
-rw-r—– 1 oracle oinstall  8385 Sep 11  1998 init.ora
-rw-r—– 1 oracle oinstall 12920 May  3  2001 initdw.ora
-rw-r—– 1 oracle oinstall  1536 Apr 29 21:59 orapw+ASM1
lrwxrwxrwx 1 oracle oinstall    37 Apr 29 21:59 init+ASM1.ora -> /opt/ora10g/admin/+ASM/pfile/init.ora
-rw-r—– 1 oracle oinstall  1544 Apr 29 21:59 hc_+ASM1.dat
-rw-rw—- 1 oracle oinstall  1544 Apr 29 22:15 hc_NOVADB1.dat
-rw-r—– 1 oracle oinstall  1536 Apr 29 22:30 orapwNOVADB1
-rw-rw—- 1 oracle oinstall  1546 May  4 12:25 ab_+ASM1.dat
-rw-r—– 1 oracle oinstall  1536 May  6 12:27 spfileNOVADB1.ora
-rw-r–r– 1 oracle oinstall 40960 May  6 12:45 dbs.tar
-rw-r—– 1 oracle oinstall  1263 May  6 13:14 initNOVADB1.ora
这样我们生成的pfile文件可以通过vi来编辑了,然后怎么才能让修改的pfile(initNOVADB1.ora)内容生效呢?
SQL>create spfile from pfile;
这里的pfile就是我们刚刚修改编辑过的,然后又一次生成了spfile,覆盖了原来的内容。
SQL> startup pfile=/opt/ora10g/product/10.2.0/db_1/dbs/initNOVADB1.ora 和 SQL>startup (默认从spfile启动)是等效的。我们也可以指定pfile来作为启动的文件。
希望批评指正

Oracle 更改表空间位置的具体步骤

[oracle]> sqlplus /nolog
SQL*Plus: Release 10.2.0.1.0 – Production on Tue Aug 19 03:46:29 2008
Copyright (c) 1982, 2005, Oracle. All rights reserved.
SQL> conn /as sysdba
Connected.
SQL> shutdown immediate
ORA-01109: database not open
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORACLE instance started.
Total System Global Area 167772160 bytes
Fixed Size 1977208 bytes
Variable Size 104862856 bytes
Database Buffers 58720256 bytes
Redo Buffers 2211840 bytes
Database mounted.
Database opened.
SQL> alter tablespace users offline;
Tablespace altered.
SQL> host mv /opt/oracle/oradata/ora10g/users01.dbf /opt/oracle/oradata_bak/
SQL> exit
Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 – 64bit Production
With the Partitioning, OLAP and Data Mining options
[oracle]> ls
control01.ctl control03.ctl redo01.log redo03.log system01.dbf undotbs01.dbf
control02.ctl example01.dbf redo02.log sysaux01.dbf temp01.dbf users01.dbf
[oracle]> mv /opt/oracle/oradata/ora10g/users01.dbf /opt/oracle/oradata_bak/
[oracle]> sqlplus /nolog
SQL*Plus: Release 10.2.0.1.0 – Production on Tue Aug 19 03:52:19 2008
Copyright (c) 1982, 2005, Oracle. All rights reserved.
SQL> conn /as sysdba
Connected.
SQL> alter tablespace users
2 rename datafile ‘/opt/oracle/oradata/ora10g/users01.dbf’ to ‘/opt/oracle/oradata_bak/users01.dbf’;
Tablespace altered.
SQL> alter tablespace users online;
Tablespace altered.
见效果
=============================================
RMAN> report schema
2> ;
Report of database schema
List of Permanent Datafiles
===========================
File Size(MB) Tablespace RB segs Datafile Name
—- ——– ——————– ——- ————————
1 480 SYSTEM *** /opt/oracle/oradata/ora10g/system01.dbf
2 30 UNDOTBS1 *** /opt/oracle/oradata/ora10g/undotbs01.dbf
3 240 SYSAUX *** /opt/oracle/oradata/ora10g/sysaux01.dbf
4 5 USERS *** /opt/oracle/oradata_bak/users01.dbf
5 100 EXAMPLE *** /opt/oracle/oradata/ora10g/example01.dbf
List of Temporary Files
=======================
File Size(MB) Tablespace Maxsize(MB) Tempfile Name
—- ——– ——————– ———– ——————–
1 22 TEMP 32767 /opt/oracle/oradata/ora10g/temp01.dbf
恢复回去…
[oracle]> pwd
/opt/oracle/oradata/ora10g
[oracle]> mv /opt/oracle/oradata_bak/users01.dbf .
[oracle]> ls
control01.ctl control03.ctl redo01.log redo03.log system01.dbf undotbs01.dbf
control02.ctl example01.dbf redo02.log sysaux01.dbf temp01.dbf users01.dbf
[oracle]> sqlplus /nolog
SQL*Plus: Release 10.2.0.1.0 – Production on Tue Aug 19 04:07:47 2008
Copyright (c) 1982, 2005, Oracle. All rights reserved.
SQL> conn /as sysdba
Connected.
SQL> alter tablespace users rename datafile ‘/opt/oracle/oradata_bak/users01.dbf’ to ‘/opt/oracle/oradata/ora10g/users01.dbf’;
Tablespace altered.
SQL> alter tablespace users online;
Tablespace altered.
效果如下
RMAN> report schema;
Report of database schema
List of Permanent Datafiles
===========================
File Size(MB) Tablespace RB segs Datafile Name
—- ——– ——————– ——- ————————
1 480 SYSTEM *** /opt/oracle/oradata/ora10g/system01.dbf
2 30 UNDOTBS1 *** /opt/oracle/oradata/ora10g/undotbs01.dbf
3 240 SYSAUX *** /opt/oracle/oradata/ora10g/sysaux01.dbf
4 5 USERS *** /opt/oracle/oradata/ora10g/users01.dbf
5 100 EXAMPLE *** /opt/oracle/oradata/ora10g/example01.dbf
List of Temporary Files
=======================
File Size(MB) Tablespace Maxsize(MB) Tempfile Name
—- ——– ——————– ———– ——————–
1 22 TEMP 32767 /opt/oracle/oradata/ora10g/temp01.dbf

Oracle RAC日常基本维护命令

列出配置的所有数据库

[root@node1 ~]# srvctl config database
NOVADB

所有实例和服务的状态

[root@node1 ~]# srvctl status database -d NOVADB
Instance NOVADB1 is running on node node1
Instance NOVADB2 is running on node node2

单个实例的状态

[root@node1 ~]# srvctl status instance -d NOVADB -i NOVADB1
Instance NOVADB1 is running on node node1

在数据库全局命名服务的状态

$ srvctl status service -d orcl -s orcltest
Service orcltest is running on instance(s) orcl2, orcl1

特定节点上节点应用程序的状态

[root@node1 ~]# srvctl status nodeapps -n node1
VIP is running on node: node1
GSD is running on node: node1
Listener is running on node: node1
ONS daemon is running on node: node1

ASM 实例的状态

[root@node1 ~]# srvctl status asm -n node1
ASM instance +ASM1 is running on node node1.
[root@node1 ~]# srvctl status asm -n node2
ASM instance +ASM2 is running on node node2.

显示 RAC 数据库的配置

[root@node1 ~]# srvctl config database -d NOVADB
node1 NOVADB1 /opt/ora10g/product/10.2.0/db_1
node2 NOVADB2 /opt/ora10g/product/10.2.0/db_1

显示指定集群数据库的所有服务

[root@node1 ~]# srvctl config service -d NOVADB
NOVADB PREF: NOVADB1 NOVADB2 AVAIL:

显示节点应用程序的配置 —(VIP、GSD、ONS、监听器)

[root@node1 ~]# srvctl config nodeapps -n node1 -a -g -s -l
VIP exists.: /node1-vip/192.168.150.224/255.255.255.0/eth0
GSD exists.
ONS daemon exists.
Listener exists.

利用srvctl config命令可以看到现有数据库的配置信息:

[root@node1 ~]# srvctl config database -d NOVADB -a
node1 NOVADB1 /opt/ora10g/product/10.2.0/db_1
node2 NOVADB2 /opt/ora10g/product/10.2.0/db_1
DB_NAME: NOVADB
ORACLE_HOME: /opt/ora10g/product/10.2.0/db_1
SPFILE: +RAC_DISK/NOVADB/spfileNOVADB.ora
DOMAIN: null
DB_ROLE: null
START_OPTIONS: null
POLICY: AUTOMATIC
ENABLE FLAG: DB ENABLED

显示 ASM 实例的配置

[root@node1 ~]# srvctl config asm -n node1
+ASM1 /opt/ora10g/product/10.2.0/db_1
[root@node1 ~]# srvctl config asm -n node2
+ASM2 /opt/ora10g/product/10.2.0/db_1

集群中所有正在运行的实例

SQL> r
1 SELECT
2 inst_id
3 , instance_number inst_no
4 , instance_name inst_name
5 , parallel
6 , status
7 , database_status db_status
8 , active_state state
9 , host_name host
10 FROM gv$instance
11* ORDER BY inst_id
rows will be truncated

INST_ID INST_NO INST_NAME PAR STATUS DB_STATUS STATE
———- ———- —————- — ———— —————– ——
1 1 NOVADB1 YES OPEN ACTIVE NORMAL
2 2 NOVADB2 YES OPEN ACTIVE NORMAL

SQL>

位于磁盘组中的所有数据文件

SQL> select name from v$datafile
union
select member from v$logfile
union
select name from v$controlfile
union
select name from v$tempfile;

NAME
——————————————————————————–
+RAC_DISK/novadb/controlfile/current.260.685491565
+RAC_DISK/novadb/datafile/nova_test.268.686337643
+RAC_DISK/novadb/datafile/sysaux.257.685491407
+RAC_DISK/novadb/datafile/system.256.685491401
+RAC_DISK/novadb/datafile/undotbs1.258.685491411
+RAC_DISK/novadb/datafile/undotbs2.264.685491733
+RAC_DISK/novadb/datafile/users.259.685491413
+RAC_DISK/novadb/onlinelog/group_1.261.685491571
+RAC_DISK/novadb/onlinelog/group_2.262.685491575
+RAC_DISK/novadb/onlinelog/group_3.265.685491915
+RAC_DISK/novadb/onlinelog/group_4.266.685491921

NAME
——————————————————————————–
+RAC_DISK/novadb/tempfile/temp.263.685491617

12 rows selected.

SQL>

属于“RAC_DISK”磁盘组的所有 ASM 磁盘

SQL> SELECT path FROM v$asm_disk WHERE group_number IN (select group_number from v$asm_diskgroup where name = ‘RAC_DISK’);

PATH
——————————————————————————–
/dev/raw/raw3
/dev/raw/raw4
ORCL:NOVA3

启动/停止RAC集群

确保是以 oracle UNIX 用户登录的。我们将从rac1节点运行所有命令:

# su – oracle

[oracle@node1 ~]$ hostname

node1

停止 Oracle RAC 10g 环境

第一步是停止 Oracle 实例。当此实例(和相关服务)关闭后,关闭 ASM 实例。最后,关闭节点应用程序(虚拟 IP、GSD、TNS 监听器和 ONS)。

[oracle@node1 ~]$ export ORACLE_SID=NOVADB1
[oracle@node1 ~]$ emctl stop dbconsole
[oracle@node1 ~]$ srvctl stop instance -d NOVADB -i NOVADB1
[oracle@node1 ~]$ srvctl stop asm -n node1
[oracle@node1 ~]$ srvctl stop nodeapps –n node1

阅读全文

Page 1 of 212