zoukankan      html  css  js  c++  java
  • Oracle管理与维护.手工创建数据库以及脚本

     Oracle管理与维护.手工创建数据库以及脚本


    一、前言

     说实话,早已厌倦了使用dbca的创建数据库,大概比较有点作用的是可以生成创建脚本罢。
    《Oracle管理与维护.安装创建启动关闭数据库的常见问题(一)》(三、创建数据库)一文中有所提及。本文主要就是详述手
    工使用脚本创建Oracle 10g数据库。

    二、安装Oracle 10g软件

     操作系统环境:
     
     [root@liwei root]# uname -a
     Linux liwei 2.4.20-8 #1 Thu Mar 13 17:54:28 EST 2003 i686 i686 i386 GNU/Linux
     
     [root@liwei root]#  cat /etc/redhat-release
     Red Hat Linux release 9 (Shrike)
     
     虚拟机:
     
     VMware WorkStation 6.0.3 build-80004
     
     安装略过,注意三点:
     
     a.修改Disk1/install/oraparam.ini 见
     《虚拟机VMware安装OracleRAC.RedHat Enterprise AS4安装Oracle 9206 Patch》一文<问题二>
     b.只安装软件不创建数据库
     c.须安装libaio-0.3.93-4.i386.rpm(redhat9 第二张盘),否则提示如下错误信息
     
     [oracle@liwei liwei]$ sqlplus /nolog
     
     SQL*Plus: Release 10.2.0.1.0 - Production on Sat Apr 26 05:47:54 2008
     
     Copyright (c) 1982, 2005, Oracle.  All rights reserved.
     
     SQL> conn / as sysdba
     oracleliwei: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory
     ERROR:
     ORA-12547: TNS:lost contact

    redhat 9 第二张盘

    [root@liwei mnt]# umount cdrom
    [root@liwei mnt]# mount /dev/hdc cdrom
    mount: block device /dev/hdc is write-protected, mounting read-only
    mount: No medium found
    [root@liwei mnt]# find . -name '*aio*'
    [root@liwei mnt]# mount /dev/hdc cdrom
    mount: block device /dev/hdc is write-protected, mounting read-only
    [root@liwei mnt]# find . -name '*aio*'
    ./cdrom/RedHat/RPMS/libaio-0.3.93-4.i386.rpm
    ./cdrom/RedHat/RPMS/libaio-devel-0.3.93-4.i386.rpm
    [root@liwei mnt]# rpm -ivh libaio-0.3.93-4.i386.rpm
    error: open of libaio-0.3.93-4.i386.rpm failed: No such file or directory
    [root@liwei mnt]# rpm -ivh ./cdrom/RedHat/RPMS/libaio-0.3.93-4.i386.rpm
    warning: ./cdrom/RedHat/RPMS/libaio-0.3.93-4.i386.rpm: V3 DSA signature: NOKEY, key ID db42a60e
    Preparing...                ########################################### [100%]
       1:libaio                 ########################################### [100%]
    [root@liwei mnt]#

    三、创建密码验证文件

    orapwd file=<ORACLE_HOME>/dbs/orapw<sid> password=sys entries=10
    注意:密码文件命名与目录推荐使用Oracle默认目录,否则Oracle无法识别。笔者还没找到修
    改缺省目录的方法。

    [oracle@liwei liwei]$ orapwd file=/oracle/db/dbs/orapwliwei password=sys entries=10


    [oracle@liwei liwei]$ orapwd
    Usage: orapwd file=<fname> password=<password> entries=<users> force=<y/n>

      where
        file - name of password file (mand),
        password - password for SYS (mand),
        entries - maximum number of distinct DBA and     force - whether to overwrite existing file (opt),
    OPERs (opt),
      There are no spaces around the equal-to (=) character.

    四、创建初始化参数文件

    注意:笔者单独创建目录/oracle/data/liwei用于存放数据库相关的所有文件

    创建initliwei.ora文件,内容如下:

    *.compatible='10.2.0.1.0'
    *.db_domain=''
    *.db_name='liwei'
    *.db_block_size=8192
    *.db_file_multiblock_read_count=32
    *.dispatchers='(PROTOCOL=TCP) (SERVICE=liwei)'
    *.job_queue_processes=10
    *.open_cursors=100
    *.processes=150
    *.sessions=200

    *.remote_login_passwordfile='EXCLUSIVE'
    *.star_transformation_enabled='TRUE'
    *.undo_management='AUTO'
    *.undo_tablespace='UNDOTBS1'

    *.sga_target=134217728
    *.pga_aggregate_target=10485760
    *.db_cache_size=10485760
    *.java_pool_size=1048576
    *.large_pool_size=1048576
    *.shared_pool_size=67108864
    *.streams_pool_size=0

    *.audit_file_dest='/oracle/data/liwei/audit_file_dest'
    *.background_dump_dest='/oracle/data/liwei/background_dump_dest'
    *.core_dump_dest='/oracle/data/liwei/core_dump_dest'
    *.user_dump_dest='/oracle/data/liwei/user_dump_dest'
    *.control_files='/oracle/data/liwei/control/CONTROL01.CTL','/oracle/data/liwei/control/CONTROL02.CTL','/oracle/data/liwei/control/CONTROL03.CTL'
    *.db_recovery_file_dest='/oracle/data/liwei/db_recovery_file_dest'
    *.db_recovery_file_dest_size=104857600

    SQL> startup pfile=/oracle/data/liwei/initliwei.ora nomount
    ORACLE instance started.

    Total System Global Area  134217728 bytes
    Fixed Size                  1218124 bytes
    Variable Size              75499956 bytes
    Database Buffers           54525952 bytes
    Redo Buffers                2973696 bytes
    SQL>

    注意:

    1.共享池不能太小
    2.最后系列目录必须提前建好
    3.具体参数含义可参考Oracle在线文档

    以下列出一些参数设置错误后的提示:

     SQL> conn / as sysdba
     Connected to an idle instance.
     
     SQL> startup pfile=/oracle/data/liwei/initliwei.ora nomount
     ORA-09925: Unable to create audit trail file
     Linux Error: 2: No such file or directory
     Additional information: 9925
      原因:audit_file_dest参数对应的目录没有
     
     SQL> startup pfile=/oracle/data/liwei/initliwei.ora nomount
     ORA-07446: sdnfy: bad value '/oracle/data/liwei/user_dump_dest' for parameter user_dump_dest.
      原因:user_dump_dest参数对应的目录没有
     
     SQL> startup pfile=/oracle/data/liwei/initliwei.ora nomount
     ORA-01261: Parameter db_recovery_file_dest destination string cannot be translated
     ORA-01262: Stat failed on a file destination directory
     Linux Error: 2: No such file or directory
      原因:db_recovery_file_dest参数对应的目录没有
     
     SQL> startup pfile=/oracle/data/liwei/initliwei.ora nomount
     ORA-04031: unable to allocate 2048 bytes of shared memory ("shared pool","unknown object","sga heap(1,0)","library cache")
      原因:shared_pool_size设置太小
     
     SQL>  startup pfile=/oracle/data/liwei/initliwei.ora nomount
     ORA-00821: Specified value of sga_target 52M is too small, needs to be at least 56M
      原因:shared_pool_size与sga_target大小不匹配
     
     SQL> startup pfile=/oracle/data/liwei/initliwei.ora nomount
     ORA-00444: background process "MMAN" failed while starting
     ORA-07446: sdnfy: bad value '' for parameter .
      原因:shared_pool_size相关设置有误
     

    五、创建数据库


    create database liwei
    maxinstances 4
    maxloghistory 2
    maxlogfiles 16
    maxlogmembers  2
    maxdatafiles 8
    character set zhs16gbk
    national character set al16utf16
    datafile '/oracle/data/liwei/oradata/system.dbf' size 20m autoextend on next 1m maxsize unlimited
    sysaux datafile '/oracle/data/liwei/oradata/sysaux.dbf' size 20m autoextend on next 1m maxsize unlimited
    default temporary tablespace temp tempfile '/oracle/data/liwei/oradata/temp.dbf' size 20m extent management local uniform size 32k
    undo tablespace undotbs1 datafile '/oracle/data/liwei/oradata/undotbs1.dbf' size 20m
    logfile
    group 1 ('/oracle/data/liwei/oradata/redo0101.dbf') size 10m reuse,
    group 2 ('/oracle/data/liwei/oradata/redo0201.dbf') size 10m reuse;

    具体过程如下:

    [oracle@liwei liwei]$ sqlplus /nolog

    SQL*Plus: Release 10.2.0.1.0 - Production on Thu May 1 09:13:10 2008

    Copyright (c) 1982, 2005, Oracle.  All rights reserved.

    SQL> conn / as sysdba
    Connected to an idle instance.
    SQL> startup pfile=/oracle/data/liwei/initliwei.ora nomount
    ORACLE instance started.

    Total System Global Area  134217728 bytes
    Fixed Size                  1218124 bytes
    Variable Size              75499956 bytes
    Database Buffers           54525952 bytes
    Redo Buffers                2973696 bytes
    SQL>
    SQL> create database liwei
      2  maxinstances 4
      3  maxloghistory 2
      4  maxlogfiles 16
      5  maxlogmembers  2
      6  maxdatafiles 8
      7  character set zhs16gbk
      8  national character set al16utf16
      9  datafile '/oracle/data/liwei/oradata/system.dbf' size 20m autoextend on next 1m maxsize unlimited
     10  sysaux datafile '/oracle/data/liwei/oradata/sysaux.dbf' size 20m autoextend on next 1m maxsize unlimited
     11  default temporary tablespace temp tempfile '/oracle/data/liwei/oradata/temp.dbf' size 20m extent management local uniform size 32k
     12  undo tablespace undotbs1 datafile '/oracle/data/liwei/oradata/undotbs1.dbf' size 20m
     13  logfile
     14  group 1 ('/oracle/data/liwei/oradata/redo0101.log') size 10m reuse,
    group 2 ('/oracle/data/liwei/oradata/redo0201.log') size 10m reuse; 15 

    Database created.

    SQL>

    此时可以连接数据库(通过system/manager),但不能通过sqlplus  "sys/change_on_install@unixdb
    as sysdba"进行连接,创建后短时会有不能解析服务名的提示,但没有任何数据库的内部字典与
    视图。

    创建数据库后,如果须要删除重新创建,方法有二。
    1、可删除对应目录的数据库文件(/oracle/data/liwei/oradata)重新create database即可。
    2、Oracle 10g新提供了drop database的功能。

    [oracle@liwei oradata]$ sqlplus /nolog

    SQL*Plus: Release 10.2.0.1.0 - Production on Thu May 1 09:07:17 2008

    Copyright (c) 1982, 2005, Oracle.  All rights reserved.

    SQL> conn / as sysdba
    Connected to an idle instance.
    SQL>  startup restrict exclusive mount;
    ORA-01078: failure in processing system parameters
    LRM-00109: could not open parameter file '/oracle/db/dbs/initliwei.ora'
    SQL> startup pfile=/oracle/data/liwei/initliwei.ora restrict exclusive mount;
    ORACLE instance started.

    Total System Global Area  134217728 bytes
    Fixed Size                  1218124 bytes
    Variable Size              75499956 bytes
    Database Buffers           54525952 bytes
    Redo Buffers                2973696 bytes
    Database mounted.
    SQL> drop database;

    Database dropped.

    Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
    With the Partitioning, OLAP and Data Mining options
    SQL>


    六、创建数据库内部对象

    脚本说明
    catalog.sql 创建系统常用的数据字典视图和同义词

     SQL>@ ?/rdbms/admin/catalog.sql;
     
     数据库内部表和视图已创建,但唯一缺少表空间相关视图,可以创建表空间
     但PLSQL会提示SYS.DBMS_OUTPUT之类包体未定义。

    脚本说明
    catproc.sql 运行服务器端所需要的PL/SQL脚本

     SQL>@ ?/rdbms/admin/catproc.sql;
      创建服务端所需要的PL/SQL脚本,创建系统包与函数,创建表空间相关视图字典。


    脚本catalog.sql和catproc.sql 是创建数据库后必须要运行的两个脚本。

    其中这类脚本也调用了其他脚本:
    standard.sql Load PL/SQL Package STANDARD first, so views can depend upon it
    catcdc.sql change data capture views
    cataudit.sql Auditing views
    catexp.sql Import/export views
    catldr.sql Loader views
    catpart.sql Partitioning views
    catadt.sql Object views
    catsum.sql Summary views
    catxtb.sql External Table views
    catexp7.sql Create v7 style export/import views against the v8 RDBMS, so that EXP/IMP v7 can be used to read out data in a v8 RDBMS
    catblock.sql create views of oracle locks
    catproc.sql Run all sql scripts for the procedural option
    catoctk.sql Contains scripts needed to use the PL/SQL Cryptographic Toolkit
    catobtk.sql Contains scripts needed to use the PL/SQL Obfuscation Toolkit
    caths.sql Create Heterogeneous Services data dictionary objects
    owminst.plb this package containa all the functions and procedures that need to be fun under the SYS user privilege ---this package has definers rights. So ,all the procedures which modify system tables live in this package.
    pubbld.sql Script to install the SQL*Plus PRODUCT_USER_PROFILE tables. These tables allow SQL*Plus to disable commands per user. The tables are used only by SQL*Plus and do not affect other client tools- that access the database. Refer to the SQL*Plus manual for table usage information.

    -- This script should be run on every database that SQL*Plus connects to, even if the tables are not used to restrict commands.
    -- USAGE -- Connect as sysdba before running this script


    七、自动建库说明

     dbca可以生成建库脚本,这个功能十分有用,不过需要提示的是,创建数据库会出现各类问题,解决
    思路如下:
     
     1.$ORACLE_HOME/cfgtoollogs 查看dbca日志
     2.dbca生成建库脚本,并对脚本进行手工修改,便于测试跟踪
     3.手工执行建库脚本进行跟踪
     
     如:ORA-01092: ORACLE instance terminated. Disconnection forced 其实根源问题在于create
     database 语句的参数 EXTENT MANAGEMENT LOCAL 有误,去掉此内容即可。以下是错误重
     现示例。

     [oracle@liwei scripts]$ sh test.sh
     You should Add this entry in the /etc/oratab: test:/oracle/db:Y
     
     SQL*Plus: Release 10.2.0.1.0 - Production on Thu May 1 14:19:57 2008
     
     Copyright (c) 1982, 2005, Oracle.  All rights reserved.
     
     specify a password for sys as parameter 1
     Enter value for 1: test
     specify a password for system as parameter 2
     Enter value for 2: test
     
     Connected to an idle instance.
     SQL> spool /oracle/admin/test/scripts/CreateDB.log
     SQL> startup nomount pfile="/oracle/admin/test/scripts/init.ora";
     ORACLE instance started.
     
     Total System Global Area  167772160 bytes
     Fixed Size                  1218316 bytes
     Variable Size              62916852 bytes
     Database Buffers          100663296 bytes
     Redo Buffers                2973696 bytes
     SQL> CREATE DATABASE "test"
       2  MAXINSTANCES 8
       3  MAXLOGHISTORY 1
       4  MAXLOGFILES 16
       5  MAXLOGMEMBERS 3
       6  MAXDATAFILES 100
       7  DATAFILE '/oracle/oradata/test/system01.dbf' SIZE 20M REUSE AUTOEXTEND ON NEXT     10240K MAXSIZE UNLIMITED
       8  EXTENT MANAGEMENT LOCAL
       9  SYSAUX DATAFILE '/oracle/oradata/test/sysaux01.dbf' SIZE 20M REUSE AUTOEXTEND ON NEXT  10240K MAXSIZE UNLIMITED
      10  SMALLFILE DEFAULT TEMPORARY TABLESPACE TEMP TEMPFILE '/oracle/oradata/test/temp01.dbf' SIZE 20M REUSE AUTOEXTEND ON NEXT  640K MAXSIZE UNLIMITED
      11  SMALLFILE UNDO TABLESPACE "UNDOTBS1" DATAFILE '/oracle/oradata/test/undotbs01.dbf' SIZE 20M REUSE AUTOEXTEND ON NEXT  5120K MAXSIZE UNLIMITED
      12  CHARACTER SET WE8ISO8859P1
      13  NATIONAL CHARACTER SET AL16UTF16
      14  LOGFILE GROUP 1 ('/oracle/oradata/test/redo01.log') SIZE 25600K,
      15  GROUP 2 ('/oracle/oradata/test/redo02.log') SIZE 25600K
      16  USER SYS IDENTIFIED BY "&&sysPassword" USER SYSTEM IDENTIFIED BY "&&systemPassword";
     CREATE DATABASE "test"
     *
     ERROR at line 1:
     ORA-01092: ORACLE instance terminated. Disconnection forced
     
     可见手工建库才是最为重要而又实用的方法,即所谓的“王道”。

    八、创建测试使用用户与表空间等对象
     
     示例语句:

     create tablespace usertest datafile '/oracle/data/liwei/oradata/usertest.dbf' size 100m uniform size 64k;
     create user test identified by test default tablespace usertest;
     grant create session to test;
     grant create table to test;
     alter user test quota unlimited  on usertest;
     create table test.student_info
     (
     student_id number(10),
     student_name varchar2(20),
     student_note varchar2(10)
     );
     select * from test.student_info;
     insert into test.student_info values (0,'TEST','note');
     commit;

    九、下文提示

     下文着重讨论Oracle的身份登录与验证问题,如下类问题:

     [oracle@liwei oracle]$ sqlplus / as sysdba
     
     SQL*Plus: Release 10.2.0.1.0 - Production on Thu May 1 14:51:59 2008
     
     Copyright (c) 1982, 2005, Oracle.  All rights reserved.
     
     ERROR:
     ORA-01031: insufficient privileges


     [oracle@liwei oracle]$ sqlplus sys/test@unixdb as sysdba
     
     SQL*Plus: Release 10.2.0.1.0 - Production on Thu May 1 14:52:52 2008
     
     Copyright (c) 1982, 2005, Oracle.  All rights reserved.
     
     ERROR:
     ORA-01017: invalid username/password; logon denied
     
     
     C:/Documents and Settings/Administrator>sqlplus  "system/manager@unixdb as sysdba"
     
     SQL*Plus: Release 9.2.0.1.0 - Production on Mon May 5 12:42:59 2008
     
     Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.
     
     ERROR:
     ORA-01031: insufficient privileges

  • 相关阅读:
    .Net学习难点讨论系列2 – 细说C#中new关键字与多态
    [翻译]搜索关键字 – 管道与过滤器模式(PipesandFilters)与装饰模式(Decorator)之间的关系
    .Net学习难点讨论系列1 – 委托与事件之事件
    [翻译]Popfly系列课程1 Popfly课程计划概览
    常用桌面虚拟化软件横向对比
    各种算法的C#实现系列1 合并排序的原理及代码分析
    博客园安家
    疑:Microsoft® Silverlight™ Tools for Visual Studio 2008 SP1的版本让人困惑
    stream_socket_client
    stream_socket_client2
  • 原文地址:https://www.cnblogs.com/sopost/p/2190148.html
Copyright © 2011-2022 走看看