1、删除数据库:
在linux下删除一个数据库很简单,只要删除相应的文件就可以了。来,咱开始:
1、进入$ORACLE_HOME/dbs 删除本数据库的初始参数文件 、密码文件:
[oracle9@frogger dbs]$ pwd
/u01/app/oracle/product/10.2.0.1/dbs
[oracle9@frogger dbs]$rm init$ORACLE_SID.ora
[oracle9@frogger dbs]$rm orapw$ORACLE_SID
2、进入$ORACLE_BASE/oradata/SID删除数据文件:
[oracle9@frogger oradata]$ ls
default_demo01.dbf default_demo99.dbf devdb02 duke1 test01 test01_bak test02 testdk testqa ——很不理解为毛我的这个目录下面只有一个orcl的目录,他的这么多。。。
[oracle9@frogger oradata]$ ps -ef|grep smon
oracle9 7162 1 0 2008 ? 00:04:30 ora_smon_duke
oracle9 3313 1 0 2008 ? 00:02:30 ora_smon_testdk
oracle9 4386 1 0 Apr05 ? 00:00:07 ora_smon_test01
oracle9 4620 1 0 Apr05 ? 00:00:05 ora_smon_dvdsame
oracle9 12307 4426 0 22:53 pts/3 00:00:00 grep smonora_smon_ORCL 和黄色那个。
[oracle9@frogger oradata]$rm -rf ORCL
[oracle9@frogger oradata]$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroup00-LogVol00
/dev/sda1 99M 15M 80M 16% /boot
none 1004M 0 1004M 0% /dev/shm
nfs-vip.certificatesnow.com:/u07
[oracle9@frogger oradata]$ls
default_demo01.dbf default_demo99.dbf devdb02 duke1 test01 test01_bak testdk testqa
3、进入$ORACLE_BASE/admin下删除日志文件:
[oracle9@frogger admin]$ ls
devdb02 duke1 test01 test02 testdk testqa
[oracle9@frogger admin]$ pwd
/u01/app/oracle/admin
[oracle9@frogger admin]$cd ORCL
[oracle9@frogger test02]$ ls
bdump cdump create pfile udump
[oracle9@frogger test02]$ cd ..
[oracle9@frogger admin]$ ls
devdb02 duke1 test01 test02 testdk testqa
[oracle9@frogger admin]$ rm -rf ORCL
[oracle9@frogger admin]$ ls
devdb02 duke1 test01 testdk testqa
[oracle9@frogger admin]$
此时我再次连接数据库,竟然出错了:ORA-09925: Unable to create audit trail file
有人说重启一下就好了,我也重启了一下,ok了。
4. 如果是用dbca创建的实例,则还要删除/etc/oratab文件中的实例信息,就一行。 删除就ok了。
/etc/oratab 运行root.sh产生的,中每一行代表一个ORACLE 实例,不允许有相同的名字,对已经存在的数据库会提示是否升级等,安装创建数据库的时候会去检查这个文件是否存在和并检查文件中的内容,在运行dbstart 时会检查这个文件,如果是Y就启动它,是N
就不管它。
[oracle9@frogger admin]$ cd /etc
[oracle9@frogger etc]$ more oratab
#
# This file is used by ORACLE utilities. It is created by root.sh
# and updated by the Database Configuration Assistant when creating
# a database.
# A colon, ':', is used as the field terminator. A new line terminates
# the entry. Lines beginning with a pound sign, '#', are comments.
#
# Entries are of the form:
# $ORACLE_SID:$ORACLE_HOME:<N|Y>:
#
# The first and second fields are the system identifier and home
# directory of the database respectively. The third filed indicates
# to the dbstart utility that the database should , "Y", or should not,
# "N", be brought up at system boot time.
#
# Multiple entries with the same $ORACLE_SID are not allowed.
#
#
# *:/u01/app/oracle/product/9.2.0.1:N
*:/u01/app/oracle/product/9.2.0.1:N
duke:/u01/app/oracle/product/9.2.0.1:N
test02:/u01/app/oracle/product/9.2.0.1:N
[oracle9@frogger etc]$
有网友说还要删除如下文件:
还要删除几个文件
rm -rf /usr/local/bin/coraenv
rm -rf /usr/local/bin/dbhome
rm -rf /usr/local/bin/oraenv
rm -rf /etc/ora*
rm -rf /opt/ORCLfmap(这个不确定)
查了一下文档,oracle对这几个文件是这样介绍的:
这个local/bin就叫做local bin 目录,其中环境变量 PATH中已经为每个用户设置了这个本地bin目录的环境变量,每个用户都会去访问这个local bin目录 下的内容。安装oracle之后运行root.sh脚本,这个脚本就会提醒你这个local bin 目录的位置,并且自动的复制oraevn,dbhome,coraevn这几个文件到你指定的目录。如果你不执行这个root.sh脚本,那你可以自己从$ORACLE_HOME/bin目录下拷贝到本地bin目录。
2、手动建立数据库:
1、设置环境变量:创建ORACLE_SID,怎么做呢?很简单,在/home/oracle 目录下有个隐藏的文件,叫 .bash_profile 这个就是关于环境变量的设置的,在里面添加 export ORACLE_SID=mynewdb。 然后要运行source .bash_profile 让这个新设置的环境变量生效,最后查看一遍 echo $ORACLE_SID 结果为:mynewdb。
具体的环境变量可以参照下面的内容:
PATH=$PATH:$HOME/bin:/sbin:/usr/local/bin
export PATH
unset USERNAME
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=/u01/app/oracle/product/10.2.0/db_1
export ORACLE_SID=mynewdb
export PATH=$ORACLE_HOME/bin:$PATH
需要设置的环境变量主要就是这三个:ORACLE_BASE、ORACLE_HOME、ORACLE_SID和PATH
需要说明的是PATH变量的设置,需要将“$ORACLE_HOME/bin”写在“$PATH”之前,这样设置主要目的是:Oracle命令优先被选择。
下面是网上淘来的验证方法,我一般用自echo就可以了
确认ORACLE_SID等环境变量被正确设置
2、创建诊断目录,这些目录都是oracle进程遇到错误或者用户手动trace时用到的。
[oracle@secDB ~]$ env | grep -i sid
ORACLE_SID=secooler
[oracle@secDB ~]$ env | grep ORACLE_BASE
ORACLE_BASE=/u01/app/oracle
[oracle@secDB ~]$ env | grep ORACLE_HOME
ORACLE_HOME=/u01/app/oracle/product/10.2.0/db_1
mkdir -p $ORACLE_BASE/admin/mynewdb/adump
mkdir -p $ORACLE_BASE/admin/mynewdb/bdump
mkdir -p $ORACLE_BASE/admin/mynewdb/cdump
mkdir -p $ORACLE_BASE/admin/mynewdb/udump
mkdir -p $ORACLE_BASE/admin/mynewdb/pfile
创建oracle的数据文件目录
mkdir -p $ORACLE_BASE/oradata/mynewdb
3.创建密码文件:
orapwd file=$ORACLE_HOME/dbs/orapwmydb password=admin entries=5 force=y
4.创建ORACLE的参数文件$ORACLE_HOME/dbs/initmynewdb.ora:创建的方法很犀利,直接用init.ora里面的参数,用一个名利将里面的内容输出出来,那句命令是这样的:cat init.ora |grep -v ^# |grep -v ^$ > initsecooler.ora
(1)进入到$ORACLE_HOME/dbs目录
[oracle@secDB ~]$ cd $ORACLE_HOME/dbs
(2)去掉默认init.ora文件中杂乱的内容,仅保留参数本身信息
[oracle@secDB dbs]$ cat init.ora |grep -v ^# |grep -v ^$ > initsecooler.ora
(3)调整initsecooler.ora参数内容
调整后的内容如下:
[oracle@secDB dbs]$ vi initsecooler.ora
db_name=mynewdb
db_files = 80 # SMALL
db_file_multiblock_read_count = 8 # SMALL
#db_block_buffers = 100 # SMALL
#shared_pool_size = 3500000 # SMALL
log_checkpoint_interval = 10000
processes = 50 # SMALL
parallel_max_servers = 5 # SMALL
log_buffer = 32768 # SMALL
max_dump_file_size = 10240 # limit trace file size to 5 Meg each
global_names = TRUE
#control_files = (ora_control1, ora_control2)
control_files = (/u01/app/oracle/oradata/secooler/cfile/ora_control1,/u01/app/oracle/oradata/secooler/cfile/ora_control2,/u01/app/oracle/oradata/secooler/cfile/control3)
sga_max_size=300M
sga_target=300M
~
~
较之系统自带的参数文件做了如下修改动作:
a.修改db_name参数为mynewdb
b.注销掉参数db_block_buffers、shared_pool_size
c.修改controlfile参数
c.增加sga_max_size和sga_target参数,大小设置为300M。
这个是一个参考的参数设置:
aq_tm_processes=0
audit_file_dest=/oracle/admin/mydb/adump
background_dump_dest=/oracle/admin/mydb/bdump
compatible=10.2.0.1.0
control_files=/oracle/oradata/mydb/control01.ctl, /oracle/oradata/mydb/control02.ctl, /oracle/oradata/mydb/control03.ctl
core_dump_dest=/oracle/admin/mydb/cdump
db_block_size=8192
db_domain=""
db_file_multiblock_read_count=16
db_name=mydb
instance_name=mydb
dispatchers="(PROTOCOL=TCP) (SERVICE=mydbXDB)"
job_queue_processes=10
nls_length_semantics=BYTE
open_cursors=300
pga_aggregate_target=94371840
processes=150
remote_login_passwordfile=EXCLUSIVE
resource_manager_plan=""
sessions=170
sga_target=285212672
undo_management=AUTO
undo_retention=900
undo_tablespace=UNDOTBS1
user_dump_dest=/oracle/admin/mydb/udump
5、 创建spfile并调整
(1)使用sqlplus命令登陆创建spfile
[oracle@secDB dbs]$ sqlplus / as sysdba
SQL>create spfile from pfile;(会自动读取pfile:$ORACLE_HOME/dbs/init$ORACLE_SID.ora)
(2)启动数据库到nomount状态,调整spfile参数
a.启动数据库到nomount状态
SQL> startup nomount;
ORACLE instance started.
Total System Global Area 314572800 bytes
Fixed Size 1219184 bytes
Variable Size 96470416 bytes
Database Buffers 213909504 bytes
Redo Buffers 2973696 bytes
b.需要修改的spfile参数如下
SQL> alter system set undo_management=auto scope=spfile;
SQL> alter system set db_create_file_dest='/u01/app/oracle/oradata/mynewdb' scope=spfile;
SQL> alter system set db_create_online_log_dest_1='/u01/app/oracle/oradata/mynewdb' scope=spfile;
SQL> alter system set job_queue_processes =5 scope=spfile;
SQL> alter system set background_dump_dest='/u01/app/oracle/admin/secooler/bdump' scope=spfile;
SQL> alter system set core_dump_dest= '/u01/app/oracle/admin/secooler/cdump' scope=spfile;
SQL> alter system set user_dump_dest='/u01/app/oracle/admin/secooler/udump' scope=spfile;
SQL> alter system set audit_file_dest='/u01/app/oracle/admin/secooler/adump' scope=spfile;
一点小插曲:
我当时看到这上面的一串的时候,就跑到dbs目录下,开始编辑spfile文件,看了半天怎么里面有一些不认识的字符串,当时就删了它,还觉得这下子清爽了,接着再用alter system 这个句子往下改,结果马上报错了:
ORA-27046: file size is not a multiple of logical block size
怎么会这样子呢?原来当时忘了一点,他妈的这个spfile是二进制的文件。。。不能手工编辑。。如果手工编辑了,就成了无效的文件。
解决办法如下:
1。将SPFILE中的参数拷贝到init***.ora文件中
2。删除DATABASE目录下的SPFILE***.ORA文件。
3。启动数据库 (现在应该可以成功启动)
4。SQL> create spfile from pfile 生成SPFIEL
使用startup命令启动数据库,,Oralce将会按照以下顺序在缺省目录中(9i,10i在oracle_home/database目录下)搜索参数文件:(1)spfile***.ora文件 (2)如果没有spfile***.ora文件就用spfile.ora文件(3) 如果没有spfile.ora文件就用init***.ora(4)如果没有init***.ora文件就用 pfile.ora
所以上面我们采取的解决方法是将破坏的SPFILE中的参数复制到init***.ora中,然后删除SPFILE文件,这样启动时就会用init***.ora文件启动,然后用create spfile from pfile 命令生成SPFIEL
以后如果要修改SPFILE中的参数绝对不能在手工修改SPFILE文件了,用下面命令:alter system set parameter=Value scope=spfile|both|memory 例如:alter system set db_cache_size=24M scope=both;来修改
c.停起数据库到nomount状态使spfile调整生效
SQL>shutdown immediate;
ORA-01507: database not mounted
ORACLE instance shut down.
SQL>startup nomount;
ORACLE instance started.
Total System Global Area 314572800 bytes
Fixed Size 1219184 bytes
Variable Size 96470416 bytes
Database Buffers 213909504 bytes
Redo Buffers 2973696 bytes
6.创建数据库
1)编写create database脚本
(1)获取create database的参考脚本
在Oracle文档中中有一个供参考的创建语句
(1)进入到Oracle官方文档的首页:http://www.oracle.com/pls/db102/homepage;
(2)点击“Books”;
(3)在列出来的参考书目中的找到第5本书“Administrator's Guide”,点击“HTML”进入;
(4)搜索关键字“create database statement”,位到“Step 7: Issue the CREATE DATABASE Statement”,点击进入便可以得到创建数据库的参考脚本;
2)调整参考脚本中的内容为我所用
(1)需要调整的内容
数据库名字
SYS和SYSTEM密码
路径名修改,注意一定要准确全面
表空间tbs_1后面给出具体数据文件信息
(2)调整后的脚本如下
CREATE DATABASE mynewdb
USER SYS IDENTIFIED BY liu123
USER SYSTEM IDENTIFIED BY manager
LOGFILE GROUP 1 ('/home/oracle/oracle/oradata/mynewdb/redo01.log') SIZE 100M,
GROUP 2 ('/home/oracle/oracle/oradata/mynewdb/redo02.log') SIZE 100M,
GROUP 3 ('/home/oracle/oracle/oradata/mynewdb/redo03.log') SIZE 100M
MAXLOGFILES 5
MAXLOGMEMBERS 5
MAXLOGHISTORY 1
MAXDATAFILES 100
MAXINSTANCES 1
CHARACTER SET US7ASCII
NATIONAL CHARACTER SET AL16UTF16
DATAFILE '/home/oracle/oracle/oradata/mynewdb/system01.dbf' SIZE 325M REUSE
EXTENT MANAGEMENT LOCAL
SYSAUX DATAFILE '/home/oracle/oracle/oradata/mynewdb/sysaux01.dbf' SIZE 325M REUSE
DEFAULT TABLESPACE tbs_1 datafile '/home/oracle/oracle/oradata/mynewdb/tbs_1.dbf' size 50m
DEFAULT TEMPORARY TABLESPACE tempts1
TEMPFILE '/home/oracle/oracle/oradata/mynewdb/temp01.dbf'
SIZE 20M REUSE
UNDO TABLESPACE undotbs
DATAFILE '/home/oracle/oracle/oradata/mynewdb/undotbs01.dbf'
SIZE 200M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED;
(3)运行如下命令创建数据库:
SQL>@/home/oracle/liutemp/createnewdb.sql\
大约一分钟的沉默,然后跳出 database created。。创建完成。
3)使用上面的create database脚本创建数据库
脚本执行之后,此时数据库状态已经为OPEN状态。
SQL> select status from v$instance;
STATUS
------------
OPEN
4)设置数据文件和临时文件为自动扩展
(1)获得所有数据文件和临时文件信息
SQL>col name for a60
SQL> select file#,name from v$datafile union select file#,name from v$tempfile;
FILE# NAME
---------- ------------------------------------------------------------
1 /u01/app/oracle/oradata/secooler/dfile/system01.dbf
1 /u01/app/oracle/oradata/secooler/dfile/temp01.dbf
2 /u01/app/oracle/oradata/secooler/dfile/undotbs01.dbf
3 /u01/app/oracle/oradata/secooler/dfile/sysaux01.dbf
4 /u01/app/oracle/oradata/secooler/dfile/tbs_1.dbf
(2)将其调整为自动扩展
SQL> alter database datafile 1 autoextend on;
SQL> alter database datafile 2 autoextend on;
SQL> alter database datafile 3 autoextend on;
SQL> alter database datafile 4 autoextend on;
SQL> alter database tempfile 1 autoextend on;
7.执行catalog.sql和catproc.sql脚本创建数据字典视图并配置
注意这两个脚本需要以SYSDBA身份来执行
[oracle@secDB ~]$ sqlplus / as sysdba
SQL*Plus: Release 10.2.0.1.0 - Production on Thu Jul 7 22:17:18 2010
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, OLAP and Data Mining options
SQL> @?/rdbms/admin/catalog.sql
... ...
... 大约需要5分钟 ...
... ...
SQL> @?/rdbms/admin/catproc.sql
... ...
... 大约需要10分钟 ...
... ...
8.小结
手工创建数据库相比dbca来说繁琐了很多,不过整个安装过程体现的是Oracle的运行原理,对于理解数据库细节来说有很大的裨益。
-------------------------------------------------------------------------------------------
下面是另一个网友的后面几步,有时间可以练练:
创建额外的表空间:
CONNECT SYS/password AS SYSDBA
-- create a user tablespace to be assigned as the default tablespace for users
CREATE TABLESPACE users LOGGING
DATAFILE '/u01/oracle/oradata/mynewdb/users01.dbf'
SIZE 25M REUSE AUTOEXTEND ON NEXT 1280K MAXSIZE UNLIMITED
EXTENT MANAGEMENT LOCAL;
-- create a tablespace for indexes, separate from user tablespace
CREATE TABLESPACE indx LOGGING
DATAFILE '/u01/oracle/oradata/mynewdb/indx01.dbf'
SIZE 25M REUSE AUTOEXTEND ON NEXT 1280K MAXSIZE UNLIMITED
EXTENT MANAGEMENT LOCAL;
7. 运行数据字典脚本,其中catalog和catproc是必需的,其它可选:
SQL> spool /orahome/cat.log
SQL> @?/rdbms/admin/catalog.sql (建数据字典视图)
SQL> @?/rdbms/admin/catproc.sql (建存储过程包)
SQL> @?/rdbms/admin/catblock.sql (建锁相关的几个视图)
SQL> @?/rdbms/admin/catoctk.sql (建密码工具包dbms_crypto_toolkit)
SQL> @?/rdbms/admin/owminst.plb (建工作空间管理相关对象,如dmbs_wm)
SQL> spool off
执行完后检查/orahome/cat.log看看有什么不可接受的错误没有。
8. 新建sqlplus属性和帮助、USERS表空间
SQL> connect system/iamwangnc
SQL> @?/sqlplus/admin/pupbld.sql
SQL> @?/sqlplus/admin/help/hlpbld.sql helpus.sql
SQL> connect /as sysdba
SQL> CREATE TABLESPACE USERS LOGGING DATAFILE '/orahome/oradata/WENDING/users01.dbf' SIZE 100M REUSE AUTOEXTEND ON NEXT 10m MAXSIZE UNLIMITED EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO;
SQL> ALTER DATABASE DEFAULT TABLESPACE USERS;
9. 最后修改为归档模式并重启(查看当前的数据库归档模式命令:archive log list)
SQL> shutdown immediate;
SQL> connect /as sysdba
SQL> startup mount
SQL> alter database archivelog;
SQL> alter database open;
重新编译所有失效过程:
SQL> execute utl_recomp.recomp_serial();
10、建立和配置EM(可选):
SQL> @?/sysman/admin/emdrep/sql/emreposcre /u01/app/oracle/product/10.2.0/db_1 SYSMAN iamwangnc TEMP ON;
SQL> alter user SYSMAN identified by "iamwangnc" account unlock;
SQL> alter user DBSNMP identified by "iamwangnc" account unlock;
SQL> host emca -config dbcontrol db -silent -DB_UNIQUE_NAME WENDING -PORT 1521 -EM_HOME /u01/app/oracle/product/10.2.0/db_1 -LISTENER LISTENER -SERVICE_NAME WENDING.LK -SYS_PWD "iamwangnc" -SID WENDING -ORACLE_HOME /u01/app/oracle/product/10.2.0/db_1 -DBSNMP_PWD "iamwangnc" -HOST "vmone" -LISTENER_OH /u01/app/oracle/product/10.2.0/db_1 -LOG_FILE /orahome/emConfig.log -SYSMAN_PWD "iamwangnc";
到此建库完毕!