實例10g

#!/bin/ksh

# shell script for setup 'zxin' database
# date: 2006/12/31

prepdbfilename_fs()
{
    oraf_root=/zxindata
    if [ `uname` = "Linux" ]
    then
        ora_arch=/zxinbak/arch
    else
        ora_arch=$oraf_root/zxinbak/arch
    fi

    _controlfile01=$oraf_root/oracle/control/control01.ctl
    _controlfile02=$oraf_root/oracle/control/control02.ctl
    _controlfile03=$oraf_root/oracle/control/control03.ctl

    _system_tbf=$oraf_root/oracle/system/system.dbf      # size = 512M
    _sysaux_tbf=$oraf_root/oracle/system/sysaux.dbf
    _users_tbf=$oraf_root/oracle/system/users.dbf
    _temp_tbf=$oraf_root/oracle/system/temp.dbf
    _undo_tbf=$oraf_root/oracle/system/undo.dbf

    if [ `uname` = "AIX" ]
    then
    _rredolog01=/dev/roraredo01
    _rredolog02=/dev/roraredo02
    _rredolog03=/dev/roraredo03
    elif [ `uname` = "HP-UX" ]
    then
    _rredolog01=/dev/zxinvg/roraredo01
    _rredolog02=/dev/zxinvg/roraredo02
    _rredolog03=/dev/zxinvg/roraredo03
    else
    _rredolog01=/dev/roraredo01
    _rredolog02=/dev/roraredo02
    _rredolog03=/dev/roraredo03
    fi

    _redolog01=$oraf_root/oracle/redolog/redo01.log       # size = 250M
    _redolog02=$oraf_root/oracle/redolog/redo02.log
    _redolog03=$oraf_root/oracle/redolog/redo03.log

    [ -d $oraf_root/oracle/redolog ] || mkdir -p $oraf_root/oracle/redolog
    if [ -c $_rredolog01 ]
    then
        chown oracle:dba $_rredolog01
     [ -h $_redolog01 ] || ln -s $_rredolog01 $_redolog01
    else
     _redolog01=$oraf_root/oracle/redolog/redo01.dbf
    fi
    if [ -c $_rredolog02 ]
    then
     chown oracle:dba $_rredolog02
     [ -h $_redolog02 ] || ln -s $_rredolog02 $_redolog02
    else
     _redolog02=$oraf_root/oracle/redolog/redo02.dbf
    fi
    if [ -c $_rredolog03 ]
    then
     chown oracle:dba $_rredolog03
     [ -h $_redolog03 ] || ln -s $_rredolog03 $_redolog03
    else
     _redolog03=$oraf_root/oracle/redolog/redo03.dbf
    fi

    [ ! -d ${ORACLE_BASE}/zxin ] && mkdir -p ${ORACLE_BASE}/zxin
    for f in $oraf_root $oraf_root/oracle $ora_arch
    do
        [ -d $f ] || mkdir -p $f
    done

    chmod -R 775 $ora_arch

    for f in $_controlfile01 $_controlfile02 $_controlfile03 /
        $_system_tbf $_sysaux_tbf $_users_tbf $_undo_tbf
    do
        f=`dirname $f`
        [ ! -d $f -a ! -z $f ] && mkdir -p $f
    done

}

objsize()
{
    _the_size=0
    case $1 in
        control)_the_size=128M
            ;;
        system)_the_size=512M
            ;;
        sysaux)_the_size=512M
            ;;
        users)_the_size=512M
            ;;
        temp)_the_size=512M
            ;;
        undo)_the_size=2048M
            ;;
        redo|redolog)_the_size=250M
            ;;
    esac

    echo $_the_size

}

memsize()
{
    unset LANG
    _memsize_=0
    case `uname` in
        AIX)
            for _memb_ in  `lsdev -Ccmemory|awk '$NF~/Memory/&&$2~/Available/{print $1}'`
            do
                _memb_size=`lsattr -El $_memb_ -a size|awk '{print $2}'`
                _memsize_=`expr $_memsize_ + $_memb_size`
            done           
            ;;
        HP-UX)
            hpux_release=`uname -r |awk -F"." '{print $3}'`
            if [ $hpux_release -lt 23 ]
            then
                _memsize_=`echo "memory_installed_in_machine/D" | adb -k /stand/vmunix /dev/kmem |tail -1 | awk '$2 > 0 { print $2 / 256 }'`           
            else
                _memsize_=`echo "phys_mem_pages/2d" |adb /stand/vmunix /dev/kmem |tail -1 | awk '$2 > 0 { print $2 / 256 }'`
                _memsize_=`echo "$_memsize_" |awk -F"." '{print $1}'`
            fi
            ;;
        Linux)
            _memsize_=`cat /proc/meminfo |grep MemTotal |awk '{print $2}'`
            _memsize_=`expr $_memsize_ / 1024`           
            ;;
        SunOS)
            _memsize_=`prtconf |grep "Memory size"|awk '{print $3}'`           
            ;;
        *)
            echo "Not supported operating system, exit!"
            exit
            ;;
    esac
   
    if [ -z "$_memsize_" ]
    then
        echo "failed to get memory size, exit!"
        exit
    elif [ "$_memsize_" = "0" ]
    then
        echo "failed to get memory size, exit!"
        exit
    fi
    return $_memsize_
}

## use this to replace "expr" in 32-bit OS -- when the result is more than 2^32
calculate()
{
bc << @@
    ${1}
@@
    return
}

prepdbinitfile()
{
    [ -d ${ORACLE_BASE}/zxin/define ] || mkdir -p ${ORACLE_BASE}/zxin/define
   
    memsize;
    ##sga_target equal $_memsize_ * 40%, max limit: 1700M(Linux)  2G(Other OS)   
    sga_target=`calculate $_memsize_*4/10`
    if [ `uname` = "Linux" ]
    then
        [ ${sga_target} -gt 1600 ] && sga_target=1600
    else
        [ ${sga_target} -gt 2048 ] && sga_target=2048
    fi
    pga_aggregate_target=`calculate ${sga_target}/4`
   
    if [ ${sga_target} -ge 800 ]
    then
        db_cache_size=400
        shared_pool_size=200
    elif [ ${sga_target} -ge 400 ]
    then
        db_cache_size=200
        shared_pool_size=100
    else
        db_cache_size=100
        shared_pool_size=64
    fi
   

    cat << EOF > ${ORACLE_BASE}/zxin/define/initzxin.ora
##############################################################################
# Copyright (c) 1991, 2001, 2002 by Oracle Corporation
##############################################################################

###########################################
# Database Identification
###########################################
db_domain=""
db_name=zxin
 
###########################################
# Instance Identification
###########################################
instance_name=zxin

###########################################
# File Configuration
###########################################
control_files=("${_controlfile01}",
               "${_controlfile02}",
               "${_controlfile03}")
 
###########################################
# Cache and I/O
###########################################
db_block_size=8192
db_file_multiblock_read_count=16
 
###########################################
# SGA Memory
###########################################
sga_max_size=${sga_target}M
sga_target=${sga_target}M
db_cache_size=${db_cache_size}M
shared_pool_size=${shared_pool_size}M
 
###########################################
# Sort, Hash Joins, Bitmap Indexes
###########################################
pga_aggregate_target=${pga_aggregate_target}M
 
###########################################
# Cursors and Library Cache
###########################################
open_cursors=500

###########################################
# Processes and Sessions
###########################################
processes=200

###########################################
# Job Queues
###########################################
job_queue_processes=10
 
###########################################
# Archive
###########################################
log_archive_format=%t_%s_%r.dbf
log_archive_dest_1='location=${ora_arch} reopen=30'

###########################################
# Diagnostics and Statistics
###########################################
background_dump_dest=${ORACLE_BASE}/admin/zxin/bdump
core_dump_dest=${ORACLE_BASE}/admin/zxin/cdump
user_dump_dest=${ORACLE_BASE}/admin/zxin/udump
max_dump_file_size=512M

###########################################
# Security and Auditing
###########################################
audit_file_dest=${ORACLE_BASE}/admin/zxin/adump
remote_login_passwordfile=NONE
 
###########################################
# System Managed Undo and Rollback Segments
###########################################
undo_management=AUTO
undo_tablespace=UNDOTBS1
 
###########################################
# Miscellaneous
###########################################
compatible=10.2.0.1.0
UTL_FILE_DIR = "$HOME"

EOF
    [ -f ${ORACLE_BASE}/zxin/define/initzxin.ora ] && rm ${ORACLE_HOME}/dbs/initzxin.ora >/dev/null 2>&1
    ln -s ${ORACLE_BASE}/zxin/define/initzxin.ora ${ORACLE_HOME}/dbs/initzxin.ora
}

choose_character_set()
{
    echo "======================================================"
    echo "Now two types of database character set are supported:"
    echo "1: ZHS16GBK (commonly used to support Chinese Language)"
    echo "2: UTF8 (commonly used to support Non-Chinese Language)"
    echo "9: other character set(you can customize character set)"
    echo "======================================================"
    echo "Which one do you prefer, input your choice: [1]"
   
    while read user_answer
    do
        case $user_answer in
            1|"")  choosed_character_set=ZHS16GBK
                break
                ;;
            2)  choosed_character_set=UTF8
                break
                ;;
            9)  echo "please input your database character set:"
                read charset
                choosed_character_set=$charset
                break
                ;;
            *)  echo "Invalid arguments, exit!"
                exit
                ;;
        esac
    done
    echo "You have choosed ${choosed_character_set} as database character set, continue(y/n)?"
    read user_answer
    case $user_answer in
        y|Y) echo "begin to create database..."
             ;;
        *)   echo "exit the installation!"
             exit
             ;;
    esac
}

#
# step 0

if [ $LOGNAME != "oracle" -o "X$ORACLE_HOME" = "x" -o "X$ORACLE_BASE" = "x" ]
then
    echo "logged user MUST as 'oracle/dba' and set ORACLE_HOME, ORACLE_BASE !"
    exit 1
fi
if [ ! -d $ORACLE_HOME ]
then
    echo "ORACLE_HOME=$ORACLE_HOME does not exist !"
    exit 1
fi
if [ ! -d $ORACLE_BASE ]
then
    echo "ORACLE_BASE=$ORACLE_BASE does not exist !"
    exit 1
fi
if [ ! -d $ORACLE_BASE/zxin ]
then
    mkdir -p $ORACLE_BASE/zxin
fi

##2007.06.22 choose database character set
choose_character_set

for f in admin admin/zxin admin/zxin/adhoc admin/zxin/arch admin/zxin/adump admin/zxin/bdump/
    admin/zxin/cdump admin/zxin/create admin/zxin/exp admin/zxin/pfile admin/zxin/udump
do
    [ -d ${ORACLE_BASE}/$f ] || mkdir -p ${ORACLE_BASE}/$f
done

chmod -R 775 ${ORACLE_BASE}

prepdbfilename_fs;
x=`hostname`
_svc_name_=${x%[0-9]}
_svc_name_=${_svc_name_%[_]}

if [ `uname` = "SunOS" ]
then
    UNIXGREP=/usr/xpg4/bin/grep
    UNIXAWK=/usr/xpg4/bin/awk
else
    UNIXGREP=grep
    UNIXAWK=awk
fi

# step 1
g_logname=`pwd`/__crdblog
ORACLE_SID=${ORACLE_SID:=zxin}

prepdbinitfile;


[ -f $ORACLE_HOME/network/admin/tnsnames.ora ] && cp $ORACLE_HOME/network/admin/tnsnames.ora $ORACLE_HOME/network/admin/tnsnames.zxinbak
cat << EOF > $ORACLE_HOME/network/admin/tnsnames.ora
# Generated by ZTE zxin10 product
# for oracle - tnsnames.ora
# date: `date`

ZXIN =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = $_svc_name_)(PORT = 1522))
    )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = zxin)
    )
  )

zx`$UNIXAWK -v y=${_svc_name_} '$1!~/^#/{if($2==y) print $1}' /etc/hosts|sed -e 's//./_/g'`=
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = $_svc_name_)(PORT = 1522))
    )
    (CONNECT_DATA =
      (SERVER       = DEDICATED)
      (SERVICE_NAME = zxin)
    )
  )

EXTPROC_CONNECTION_DATA =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
    )
    (CONNECT_DATA =
      (SID = PLSExtProc)
      (PRESENTATION = RO)
    )
  )

EOF

[ -f $ORACLE_HOME/network/admin/listener.ora ] && cp $ORACLE_HOME/network/admin/listener.ora $ORACLE_HOME/network/admin/listener.zxinbak
cat << EOF > $ORACLE_HOME/network/admin/listener.ora
# Generated by ZTE zxin10 product
# for oracle - listener.ora
# date: `date`

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS_LIST =
        (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
      )
      (ADDRESS_LIST =
        (ADDRESS = (PROTOCOL = TCP)(HOST = $_svc_name_)(PORT = 1521))
        (ADDRESS = (PROTOCOL = TCP)(HOST = $_svc_name_)(PORT = 1522))
      )
    )
  )

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = PLSExtProc)
      (ORACLE_HOME = ${ORACLE_HOME})
      (PROGRAM = extproc)
    )
    (SID_DESC =
      (GLOBAL_DBNAME = zxin)
      (ORACLE_HOME = ${ORACLE_HOME})
      (SID_NAME = zxin)
    )
  )

EOF

# step 2
$ORACLE_HOME/bin/sqlplus /nolog << EOF > ${g_logname}
spool $ORACLE_BASE/zxin/define/crdb1.log
connect / as sysdba
shutdown abort

connect / as sysdba
startup nomount pfile = $ORACLE_BASE/zxin/define/initzxin.ora
create database zxin
controlfile reuse
maxdatafiles 254
maxinstances 4
maxloghistory 32
maxlogmembers 3
maxlogfiles 12
character set ${choosed_character_set}
user sys identified by change_on_install
user system identified by manager
logfile
    group 1 ('${_redolog01}') size `objsize redolog` reuse,
    group 2 ('${_redolog02}') size `objsize redolog` reuse,
    group 3 ('${_redolog03}') size `objsize redolog` reuse
datafile '${_system_tbf}' size `objsize system` reuse
   autoextend off
   extent management local
sysaux datafile '${_sysaux_tbf}' size `objsize sysaux` reuse
default tablespace users
   datafile '${_users_tbf}' size `objsize users` reuse
   autoextend off
   extent management local
default temporary tablespace temp
   tempfile '${_temp_tbf}' size `objsize temp` reuse
   autoextend off
   extent management local uniform size 256k
undo tablespace undotbs1
   datafile '${_undo_tbf}' size `objsize undo` reuse
   autoextend off
noarchivelog;
disconnect
spool off
exit

EOF

if grep "ORA-[0-9][0-9]*" ${g_logname}
then
    echo "maybe error occured, exit."
    return
fi

# step 3

$ORACLE_HOME/bin/sqlplus /nolog << EOF >> ${g_logname}
spool $ORACLE_BASE/zxin/define/crdb2.log
connect / as sysdba
@ $ORACLE_HOME/rdbms/admin/catalog.sql
@ $ORACLE_HOME/rdbms/admin/catproc.sql
@ $ORACLE_HOME/rdbms/admin/catexp7.sql
@ $ORACLE_HOME/rdbms/admin/catblock.sql
@ $ORACLE_HOME/rdbms/admin/catoctk.sql
@ $ORACLE_HOME/rdbms/admin/utlxplan.sql
disconnect
spool off
exit

EOF

$ORACLE_HOME/bin/sqlplus /nolog << EOF >> ${g_logname}
spool $ORACLE_BASE/zxin/define/crdb3.log
connect system/manager
@ $ORACLE_HOME/sqlplus/admin/pupbld.sql
disconnect
spool off
exit

EOF

[ $HOME/oratool.sql ] &&
$ORACLE_HOME/bin/sqlplus /nolog << EOF >> ${g_logname}
spool $ORACLE_BASE/zxin/define/crdb4.log
connect / as sysdba
@ $HOME/oratool.sql
disconnect
spool off
exit
EOF

if [ "${choosed_character_set}" != "ZHS16GBK" ]
then
    echo "Because you have choosen another charset, so remember to change NLS_LANG in oracle/zxin10's profile!"
fi
echo "Creating database finished."

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章