首页 > 代码库 > 10_Oracle_Admin_手动创建一个比较实用的数据库
10_Oracle_Admin_手动创建一个比较实用的数据库
上一节中手动创建数据库由于参数太过简单,且没有安装数据字典,是无法实际应用的,本章节是对上节内容的深入,增加了很多细节和参数配置,按照以下步骤,可以成功安装一个能实际使用的数据库。
======清理现有数据库文件======
[oracle@localhost dbs]$ ll
total 240396 -rw-r-----. 1 oracle oinstall 7847936 Aug 28 11:43 cntrlwly.dbf -rw-r-----. 1 oracle oinstall 81928192 Aug 28 11:40dbs1wly.dbf -rw-r-----. 1 oracle oinstall 10493952 Aug 28 11:40 dbu1wly.dbf ... -rw-r-----. 1 oracle oinstall 2560 Aug 28 04:17 spfileorcl.ora -rw-r-----. 1 oracle oinstall 1536 Aug 28 10:25 spfilewly.ora -rwxr-xr-x. 1 oracle oinstall 254 Aug 28 07:40 wly.env
[oracle@localhost dbs]$ rm -f*dbf
[oracle@localhost dbs]$ rm -fspfilewly.ora
[oracle@localhost dbs]$ ls
hc_orcl.dat initorcl.ora lkWLY peshm_orcl_0 spfileorcl.ora hc_wly.dat initwly.ora old peshm_ORCL_0 wly.env init.ora lkORCL orapworcl peshm_wly_0
=======准备初始化参数文件=========
可以通过联机文档reference参考各参数的含义和用法。对于初学者,可以直接拷贝有经验的DBA创建的参数文件,也可以对安装ORACLE时默认创建的数据库中的PFILE进行修改。
[oracle@localhost dbs]$ env |grep ORA
ORACLE_SID=orcl ORACLE_BASE=/oracle ORACLE_HOME=/oracle/11g # 当前使用的是orcl这个数据库
[oracle@localhost dbs]$ stringsspfileorcl.ora > initsmn.ora
# 提取orcl的SPFILE到initsmn.ora中
[oracle@localhost dbs]$ viminitsmn.ora
*.open_cursors=300 *.processes=150 *.remote_login_passwordfile=‘EXCLUSIVE‘ *.undo_tablespace=‘UNDOTBS1‘ … ~ :%s/orcl/smn # 在vim中使用 %s/原字符串/要替换的字符串将orcl 换成smn # 这里有很多目录也被替换了,需要提前将他们创建出来,否则运行时会报错 :%s/*\.//g # 去掉SPFILE中带上的*号
========根据参数文件逐一创建目录=========
[oracle@localhost dbs]$ catinitsmn.ora
smn.__db_cache_size=96468992 smn.__java_pool_size=4194304 smn.__large_pool_size=4194304 smn.__oracle_base=‘/oracle‘#ORACLE_BASE set from environment smn.__pga_aggregate_target=146800640 smn.__sga_target=276824064 smn.__shared_io_pool_size=0 smn.__shared_pool_size=159383552 smn.__streams_pool_size=4194304 audit_file_dest=‘/oracle/admin/smn/adump‘ audit_trail=‘db‘ compatible=‘11.2.0.0.0‘ control_files=‘/oracle/oradata/smn/control01.ctl‘,‘/oracle/flash_recovery_area/smn/control02.ctl‘ db_block_size=8192 db_domain=‘‘ db_name=‘smn‘ db_recovery_file_dest=‘/oracle/flash_recovery_area‘ db_recovery_file_dest_size=4039114752 diagnostic_dest=‘/oracle‘ dispatchers=‘(PROTOCOL=TCP) (SERVICE=smnXDB)‘ LOG_ARCHIVE_DEST_1=‘LOCATION=/oracle/oradata/smn/archive‘ LOG_ARCHIVE_FORMAT =‘%t_%s_%r.dbf‘ memory_target=421527552 open_cursors=300 processes=150 remote_login_passwordfile=‘EXCLUSIVE‘ undo_tablespace=‘UNDOTBS1‘
[oracle@localhost dbs]$ cd/oracle/oradata
[oracle@localhost oradata]$ mkdir smn
[oracle@localhost oradata]$ ll
total 8 drwxr-x---. 2 oracle oinstall 4096 Aug 27 09:21 orcl drwxr-xr-x. 2 oracle oinstall 4096 Aug 28 12:13 smn
[oracle@localhost dbs]$ mkdir/oracle/flash_recovery_area/smn/
[oracle@localhost ~]$ mkdir/oracle/oradata/smn/archive
# 创建archive目录
[oracle@localhost oradata]$ mkdir/oracle/admin/smn/
[oracle@localhost ~]$ cd/oracle/admin/
[oracle@localhost admin]$ ll
total 8 drwxr-x---. 5 oracle oinstall 4096 Aug 5 18:24 orcl drwxr-xr-x. 2 oracle oinstall 4096 Aug 28 12:33 smn
[oracle@localhost admin]$ cp -Rorcl/* smn
# 将orcl目录下的子目录都复制到smn下
[oracle@localhost admin]$ cdsmn
[oracle@localhost smn]$ ll
total 20 drwxr-x---. 2 oracle oinstall 12288 Aug 28 12:41 adump drwxr-x---. 2 oracle oinstall 4096 Aug 28 12:41 dpdump drwxr-x---. 2 oracle oinstall 4096 Aug 28 12:41 pfile
[oracle@localhost smn]$ rm -fadump/*
[oracle@localhost smn]$ rm -fdpdump/*
[oracle@localhost smn]$ rm -fpfile/*
# 删除上述三个子目录中原有的文件
======准备创建数据库用的脚本======
由于真正使用的创建数据库命令很长,如果直接在命令行中输入,很容易出错,因此建议先将这个命令编写成一个脚本,然后执行:
[oracle@localhost dbs]$ vimcrdb01.sql
spool dbcreate.log -- 将以下执行的语句输出到dbcreate.log这个文件中 CREATE DATABASE "smn" MAXDATAFILES500 MAXINSTANCES 8 MAXLOGFILES 32 CHARACTER SET"UTF8" NATIONALCHARACTER SET AL16UTF16 ARCHIVELOG SYSAUX DATAFILE ‘/oracle/oradata/smn/system01.dbf‘ SIZE 300M EXTENTMANAGEMENT LOCAL DEFAULTTEMPORARY TABLESPACE temp TEMPFILE ‘/oracle/oradata/smn/tempts01.dbf‘ SIZE 100M EXTENTMANAGEMENT LOCAL UNDOTABLESPACE "UNDOTBS1" DATAFILE‘/oracle/oradata/smn/undotbs01.dbf‘ SIZE 200M LOGFILE GROUP 1 ( ‘/oracle/oradata/smn/redo01a.rdo‘, ‘/oracle/oradata/smn/redo01b.rdo‘ ) SIZE 100M, GROUP 2 ( ‘/oracle/oradata/smn/redo02a.rdo‘, ‘/oracle/oradata/smn/redo02b.rdo‘ ) SIZE 100M, GROUP 3 ( ‘/oracle/oradata/smn/redo03a.rdo‘, ‘/oracle/oradata/smn/redo03b.rdo‘ ) SIZE 100M ; Spool off;
上述脚本需要和数据库的初始化参数文件中列出的数值一一对应,比如在PFILE中undo_tablespace=‘UNDOTBS1‘,那么,在CREATEDATABASE的脚本中,就需要指明UNDO TABLESPACE"UNDOTBS1"。这些细节需要十分小心,否则数据库创建会失败。
CREATE DATABASE语句的更多用法细节,可以查询联机文档中SQLReference相关章节的内容。
========创建环境变量========
[oracle@localhost dbs]$ vimsmn.env
ORACLE_BASE=/oracle ORACLE_HOME=$ORACLE_BASE/11g ORACLE_SID=smn ORACLE_NLS33=$ORACLE_HOME/nls/data PATH=$ORACLE_HOME/bin:$PATH LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH export ORACLE_BASE ORACLE_HOME ORACLE_SID ORACLE_NLS33 PATHLD_LIBRARY_PATH
[oracle@localhost dbs]$ chmod+x smn.env
[oracle@localhost dbs]$ ../smn.env
[oracle@localhost dbs]$ env |grep ORAC
ORACLE_NLS33=/oracle/11g/nls/data ORACLE_SID=smn ORACLE_BASE=/oracle ORACLE_HOME=/oracle/11g
======执行创建数据库用的脚本======
[oracle@localhost dbs]$ sqlplus/nolog
SQL*Plus: Release 11.2.0.1.0 Production on Tue Sep 915:34:09 2014 Copyright (c) 1982, 2009, Oracle. All rights reserved.
SQL> conn / as sysdba
Connected to an idle instance.
SQL> create spfile frompfile;
File created.
SQL> startup nomount
ORACLE instance started. Total System Global Area 422670336 bytes Fixed Size 1336960 bytes Variable Size 318769536 bytes Database Buffers 96468992 bytes Redo Buffers 6094848 bytes
SQL>@$ORACLE_HOME/dbs/crdb01.sql;
-- 使用@加上路径和脚本的名字,就可以执行sql脚本了 Database created.
[oracle@localhost ~]$ cd/oracle/admin/smn
[oracle@localhost smn]$ ls
adump dpdump pfile
[oracle@localhost smn]$ lsadump
smn_ora_14093_1.aud smn_ora_14201_2.aud smn_ora_14430_1.aud smn_ora_14513_1.aud smn_ora_14201_1.aud smn_ora_14303_1.aud smn_ora_14430_2.aud
[oracle@localhost ~]$ cd/oracle/oradata/smn
[oracle@localhost smn]$ ls
archive redo01a.rdo redo02a.rdo redo03a.rdo system01.dbf undotbs01.dbf control01.ctl redo01b.rdo redo02b.rdo redo03b.rdo tempts01.dbf # 已经创建了很多文件
=======创建额外的表空间=======
出于安全性和实用性考虑,用户可以创建额外的表空间,只需要执行CREATETABLESPACE 语句就可以了:
SQL> CREATE TABLESPACEmytbs
2 DATAFILE ‘/oracle/oradata/smn/mytbs01.dbf‘ SIZE 100M
3 EXTENT MANAGEMENT LOCAL;
Tablespace created. -- 创建了此表空间以后,可以将数据存放在该空间里
[oracle@localhost dbs]$ cd/oracle/oradata/smn
[oracle@localhost smn]$ ls
archive mytbs01.dbf redo01b.rdo redo02b.rdo redo03b.rdo tempts01.dbf # 可以看到刚刚创建的表空间mytbs01.dbf control01.ctl redo01a.rdo redo02a.rdo redo03a.rdo system01.dbf undotbs01.dbf
=======创建数据字典=========
没有数据字典的数据库是无法使用的,因此这一步是必须的:
[oracle@localhost ~]$ cd/oracle/11g/rdbms/admin
[oracle@localhost admin]$ ls
a0902000.sql dbmshtdb.sql owmricb.plb prvtmetd.plb ... catalog.sql catproc.sql
[oracle@localhost ~]$ cd/oracle/11g/sqlplus
[oracle@localhost admin]$ ls
afiedt.buf glogin.sql help libsqlplus.def plustrce.sql pupbld.sql
SQL> spool log1.1
-- 用来记录执行过程
SQL>@?/rdbms/admin/catalog.sql
-- 执行第一个脚本
... PL/SQL procedure successfully completed. TIMESTAMP -------------------------------------------------------------------------------- COMP_TIMESTAMP CATALOG 2014-09-09 17:01:14
SQL> spool log2.log
SQL>@?/rdbms/admin/catproc.sql
... PL/SQL procedure successfully completed.
SQL> spool log3.log
SQL> @?/sqlplus/admin/pupbld.sql;
SQL> -- End of pupbld.sql
创建过程中会出现一些ERROR,这通常是因为脚本中会先删除某个表再创建一个表,而第一次运行时表并不存在,所以那些ERROR是正常的。
[oracle@localhost dbs]$ vimlog2.log
DROP TYPE kupc$_mastererror FORCE * ERROR at line 1: ORA-04043: object KUPC$_MASTERERROR does not exist
======检验数据库是否可以正常工作=======
[oracle@localhost dbs]$ env |grep ORA
ORACLE_NLS33=/oracle/11g/nls/data ORACLE_SID=smn ORACLE_BASE=/oracle ORACLE_HOME=/oracle/11g
[oracle@localhost dbs]$ sqlplus/nolog
SQL*Plus: Release 11.2.0.1.0 Production on Tue Sep 917:23:07 2014 Copyright (c) 1982, 2009, Oracle. All rights reserved.
SQL> conn / as sysdba
Connected to an idle instance.
SQL> startup
ORACLE instance started. Total System Global Area 422670336 bytes Fixed Size 1336960 bytes Variable Size 322963840 bytes Database Buffers 92274688 bytes Redo Buffers 6094848 bytes Database mounted. Database opened. -- 正常启动数据库
SQL> select * from dual;
D - X -- 能够执行查询语句
SQL> desc dba_objects;
Name Null? Type ------------------------------------------------- -------------------- OWNER VARCHAR2(30) OBJECT_NAME VARCHAR2(128) SUBOBJECT_NAME VARCHAR2(30) OBJECT_ID NUMBER DATA_OBJECT_ID NUMBER OBJECT_TYPE VARCHAR2(19) CREATED DATE LAST_DDL_TIME DATE TIMESTAMP VARCHAR2(19) STATUS VARCHAR2(7) TEMPORARY VARCHAR2(1) GENERATED VARCHAR2(1) SECONDARY VARCHAR2(1) NAMESPACE NUMBER EDITION_NAME VARCHAR2(30) -- 能够查询表结构
SQL> Create tabletestb1(id integer, name char(10));
Table created. --能够创建表
SQL> insert into testb1values(0, ‘smn‘);
1 row created. -- 能够插入数据
SQL> select * from testb1;
ID NAME ---------- ---------- 0 smn
到这里,一个完整的并可以正常工作的数据库就创建好了
根据具体的需求,还可以安装一些额外的包。
由于创建数据库的过程非常繁琐,且有大量的初始化参数需要设置,为了简化操作,ORACLE提供了OMF特性,预设了很多参数帮助安装。
在创建数据库过程中可能会出现很多问题,需要自行查询联机文档和日志文件,来排查错误。
当数据库建立好以后,需要修改初始化密码,其中SYS用户的缺省密码是change_on_install,
SYSTEM用户的缺省密码是manager。
本文出自 “重剑无锋 大巧不工” 博客,请务必保留此出处http://wuyelan.blog.51cto.com/6118147/1555388
10_Oracle_Admin_手动创建一个比较实用的数据库