这个问题你可能通过查询oracle的系统表,例如all_all_tables,用这些对象的列表生成一批数据库删除对象的语句,然后将这些语句存到文件,用sqlplus的文件参数执行这一批语句。
站在用户的角度思考问题,与客户深入沟通,找到宁化网站设计与宁化网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:成都网站设计、成都网站建设、企业官网、英文网站、手机端网站、网站推广、空间域名、网络空间、企业邮箱。业务覆盖宁化地区。
不清理失败的CRS安装会导致像节点重启的问题。
按照这些步骤来清理CRS安装失败:
1。运行rootdelete.sh脚本从脚本的rootdeinstall.sh
ora_crs_home美元/安装目录中的任何节点上你是去除CRS从。运行
这些脚本应该充分清理你的CRS安装。rootdelete.sh
接受这样的选项nosharedvar / sharedvar,和nosharedhome / sharedhome。使
自己通过阅读和使用这些选项,熟悉oracle
应用程序集群管理和部署指南。
如果您有任何问题,这些脚本请打开服务请求。
如果出于某种原因,您必须手动删除安装由于问题
随着脚本,继续步骤2:
2。停止nodeapps所有节点:
的停止nodeapps N
三.防止CRS开始当节点的靴子。要做这个问题以下为根:
Sun:
RM / etc / init.d/init.cssd
RM / etc / init.d/init.crs
RM / etc / init.d/init.crsd
RM / etc / init.d/init.evmd
RM / etc / rc3.d/k96init.crs
RM / etc / rc3.d/s96init.crs
RM - Rf /无功/选择/ Oracle / scls_scr
RM - Rf /无功/选择/ Oracle / oprocd
RM / etc / inittab.crs
CP / etc / inittab.orig /etc/inittab
Linux:
RM / etc / Oracle / *
RM F / etc / init.d/init.cssd
RM F / etc / init.d/init.crs
RM F / etc / init.d/init.crsd
RM F / etc / init.d/init.evmd
RM F / etc / rc2.d/k96init.crs
RM F / etc / rc2.d/s96init.crs
RM F / etc / rc3.d/k96init.crs
RM F / etc / rc3.d/s96init.crs
RM F / etc / rc5.d/k96init.crs
RM F / etc / rc5.d/s96init.crs
RM - Rf / etc / Oracle / scls_scr
RM F / etc / inittab.crs
CP / etc / inittab.orig /etc/inittab
HP-UX:
RM /sbin init.d/init.cssd
RM /sbin init.d/init.crs
RM /sbin init.d/init.crsd
RM /sbin init.d/init.evmd
RM /sbin rc2.d/k960init.crs
RM /sbin rc2.d/k001init.crs
RM /sbin rc3.d/k960init.crs
RM /sbin rc3.d/s960init.crs
RM - Rf /无功/选择/ Oracle / scls_scr
RM - Rf /无功/选择/ Oracle / oprocd
RM / etc / inittab.crs
CP / etc / inittab.orig /etc/inittab
HP Tru64:
RM /sbin init.d/init.cssd
RM /sbin init.d/init.crs
RM /sbin init.d/init.crsd
RM /sbin init.d/init.evmd
RM /sbin rc3.d/k96init.crs
RM /sbin rc3.d/s96init.crs
RM - Rf /无功/选择/ Oracle / scls_scr
RM - Rf /无功/选择/ Oracle / oprocd
RM / etc / inittab.crs
CP / etc / inittab.orig /etc/inittab
IBM AIX:RM / etc / init.cssd
RM / etc / init.crs
RM / etc / init.crsd
RM / etc / init.evmd
RM / etc / rc.d/rc2.d/k96init.crs
RM / etc / rc.d/rc2.d/s96init.crs
RM - Rf / etc / Oracle / scls_scr
RM - Rf / etc / Oracle / oprocd
RM / etc / inittab.crs
CP / etc / inittab.orig /etc/inittab
4。如果他们不是已经下来,杀死EVM,CRS,和CSS的过程或重新启动的节点:PS EF | grep CRS杀PS EF | grep EVM杀PS EF | grep CSS杀不杀任何操作系统的过程,例如icssvr_daemon过程!
5。如果没有其他Oracle软件运行(如听众,DB的,等等),你可以移除/var/tmp /文件。Oracle或/tmp,Oracle。例如:RM -F /var/tmp / Oracle / *或RM F /甲氧苄啶/ Oracle / *。
6。拆下ocr.loc通常ocr.loc可以在/ etc /甲骨文的发现
7。除安装CRS家在Oracle通用安装程序
8。除去CRS安装位置。
9。清理OCR和DD投票文件命令。例子:
DD如果= /dev/zero = / dev / rdsk / v1064_vote_01_20m.dbf BS = 1m数= 256
DD如果= /dev/zero = / dev / rdsk / ocrv1064_100m.ora BS = 1m数= 256
看到施胶要求的集群软件安装指南…
如果你把OCR和表决磁盘上的共享文件系统,删除它们。
如果你删除数据库的安装,还清理出任何ASM磁盘如果
他们已经被使用。
10。/tmp目录/ CVU *应清洗干净,也避免了cluvfy误报。
11。在启动下一个安装之前重新启动节点是很好的做法.。
12。如果你想重新安装系统,按照oracle的安装手册的步骤。
如果直接把OracleHome删掉,杀掉所有相关进程,重启机器也可以解决问题,不过我认为这是一种比较粗暴的方式。
1. stop and delete RAC instance, drop the database
2. stop and delete ASM instance
3. stop and delete listener
4. stop crs stack and clean related resource
5. clean ocr context
6. change permission and remove related ORACLE directory and Clusterware directory 其中4,5都可以直接利用Clusterware 目录install下面的脚本进行,所以这里主要介绍1,2,3,6.1. stop and drop database#!/bin/kshdb=`srvctl config database`
echo “db=$db”
nl=`srvctl config databaes -d $db | awk ‘{print $2}’`
echo “nl=$nl”srvctl stop database -d $db
srvctl remove database -d $db -ffor n in $nldoecho “stop and remove instance on instance $n”
srvctl stop instance -d $db -i $n
srvctl remove instance -d $db -i $n -fdone
echo “stop and remove database instance done”2. stop and drop asm instance#!/bin/kshnl=`olsnodes`for n in $nldosrvctl stop asm -n $n
srvctl remove asm -n $ndone
echo “stop and remove asm done”3. stop and drop listenerlsnr=`crs_stat |grep lsnr | cut -d= -f2`
for l in $lsnrdocrs_stop $l
crs_unregister $ldone
echo “stop and remove listener done”4. stop crs stack and clean related resource 这里需要注意的是,这里的操作必须一个节点一个节点的执行,不能并行操作,就如同安装的时候执行root.sh一样!切记切记.on local node:
$ORA_CRS_HOME/install/rootdelete.sh local nosharedvar nosharedhomeon remote nodes:
$ORA_CRS_HOME/install/rootdelete.sh remote nosharedvar nosharedhome5. clean ocronly execute this on local node:
$ORA_CRS_HOME/install/rootdeinstall.sh6. change permission and remove directory
这里之所以要更改权限是因为安装后期运行root.sh的时候会把ORA_CRS_HOME的父目录改为root权限,下次安装的时候必须修改为oracle用户chown -Rf ractest:oinstall $ORA_CRS_HOME/../../../
删除大量的oracle的trace文件需要写shell脚本。
比如删除一个月前的trace文件
find /u01/app/oracle/diag/rdbms/testgg1/testgg1/trace -mtime +30 -type f -name "*" -exec rm -rf {} \;
可以写成shell脚本如下:
[oracle@Primary shell]$ vi delete_trace.sh
#! /bin/sh
export ORACLE_SID=testgg1
VALUE=`sqlplus -S "/ as sysdba" EOF_SQLPLus
set pagesize 0 feedback off verify off heading off echo off
select value from v\\\$diag_info where name='Diag Trace';
exit;
END`
find $VALUE -mtime +30 -type f -name "*" -exec rm -rf {} \;
~
配合crontab自动删除一个月前的trace文件,由于某些数据库可能会产生trace文件比较多如果没有及时去清理这些无效的trace文件,很容易导致空间暴涨,做一个job自动去删除,免去了DBA的烦恼。
Shell可以在DBA的运维过程中带来了很多的方便,目前正在学习shell,谨以此纪录并提高自己
大致思路是由DBA_TAB_PARTITIONS查询TABLE_NAME和HIGH_VALUE,来确定PARTION_NAME,通过SQL生成alter table语句。
由于DBA_TAB_PARTIONS的HIGH_VALUE字段是LONG,这里创建一个自定义包long_help,将LONG转换为VARCHAR2类型。
create or replace package long_help
authid current_user
as
function substr_of
( p_query in varchar2,
p_from in number,
p_for in number,
p_name1 in varchar2 default NULL,
p_bind1 in varchar2 default NULL,
p_name2 in varchar2 default NULL,
p_bind2 in varchar2 default NULL,
p_name3 in varchar2 default NULL,
p_bind3 in varchar2 default NULL,
p_name4 in varchar2 default NULL,
p_bind4 in varchar2 default NULL )
return varchar2;
end;
/
create or replace package body long_help
as
g_cursor number := dbms_sql.open_cursor;
g_query varchar2(32765);
procedure bind_variable( p_name in varchar2, p_value in varchar2 )
is
begin
if ( p_name is not null )
then
dbms_sql.bind_variable( g_cursor, p_name, p_value );
end if;
END;
FUNCTION substr_of
( p_query in varchar2,
p_from in number,
p_for in number,
p_name1 in varchar2 default NULL,
p_bind1 in varchar2 default NULL,
p_name2 in varchar2 default NULL,
p_bind2 in varchar2 default NULL,
p_name3 in varchar2 default NULL,
p_bind3 in varchar2 default NULL,
p_name4 in varchar2 default NULL,
p_bind4 in varchar2 default NULL )
return varchar2
as
l_buffer varchar2(4000);
l_buffer_len number;
begin
if ( nvl(p_from,0) = 0 )
then
raise_application_error
(-20002, 'From must be = 1 (positive numbers)' );
end if;
if ( nvl(p_for,0) not between 1 and 4000 )
then
raise_application_error
(-20003, 'For must be between 1 and 4000' );
end if;
if ( p_query g_query or g_query is NULL )
then
if ( upper(trim(nvl(p_query,'x'))) not like 'SELECT%')
then
raise_application_error
(-20001, 'This must be a select only' );
end if;
dbms_sql.parse( g_cursor, p_query, dbms_sql.native );
g_query := p_query;
end if;
bind_variable( p_name1, p_bind1 );
bind_variable( p_name2, p_bind2 );
bind_variable( p_name3, p_bind3 );
bind_variable( p_name4, p_bind4 );
dbms_sql.define_column_long(g_cursor, 1);
if (dbms_sql.execute_and_fetch(g_cursor)0)
then
dbms_sql.column_value_long
(g_cursor, 1, p_for, p_from-1,
l_buffer, l_buffer_len );
end if;
return l_buffer;
end substr_of;
END;
/
创建一个分区表PART_TABLE,插入三条记录分别在三个分区中。
CREATE TABLE PART_TABLE
(
TABLE_ID NUMBER(8),
SUB_DATE DATE
)
PARTITION BY RANGE(SUB_DATE)
INTERVAL(NUMTODSINTERVAL(1,'DAY'))
(
PARTITION P1 VALUES LESS THAN(TO_DATE('2017-12-25','YYYY-MM-DD'))
);
INSERT INTO PART_TABLE VALUES(1,DATE '2017-12-24');
INSERT INTO PART_TABLE VALUES(1,DATE '2017-12-25');
INSERT INTO PART_TABLE VALUES(1,DATE '2017-12-26');
COMMIT;
通过SQL生成alter table语句,截断第一个分区。
这里需要注意查询条件是HIGH_VALUE,条件为2017-12-25时,截断的是最大值为2017-12-25的分区。
SELECT 'alter table PART_TABLE truncate partition ' || PARTITION_NAME ||
' update INDEXES;'
FROM (SELECT TABLE_OWNER,
TABLE_NAME,
PARTITION_NAME,
LONG_HELP.SUBSTR_OF('SELECT HIGH_VALUE
FROM DBA_TAB_PARTITIONS WHERE TABLE_OWNER=:TABLE_OWNER
AND TABLE_NAME=:TABLE_NAME
AND PARTITION_NAME=:PARTITION_NAME', 1, 4000, 'TABLE_OWNER', TABLE_OWNER, 'TABLE_NAME', TABLE_NAME, 'PARTITION_NAME', PARTITION_NAME) HIGH_VALUE
FROM DBA_TAB_PARTITIONS)
WHERE TABLE_NAME = 'PART_TABLE'
AND HIGH_VALUE LIKE '%2017-12-25%';
这个问题你可能通过查询oracle的系统表,例如all_all_tables,用这些对象的列表生成一批数据库删除对象的语句,然后将这些语句存到文件,用sqlplus的文件参数执行这一批语句。