您的位置:首页 > 数据库 > Oracle

10_Oracle_Admin_手动创建一个比较实用的数据库

2014-09-20 00:17 609 查看
上一节中手动创建数据库由于参数太过简单,且没有安装数据字典,是无法实际应用的,本章节是对上节内容的深入,增加了很多细节和参数配置,按照以下步骤,可以成功安装一个能实际使用的数据库。

======清理现有数据库文件======
[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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: