ORACLE手工删除数据库

很多人习惯用ORACLE的DBCA工具创建、删除数据库,这里总结一下手工删除数据库实验的步骤,文中大量参考了乐沙弥的手动删除ORACLE数据库这篇博客的内容,当然还有Oracle官方相关文档。此处实验环境为Oracle Linux Server release 5.7,数据库版本为10.2.0.5.0

 

Step 1: .获得控制文件、数据文件,日志文件等相关信息

获取这些信息,一方面是为了后面的建库做参考,另外一个是为了验证后面一些操作,如果这些都没有必要,其实是可以可以跳过这一步的。

SQL> select status ,name from v$controlfile;
 
SQL> select * from v$dbfile; 
 
SQL> select * from v$logfile;
 
SQL>archive log list;  

 

Step 2: 停止监听服务和OEM

$lsnrctl stop  或 lsnrctl stop listener_name
 
[oracle@DB-Server ~]$ emctl stop dbconsole
TZ set to Hongkong
Oracle Enterprise Manager 10g Database Control Release 10.2.0.5.0  
Copyright (c) 1996, 2010 Oracle Corporation.  All rights reserved.
http://EGMLNX02.eel1.esquel.com:1158/em/console/aboutApplication
Stopping Oracle Enterprise Manager 10g Database Control ... 
 
 Cannot determine Oracle Enterprise Manager 10g Database Control process. /u01/app/oracle/product/10.2.0/db_1/xxxxx_xxx/emctl.pid does not exist. 

 

Step 3: 关闭数据库实例

SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.

 

 

Step 4:启动到数据库实例到mount状态

使用exclusive restart或普通模式都可以

SQL> startup mount exclusive restrict;
SQL> startup mount;

 

 

Step 5: 修改参数为允许受限的会话模式

这一步骤是必须的,否则在drop database时会报ORA-01586: database must be mounted EXCLUSIVE and not open for this operation

SQL> alter system enable restricted session;

 

Step 6:使用drop database命令来清除数据库

SQL> drop database;

 

drop database 命令会删除控制文件和在控制文件中所列的数据文件,如果数据库正在使用spfile文件,则一并删除。

备份文件和归档日志文件不会被删除,我们可以之后通过RMAN进行删除。

如果数据库是建立在裸设备上,那么这个命令不会删除指定裸设备上的文件。

# deletes all database files, both ASM and non-ASM

When you issue this statement, Oracle Database drops the database and deletes all control files and datafiles listed in the control file. If the database used a server parameter file (spfile), it is also deleted.

Archived logs and backups are not removed, but you can use Recovery Manager (RMAN) to remove them. If the database is on raw disks, this statement does not delete the actual raw disk special files.

DROP DATABASE

The DROP DATABASE command deletes these files from operating system.

* Datafiles

* Online Redo Log Files

* Controlfiles

* SPFILE (if it exists)

The DROP DATABASE command does not delete the following files:

* init.ora (text version of the Oracle initialization file)

* password file

* entries in listener files

* entries in oratab file

其实最好是在执行drop database命令时,查看alert_$ORACLE_SID的输出内容,即可有个大概的了解。在metlink上看到一个手工删除数据文件、联机重做日志、控制文件的脚本,如下所示,这个也可以作为一个参考。

SQL>  SET SERVEROUTPUT ON
SQL>  DECLARE
      TYPE string_arr IS TABLE OF VARCHAR2(1024);
      file_list string_arr;
      BEGIN
           SELECT t.file_path BULK COLLECT
           INTO file_list
           FROM (SELECT NAME file_path
                  FROM V$DATAFILE
                 UNION
                   SELECT MEMBER file_path
                   FROM V$LOGFILE
                 UNION
                   SELECT NAME file_path
                   FROM v$controlfile
                 UNION
                   SELECT VALUE file_path
                    FROM v$parameter
                    WHERE NAME LIKE '%dest'
                 UNION
                   SELECT VALUE file_path
                   FROM v$parameter2
                   WHERE NAME = 'utl_file_dir'
                 UNION
                   SELECT '$ORACLE_BASE/admin/$ORACLE_SID' file_path 
                   FROM dual
                 ) t;
 
                 FOR i IN file_list.FIRST .. file_list.LAST LOOP
                            DBMS_OUTPUT.PUT_LINE('rm -f ' || file_list(i));
                 END LOOP;
 
         END;
         /

 

执行上面脚本就能得到类似下面输出的内容。当然,这个脚本必须在前面步骤之前执行。

rm -f $ORACLE_BASE/admin/$ORACLE_SID

rm -f /ORATEST/oracle/admin/bdump

rm -f /ORATEST/oracle/admin/cdump

rm -f /ORATEST/oracle/admin/udump

rm -f /ORATEST/oracle/product/10.1/rdbms/audit

rm -f /ORATEST/oradata/control01.ctl

rm -f /ORATEST/oradata/control02.ctl

rm -f /ORATEST/oradata/control03.ctl

rm -f /ORATEST/oradata/data01.dbf

rm -f /ORATEST/oradata/data02.dbf

rm -f /ORATEST/oradata/redo01.log

rm -f /ORATEST/oradata/redo02.log

rm -f /ORATEST/oradata/redo03.log

rm -f /ORATEST/oradata/sysaux01.dbf

rm -f /ORATEST/oradata/system01.dbf

rm -f /ORATEST/oradata/undotbs01.dbf

rm -f /ORATEST/oradata/users01.dbf

rm -f ?/dbs/arch

 

Step 7:手动清理相关文件

 

$echo $ORACLE_SID                                      --确认当前的ORACLE_SID
$ls $ORACLE_BASE/admin/$ORACLE_SID                     --删除Oracle Base目录下$ORACLE_SID时,先检查、确认一下
$ rm -rf $ORACLE_BASE/admin/$ORACLE_SID                --删除oracle base目录下的$ORACLE_SID的所有内容
 
注意,任何删除前最好先检查、确认,例如下面删除归档日志,我测试的环境,没有开启归档模式,所以下面命令根本没有必要
 
$ ls -lrt $ORACLE_BASE/arch/$ORACLE_SID          
$ rm -rf $ORACLE_BASE/arch/$ORACLE_SID                 --清除归档日志,注意归档路径的正确性
        
$ rm -rf $ORACLE_BASE/flash_recovery_area/$ORACLE_SID  --清除闪回区的内容
删除前,最好将所有的参数文件保存到另外一个目录,以免需要参考时需要
$ cp $ORACLE_HOME/dbs/*  /tmp/
$ rm -rf $ORACLE_HOME/dbs/*$ORACLE_SID*                --清除参数文件     

Step 8.清理监听相关文件

 $ rm $TNS_ADMIN/*.ora                          --如果设定了$TNS_ADMIN变量,否则删除默认路径下的监听文件
 $ rm $ORACLE_HOME/network/admin/*.ora          --注意,如果动态监听可能不存在这些文件。如果不删除,重新创建同样名字数据库
                                                --时,监听可能会有一些异常情况。

 

Step 9.修改oratab文件以及.bash_profile

 

这个步骤不是必须的,是情况和需要而定。

$ vi /etc/oratab --去掉实例相关的设置

$ vi ~/.bash_profile --去掉实例相关的设置

 

参考资料:

http://blog.csdn.net/leshami/article/details/6454479

https://support.oracle.com/epmos/faces/DocumentDisplay?_afrLoop=508865219788761&id=443822.1&displayIndex=10&_afrWindowMode=0&_adf.ctrl-state=38ojq5hbc_203

时间: 2024-12-29 14:38:16

ORACLE手工删除数据库的相关文章

Oracle如何删除数据库表空间?

举例:删除表空间  abc, 首先,以sysdba用户登录数据库 $sqlplus / as sysdba 删除tablespace DROP TABLESPACE abc  INCLUDING CONTENTS AND DATAFILES; 因为是供开发环境来使用的db, 需要清理的user 和 table space 很多. 思路:  Export出DB中所有的user和tablespace, 筛选出系统的和有用的tablespace,把有用的信息load到一张表中去. 然后写例程循环,把不

Oracle 如何删除数据库用户?

举例:删除用户  abc, 首先,以sysdba用户登录数据库 $sqlplus / as sysdba 删除用户abc SQL>drop user abc  cascade 注意: 删除了用户abc,只是删除了该用户下的schema objects,是不会删除相应的tablespace的. 删除指定用户所有表 1. select 'Drop table '||table_name||';' from all_tables where owner='要删除的用户名(注意要大写)'; 2.删除所有

怎样手工删除数据库里的Merge Replication信息

数据|数据库 1. The best way is to run sp_removedbreplication. 2. After you run sp_removedbreplication, you may run the followingscript in your restored database. This script will generate the dropcommands for replication related system tables, views, stor

Oracle RMAN 维护介绍(四) 如何删除数据库

如果无法采取其他方法来处理数据库的问题,则可以使用RMAN 的drop database. 只需要将数据库置于受限制的会话模式,在使用RMAN连接到目标数据库,执行drop database命令,就可以安静的删除数据库. 如果添加inculding backups参数,则在删除同时删除RMAN相关的备份. 执行该命令时,RMAN 首先会确认操作,然后继续删除数据库. 如果希望不回显提示,可以使用noprompt参数. 示例: DROP DATABASE; DROP DATABASE NOPROM

如何在oracle中手工创建数据库

oracle中手工创建数据库的步骤: 1. 创建必要的相关目录 2. 创建初始化参数文件 3. 设置环境变量Oracle_sid 4. 创建实例 5. 创建口令文件 6. 启动数据库到nomount(实例)状态 7. 执行建库脚本 8. 执行catalog脚本创建数据字典 9. 执行catproc创建package包 10.      执行pupbld 11.      由初始化参数文件创建spfile文件 12.      执行scott脚本创建scott模式 13.      用命令测试数据

java oracle-怎么在oracle用imp导入数据库前删除数据库里的表 触发器怎么写 或者java代码怎么写

问题描述 怎么在oracle用imp导入数据库前删除数据库里的表 触发器怎么写 或者java代码怎么写 // 还原 Button button_1 = new Button(composite_1, SWT.NONE); button_1.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { TableItem[] tis = table.get

深入浅析Oracle数据库管理之创建和删除数据库_oracle

Oracle数据库的数据文件(扩展名为DBF的文件)是用于保存数据库中数据的文件,系统数据.数据字典数据.临时数据.索引数据.应用数据等都物理地存储在数据文件中.用户对数据库中数据的操作,例如数据的插入.删除.修改和查询等,其本质都是对数据文件进行操作.所有数据文件占据空间的大小决定了数据库容量的大小. 一.数据库管理概述 在完成Oracle软件安装后,DBA就应该对组织和管理数据库负责任,其主要任务是: (1)启动和关闭数据库: (2)创建数据库: (3)删除数据库: (4)调整初始化参数:

Oracle中手动删除数据库教程_oracle

在很多情况下,或无法使用dbca工具的时候,我们需要手动来删除数据库.对此,可以借助drop database命令来实现,下面的描述中给出手动删除数据库. 的具体步骤,包含文件系统数据库以及ASM数据库.环境:Oracle Enterprise Linux 5.4 + Oracle 10g R2 .  一.手动删除文件系统数据库      1.停止监听与OEM       复制代码 代码如下:         $ lsnrctl stop listener_name         $ emct

如何不使用DBCA在Oracle 11中删除数据库

如何不使用DBCA在Oracle 11中删除数据库 本文简短的教程,将会向你展示如何不使用DBCA(数据库配置助手)在Oracle 11中删除数据库. 1- 导入数据库的SID,如果没有定义的话 export ORACLE_SID=database 2- 以操作系统认证连接数据库 [oracle@Oracle11 ~]$ sqlplus / as sysdba   SQL*Plus: Release 11.2.0.1.0 Production on Mon Dec 1 17:38:02 2014