本人原创,请勿转载:http://blog.csdn.net/ashic/article/details/46923761
##首先,这只是为了练习shell而写
大神们不屑请别看
不懂shell的可以看看,做个参考,把一些功能当做魔板
我知道linux公社等会盗转,所以提前问候你们全家了
脚本大致步骤是:
1.判断是否创建oracle用户,如果没有创建就创建,并设置密码为oracle
2.解析config.conf文件,获取用户输入的SID等等参数
3.做安装前的参数配置,创建所需目录
4.安装数据库软件,配置监听,创建实例
5.配置pfile,设置force_logging,传输数据文件到备库(没用rman duplicate,没有为什么)
6.剩下就没啥了
####其实最后写完发现所有的建库所需参数均可以自己在脚本中生成.dbt文件,但是我就不改了

#!/bin/bash
echo "#################################################"
echo "#                                               #"
echo "#                                               #"
echo "#                FaN's Script                   #"
echo "#                                               #"
echo "#                                               #"
echo "#################################################"service iptables stopSETPASSWD(){
#set password
expect -c "set timeout 2;spawn passwd oracleexpect {password { send \"oracle\r\"; exp_continue }*assword* { send \"oracle\r\" }};"
}#create user and group
cat /etc/passwd|awk -F':' '{print $1}'|grep 'oracle\>' > /dev/null
result=$?
if [ "$result" == "1" ];thenecho "user oracle does not exist,Starting to create user!"/usr/sbin/groupadd oinstall > /dev/null/usr/sbin/groupadd dba > /dev/null/usr/sbin/useradd -g oinstall -G dba -d /home/oracle oraclecat /etc/passwd|awk -F':' '{print $1}'|grep 'oracle\>' > /dev/nullresult1=$?if [ "$result1" == "0" ];thenecho "user oracle has been created"elseecho "we has a few problems during creating the user,please check!"fi
#set passwdSETPASSWD >> /dev/nullecho " The user oracle's password is set to oracle "
#chown chmod for /oraclechown oracle:oinstall /oraclechmod 755 /oraclechown oracle:oinstall /oracle/711chmod 755 /oracle/711
elif [ "$result" == "0" ];thenecho "user oracle have already been created"
fi#Parsing the config file
errParam() {echo "[ERROR] \`$1' is empty, check configfile '$configfile'"echo ""exit
}SOFTWARE_HOME=
ORACLE_SID=
INVENTORY_LOCATION=
ORACLE_BASE=
ORACLE_HOME=
DB_NAME=configfile=/oracle/711/config.conf
if [ -f $configfile ]; thenparam=$(cat $configfile | tr -d "\015" | grep -v "^#" | grep -v "^$")
elseecho "[ERROR] $configfile not found!"exit
fiwhile read i
dokey=$(echo "$i" | awk -F'=' '{print $1}')value=$(echo "$i" | awk -F'=' '{print $2}')[ "$key" == "SOFTWARE_HOME" ] && SOFTWARE_HOME=$value[ "$key" == "ORACLE_SID" ] && ORACLE_SID=$value[ "$key" == "INVENTORY_LOCATION" ] && INVENTORY_LOCATION=$value[ "$key" == "ORACLE_HOME" ] && ORACLE_HOME=$value[ "$key" == "ORACLE_BASE" ] && ORACLE_BASE=$value[ "$key" == "DB_NAME" ] && DB_NAME=$value[ "$key" == "ARCH" ] && ARCH=$value[ "$key" == "P_DB" ] && P_DB=$value[ "$key" == "P_IP" ] && P_IP=$value[ "$key" == "S_DB" ] && S_DB=$value[ "$key" == "S_IP" ] && S_IP=$value[ "$key" == "P_B_UNIQUE_NAME" ] && P_B_UNIQUE_NAME=$value[ "$key" == "S_B_UNIQUE_NAME" ] && S_B_UNIQUE_NAME=$value[ "$key" == "ctl" ] && ctl=$value
done <<< "$param"[ "x$SOFTWARE_HOME" == "x" ] && errParam SOFTWARE_HOME
[ "x$ORACLE_SID" == "x" ] && ORACLE_SID=orcl
[ "x$INVENTORY_LOCATION" == "x" ] && INVENTORY_LOCATION=/oracle/Inventory
[ "x$ORACLE_BASE" == "x" ] && ORACLE_BASE=/oracle
[ "x$ORACLE_HOME" == "x" ] && ORACLE_HOME=/oracle/db11g
[ "x$DB_NAME" == "x" ] && DB_NAME=orcl
[ "x$ARCH" == "x" ] && ARCH=/oracle/arch
[ "x$P_B_UNIQUE_NAME" == "x" ] && P_B_UNIQUE_NAME=primary
[ "x$S_B_UNIQUE_NAME" == "x" ] && S_B_UNIQUE_NAME=standbyecho
echo "#################################################"
echo "SOFTWARE_HOME is $SOFTWARE_HOME"
echo "ORACLE_SID is $ORACLE_SID"
echo "INVENTORY_LOCATION is $INVENTORY_LOCATION"
echo "ORACLE_BASE is $ORACLE_BASE"
echo "ORACLE_HOME is $ORACLE_HOME"
echo "DB_NAME is $DB_NAME"
echo "Archivelogs are in $ARCH"
#echo "Controlfiles are in $ctl"
echo "#################################################"#cont="&quot;$ctl&quot;"#调用slient_setup.sh为备库安装数据库软件
echo "starting install oracle software on standby"
expect -c "spawn ssh $S_IPexpect {yes/no { send \"yes\r\"; exp_continue }*assword* { send \"oracle\r\" }} ;expect ]# { send \"cd /oracle/711 \r\" };expect ]# { send \"sh /oracle/711/slient_setup.sh \r\" };
#          send \r;expect eof ;"set_host(){
cat >> /etc/hosts << EOF
$P_IP   $P_DB
$S_IP   $S_DB
EOF
}set_host# Set up the shell variables:
echo "EDITOR=vi" >> /home/oracle/.bash_profile
echo "export EDITOR" >> /home/oracle/.bash_profile
echo "umask 022" >> /home/oracle/.bash_profile
echo "export ORACLE_SID=$ORACLE_SID" >> /home/oracle/.bash_profile
echo "export ORACLE_BASE=$ORACLE_BASE" >> /home/oracle/.bash_profile
echo "export ORACLE_HOME=$ORACLE_HOME" >> /home/oracle/.bash_profile
echo "export PATH=$ORACLE_HOME/bin:$GRID_HOME/bin:$PATH" >> /home/oracle/.bash_profile
echo "export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$ORACLE_HOME/rdbms/lib:/lib:/usr/lib" >> /home/oracle/.bash_profile
echo "export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib:$ORACLE_HOME/network/jlib" >> /home/oracle/.bash_profile
echo "stty erase ^h" >> /home/oracle/.bash_profile#preinstall
echo "#add for database" >> /etc/sysctl.conf
echo "fs.file-max = 6815744" >> /etc/sysctl.conf
echo "net.ipv4.ip_local_port_range = 9000 65500" >> /etc/sysctl.conf
echo "net.core.rmem_max=262144" >> /etc/sysctl.conf
echo "net.core.rmem_max = 4194304" >> /etc/sysctl.conf
echo "net.core.wmem_max=262144" >> /etc/sysctl.conf
echo "net.core.wmem_max = 1048576" >> /etc/sysctl.conf
echo "fs.aio-max-nr = 1048576" >> /etc/sysctl.conf
echo "kernel.shmmni = 4096" >> /etc/sysctl.conf
echo "kernel.shmmax = 957691904" >> /etc/sysctl.conf
echo "kernel.shmall = 2097152" >> /etc/sysctl.conf
echo "kernel.sem = 250 32000 100 128" >> /etc/sysctl.conf
echo "net.core.rmem_default = 262144" >> /etc/sysctl.conf
echo "net.core.wmem_default = 262144" >> /etc/sysctl.confsysctl -p >> /dev/nullecho "oracle soft nproc 2047" >> /etc/security/limits.conf
echo "oracle hard nproc 16384" >> /etc/security/limits.conf
echo "oracle soft nofile 1024" >> /etc/security/limits.conf
echo "oracle hard nofile 65536" >> /etc/security/limits.confecho "session    required    pam_limits.so" >>/etc/pam.d/loginecho "if [ $USER = "oracle" ] || [ $USER = "grid" ]; then" >> /etc/profile
echo "if [ $SHELL = "/bin/ksh" ]; then" >> /etc/profile
echo "ulimit -p 16384" >> /etc/profile
echo "ulimit -n 65536" >> /etc/profile
echo "else" >> /etc/profile
echo "ulimit -u 16384 -n 65536" >> /etc/profile
echo "fi" >> /etc/profile
echo "umask 022" >> /etc/profile
echo "fi" >> /etc/profile#make db_install.rsp
mk_db_install(){echo "oracle.install.responseFileVersion=/oracle/install/rspfmt_dbinstall_response_schema_v11_2_0" >> db_install.rspecho "oracle.install.option=INSTALL_DB_SWONLY" >> db_install.rspecho "ORACLE_HOSTNAME=$HOSTNAME" >> db_install.rspecho "UNIX_GROUP_NAME=oinstall" >> db_install.rspecho "INVENTORY_LOCATION=$INVENTORY_LOCATION" >> db_install.rspecho "SELECTED_LANGUAGES=zh_CN,en" >> db_install.rspecho "ORACLE_HOME=$ORACLE_HOME" >> db_install.rspecho "ORACLE_BASE=$ORACLE_BASE" >> db_install.rspecho "oracle.install.db.InstallEdition=EE" >> db_install.rspecho "oracle.install.db.EEOptionsSelection=false" >> db_install.rspecho "oracle.install.db.optionalComponents=" >> db_install.rspecho "oracle.install.db.DBA_GROUP=dba" >> db_install.rspecho "oracle.install.db.OPER_GROUP=oinstall" >> db_install.rspecho "oracle.install.db.CLUSTER_NODES=" >> db_install.rspecho "oracle.install.db.isRACOneInstall=false" >> db_install.rspecho "oracle.install.db.racOneServiceName=" >> db_install.rspecho "oracle.install.db.config.starterdb.type=GENERAL_PURPOSE" >> db_install.rspecho "oracle.install.db.config.starterdb.globalDBName=" >> db_install.rspecho "oracle.install.db.config.starterdb.SID=" >> db_install.rspecho "oracle.install.db.config.starterdb.characterSet=" >> db_install.rspecho "oracle.install.db.config.starterdb.memoryOption=false" >> db_install.rspecho "oracle.install.db.config.starterdb.memoryLimit=" >> db_install.rspecho "oracle.install.db.config.starterdb.installExampleSchemas=false" >> db_install.rspecho "oracle.install.db.config.starterdb.enableSecuritySettings=true" >> db_install.rspecho "oracle.install.db.config.starterdb.password.ALL=" >> db_install.rspecho "oracle.install.db.config.starterdb.password.SYS=" >> db_install.rspecho "oracle.install.db.config.starterdb.password.SYSTEM=" >> db_install.rspecho "oracle.install.db.config.starterdb.password.SYSMAN=" >> db_install.rspecho "oracle.install.db.config.starterdb.password.DBSNMP=" >> db_install.rspecho "oracle.install.db.config.starterdb.control=DB_CONTROL" >> db_install.rspecho "oracle.install.db.config.starterdb.gridcontrol.gridControlServiceURL=" >> db_install.rspecho "oracle.install.db.config.starterdb.automatedBackup.enable=false" >> db_install.rspecho "oracle.install.db.config.starterdb.automatedBackup.osuid=" >> db_install.rspecho "oracle.install.db.config.starterdb.automatedBackup.ospwd=" >> db_install.rspecho "oracle.install.db.config.starterdb.storageType=" >> db_install.rspecho "oracle.install.db.config.starterdb.fileSystemStorage.dataLocation=" >> db_install.rspecho "oracle.install.db.config.starterdb.fileSystemStorage.recoveryLocation=" >> db_install.rspecho "oracle.install.db.config.asm.diskGroup=" >> db_install.rspecho "oracle.install.db.config.asm.ASMSNMPPassword=" >> db_install.rspecho "MYORACLESUPPORT_USERNAME=" >> db_install.rspecho "MYORACLESUPPORT_PASSWORD=" >> db_install.rspecho "SECURITY_UPDATES_VIA_MYORACLESUPPORT=false" >> db_install.rspecho "DECLINE_SECURITY_UPDATES=true" >> db_install.rspecho "PROXY_HOST=" >> db_install.rspecho "PROXY_PORT=" >> db_install.rspecho "PROXY_USER=" >> db_install.rspecho "PROXY_PWD=" >> db_install.rspecho "PROXY_REALM=" >> db_install.rspecho "COLLECTOR_SUPPORTHUB_URL=" >> db_install.rspecho "oracle.installer.autoupdates.option=SKIP_UPDATES" >> db_install.rspecho "oracle.installer.autoupdates.downloadUpdatesLoc=" >> db_install.rspecho "AUTOUPDATES_MYORACLESUPPORT_USERNAME=" >> db_install.rspecho "AUTOUPDATES_MYORACLESUPPORT_PASSWORD=" >> db_install.rsp
}#mk db_install.rsp
mk_db_install
echo
echo "db_install.rsp has been created"
echo
#chown chmod db_install.rsp
chown oracle:oinstall db_install.rsp
chmod 755 db_install.rsp#mkdir ORACLE_HOME ORACLE_BASE INVENTORY_LOCATION
if [ ! -d "$ORACLE_BASE" ];thenmkdir -p $ORACLE_BASE
fiif [ ! -d "$ORACLE_HOME" ];thenmkdir -p $ORACLE_HOME
fiif [ ! -d "$INVENTORY_LOCATION" ];thenmkdir -p $INVENTORY_LOCATION
fiif [ ! -d "$ARCH" ];thenmkdir -p $ARCH
fichown -R oracle:oinstall $ORACLE_BASE
chown -R oracle:oinstall $ORACLE_HOME
chown -R oracle:oinstall $ARCH
chown -R oracle:oinstall $INVENTORY_LOCATION#install oracle software
setupDatabase() {runStr="cd $SOFTWARE_HOMEnohup ./runInstaller -silent -force -responseFile /oracle/711/db_install.rsp >> /oracle/711/setupDatabase.out 2>&1 &"su - oracle -c "$runStr"while truedoecho -n "."sleep 3sgrep "Successfully Setup Software" /oracle/711/setupDatabase.out >> /dev/nullif [ $? -eq 0 ]; thensh ${INVENTORY_LOCATION}/orainstRoot.shsh ${ORACLE_HOME}/root.shbreakfi done
}sleep 1s
echo "steup oracle database..."
setupDatabase
echo "steup succsed."
echolistenrsp(){
cat >> /oracle/711/listen.rsp << EOF
[GENERAL]
RESPONSEFILE_VERSION="11.2"
CREATE_TYPE="CUSTOM"
[oracle.net.ca]
INSTALLED_COMPONENTS={"server","net8","javavm"}
INSTALL_TYPE=""typical""
LISTENER_NUMBER=1
LISTENER_NAMES={"LISTENER"}
LISTENER_PROTOCOLS={"TCP;1521"}
LISTENER_START=""LISTENER""
NAMING_METHODS={"TNSNAMES","ONAMES","HOSTNAME"}
NSN_NUMBER=1
NSN_NAMES={"EXTPROC_CONNECTION_DATA"}
NSN_SERVICE={"PLSExtProc"}
NSN_PROTOCOLS={"TCP;HOSTNAME;1521"}
EOF
}listenrsp
chown oracle:oinstall /oracle/711/listen.rsp
chmod 755 /oracle/711/listen.rspnetcac(){cmd="nohup netca -silent -responseFile /oracle/711/listen.rsp >> /oracle/711/netca.log 2>&1 &"su - oracle -c "$cmd"while truedoecho -n "."sleep 1sgrep -E 'The exit code is 0|退出代码是0' /oracle/711/netca.log >> /dev/nullif [ $? -eq 0 ]; thenecho "Listener Successfully Created"breakfidone
}sleep 1s
echo "starting create listener..."
netcac
echo "Create Successfully"
echo#不想创建实力只执行以上的内容就可以了mkdbcarsp(){
cat >> /oracle/711/dbca.rsp << EOF
[GENERAL]
RESPONSEFILE_VERSION = "11.2.0"
OPERATION_TYPE = "createDatabase"
[CREATEDATABASE]
GDBNAME = "$DB_NAME"
SID = "$ORACLE_SID"
TEMPLATENAME = "orcl.dbt"
[createTemplateFromDB]
SOURCEDB = "myhost:1521:orcl"
SYSDBAUSERNAME = "system"
TEMPLATENAME = "My Copy TEMPLATE"
[createCloneTemplate]
SOURCEDB = "orcl"
TEMPLATENAME = "My Clone TEMPLATE"
[DELETEDATABASE]
SOURCEDB = "orcl"
[generateScripts]
TEMPLATENAME = "New Database"
GDBNAME = "orcl11.us.oracle.com"
[CONFIGUREDATABASE]
[ADDINSTANCE]
DB_UNIQUE_NAME = "orcl11g.us.oracle.com"
NODELIST=
SYSDBAUSERNAME = "sys"
[DELETEINSTANCE]
DB_UNIQUE_NAME = "orcl11g.us.oracle.com"
INSTANCENAME = "orcl11g"
SYSDBAUSERNAME = "sys"
EOF
}mkdbcarspval=$(cat /oracle/711/orcl7.dbt |grep "log_archive_dest_1"|awk -F'=' '{print $4}'|awk -F"'" '{print $1}')
cp -p /oracle/711/orcl7.dbt ${ORACLE_HOME}/assistants/dbca/templates/orcl.dbt
eval sed -i 's#$val#$ARCH#' ${ORACLE_HOME}/assistants/dbca/templates/orcl.dbtcreate_db(){cmd1="nohup dbca -silent -createDatabase -responseFile /oracle/711/dbca.rsp  -sysPassword "oracle" -systemPassword "oracle" >> /oracle/711/dbca.log 2>&1 &"su - oracle -c "$cmd1"while truedoecho -n "."sleep 1sgrep  "100%" /oracle/711/dbca.log >> /dev/nullif [ $? -eq 0 ]; thenecho "instance create Successfully"breakfidone
}sleep 1s
echo "starting create instance..."
create_db
echo
echo "Instance Create Successfully"###在这之上的是安装数据库软件并创建实例sleep 3s
#force logging
#!/bin/bash
crpfile(){
su - oracle -c "sqlplus -S / as sysdba << !
set trimspool on feedback off  pagesize 0 heading off
create pfile='/home/oracle/initorcl.ora' from spfile;
exit;
!
"
}crpfile >> /oracle/711/dg.log 2>&1ad=$(cat /home/oracle/initorcl.ora |grep "log_archive_dest_1='LOCATION")
af=$(cat /home/oracle/initorcl.ora |grep "log_archive_format")
eval sed -i 's#$ad##' /home/oracle/initorcl.ora
eval sed -i 's#$af##' /home/oracle/initorcl.oracp -p /home/oracle/initorcl.ora /home/oracle/initstandby.ora
stc=$(cat /home/oracle/initstandby.ora | grep "control_files")
audit=$(cat /home/oracle/initstandby.ora | grep "audit_file_dest")
eval sed -i 's#$stc##' /home/oracle/initstandby.ora
eval sed -i 's#$audit##' /home/oracle/initstandby.ora#追加如下内容insersp(){
cat >> /home/oracle/initorcl.ora << EOFDB_UNIQUE_NAME=$P_B_UNIQUE_NAME
LOG_ARCHIVE_CONFIG='DG_CONFIG=($P_B_UNIQUE_NAME,$S_B_UNIQUE_NAME)'
LOG_ARCHIVE_DEST_1='LOCATION=$ARCHVALID_FOR=(ALL_LOGFILES,ALL_ROLES)DB_UNIQUE_NAME=$P_B_UNIQUE_NAME'
LOG_ARCHIVE_DEST_2='SERVICE=$S_B_UNIQUE_NAME SYNC  AFFIRM NET_TIMEOUT=30VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)DB_UNIQUE_NAME=$S_B_UNIQUE_NAME'
LOG_ARCHIVE_DEST_STATE_1=ENABLE
LOG_ARCHIVE_DEST_STATE_2=ENABLE
REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE
LOG_ARCHIVE_FORMAT=%t_%s_%r.arc
LOG_ARCHIVE_MAX_PROCESSES=3FAL_SERVER=standby
DB_FILE_NAME_CONVERT='$ORACLE_BASE/oradata/standby','$ORACLE_BASE/oradata/$ORACLE_SID'
LOG_FILE_NAME_CONVERT='$ORACLE_BASE/oradata/standby','$ORACLE_BASE/oradata/$ORACLE_SID'
STANDBY_FILE_MANAGEMENT=AUTO
EOF
}insersp >> /oracle/711/dg.log 2>&1cstdpfile(){
cat >> /home/oracle/initstandby.ora << EOF
control_files='$ORACLE_BASE/oradata/standby/std_control01.ctl'
audit_file_dest='/oracle/admin/standby/adump'
DB_UNIQUE_NAME=$S_B_UNIQUE_NAME
LOG_ARCHIVE_CONFIG='DG_CONFIG=($P_B_UNIQUE_NAME,$S_B_UNIQUE_NAME)'
LOG_ARCHIVE_DEST_1='LOCATION=$ARCHVALID_FOR=(ALL_LOGFILES,ALL_ROLES)DB_UNIQUE_NAME=$S_B_UNIQUE_NAME'
LOG_ARCHIVE_DEST_2='SERVICE=$P_B_UNIQUE_NAME SYNC  AFFIRM NET_TIMEOUT=30VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)DB_UNIQUE_NAME=$P_B_UNIQUE_NAME'
LOG_ARCHIVE_DEST_STATE_1=ENABLE
LOG_ARCHIVE_DEST_STATE_2=ENABLE
REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE
LOG_ARCHIVE_FORMAT=%t_%s_%r.arc
LOG_ARCHIVE_MAX_PROCESSES=3FAL_SERVER=standby
DB_FILE_NAME_CONVERT='$ORACLE_BASE/oradata/$ORACLE_SID','$ORACLE_BASE/oradata/standby'
LOG_FILE_NAME_CONVERT='$ORACLE_BASE/oradata/$ORACLE_SID','$ORACLE_BASE/oradata/standby'
STANDBY_FILE_MANAGEMENT=AUTO
EOF
}cstdpfile >> /oracle/711/dg.log 2>&1su - oracle -c "sqlplus -S / as sysdba << !
set trimspool on feedback off  pagesize 0 heading off
shutdown immediate;
startup pfile='/home/oracle/initorcl.ora';
shutdown immediate;
create spfile from pfile='/home/oracle/initorcl.ora';
startup mount;
exit;
!
"#########现在是mountshutoracle(){
Shut_Oracle_Down=$(
su - oracle -c "sqlplus -S / as sysdba << !
set trimspool on feedback off pagesize 0 heading off
shutdown immediate;
exit;
!
"
)
echo $Shut_Oracle_Down | grep "ORACLE instance shut down"
if [ $? -eq 0 ];thenecho "Instacne Shutdown Successfully!"
elseecho "Instacne still open, please shutdown manual(you have two minute to shutdown the database!)"sleep 120s
fi
}mountoracle(){
Mount_Oracle=$(
su - oracle -c "sqlplus -S / as sysdba << !
set trimspool on feedback off pagesize 0 heading off
startup mount;
exit;
!
"
)
echo $Mount_Oracle | grep "Database mounted"
if [ $? -eq 0 ];thenecho "Database Mounted Successfully!"
fi
}   alterforce(){
alterlogging=$(
su - oracle -c "sqlplus -S / as sysdba << !
set trimspool on feedback off  pagesize 0 heading off
alter database force logging;
exit;
!
"
)
}chklogging(){
chk=$(
su - oracle -c "sqlplus -S / as sysdba << !
set trimspool on feedback off  pagesize 0 heading off
select force_logging from v\\\$database;
exit;
!
"
)
if [ "$chk" == "NO" ];thenecho "force logging is NO"
elif [ "$chk" == "YES" ]; thenecho "force logging is enabled"
fi
}chkmount(){
mountstat=$(
su - oracle -c "sqlplus -S / as sysdba << !
set trimspool on feedback off  pagesize 0 heading off
select status from v\\\$instance;
exit;
!
"
)
}####开始查看是否启用force loggingecho "check force logging"
force_logging=$(
su - oracle -c "sqlplus -S / as sysdba << !
set trimspool on feedback off  pagesize 0 heading off
select force_logging from v\\\$database;
exit;
!
"
)if [ "$force_logging" == "NO" ];thenecho "force logging is NO"echo "startng alter database force logging"chkmountif [ "mountstat" == "MOUNTED" ];then#shutoraclealterforcechkloggingelseshutoraclemountoraclealterforcechkloggingfi
elif [ "$force_logging" == "YES" ];thenecho "force logging is enabled"
fi#创建standby controlfile
csc(){
su - oracle -c "sqlplus -S / as sysdba << !
set trimspool on feedback off  pagesize 0 heading off
ALTER DATABASE CREATE STANDBY CONTROLFILE AS '/home/oracle/std_control01.ctl';
exit;
!
"
}findalert(){
alertpath=$(
su - oracle -c "sqlplus -S / as sysdba << !
set trimspool on feedback off  pagesize 0 heading off
select value from v\\\$parameter where name='background_dump_dest';
exit;
!
"
)
}if [ "$mountstat" == "MOUNTED" ];thencscif [ -f /home/oracle/std_control01.ctl ];thenecho "Standby Controlfile Create Successfully"elseecho "Faild To Create Standby Controlfile"fi
elseshutoracleecho $Shut_Oracle_Down | grep "ORACLE instance shut down"if [ $? -eq 0 ];thenmountoracleecho $Mount_Oracle | grep "Database mounted"if [ $? -eq 0 ];thencscif [ -f /home/oracle/std_control01.ctl ];thenecho "Standby Controlfile Create Successfully"elseecho "Faild To Create Standby Controlfile"exit -1fififi
fisendpfile(){
expect -c "spawn scp /home/oracle/initstandby.ora oracle@$S_IP:$ORACLE_HOME/dbs/initstandby.oraexpect {yes/no { send \"yes\r\"; exp_continue }*assword* { send \"oracle\r\" }};expect ]  { send exit\r } ;expect 100% ;expect eof ;"
}mkd_1(){
expect -c "spawn ssh oracle@$S_IPexpect {yes/no { send \"yes\r\"; exp_continue }*assword* { send \"oracle\r\" }} ;expect ]    { send \"mkdir -p /oracle/oradata/standby \r\" };expect eof ;"
}mkd_2(){
expect -c "spawn ssh oracle@$S_IPexpect {yes/no { send \"yes\r\"; exp_continue }*assword* { send \"oracle\r\" }} ;expect ] { send \"mkdir -p /oracle/admin/standby/adump \r\" };expect eof ;"
}sendstdc(){
expect -c "spawn scp /home/oracle/std_control01.ctl oracle@$S_IP:$ORACLE_BASE/oradata/standby/std_control01.ctlexpect {yes/no { send \"yes\r\"; exp_continue }*assword* { send \"oracle\r\" }};expect 100%expect eof ;"
}sendsystem(){
expect -c "set timeout -1spawn scp $ORACLE_BASE/oradata/$ORACLE_SID/system01.dbf oracle@$S_IP:$ORACLE_BASE/oradata/standby/expect {yes/no { send \"yes\r\"; exp_continue }*assword* { send \"oracle\r\" }};expect 100%expect eof ;"
}sendsysaux(){
expect -c "set timeout -1spawn scp $ORACLE_BASE/oradata/$ORACLE_SID/sysaux01.dbf oracle@$S_IP:$ORACLE_BASE/oradata/standby/expect {yes/no { send \"yes\r\"; exp_continue }*assword* { send \"oracle\r\" }};expect 100%expect eof ;"
}sendtemp(){
expect -c "set timeout -1spawn scp $ORACLE_BASE/oradata/$ORACLE_SID/temp01.dbf oracle@$S_IP:$ORACLE_BASE/oradata/standby/expect {yes/no { send \"yes\r\"; exp_continue }*assword* { send \"oracle\r\" }};expect 100%expect eof ;"
}sendundo(){
expect -c "set timeout -1spawn scp $ORACLE_BASE/oradata/$ORACLE_SID/undotbs01.dbf oracle@$S_IP:$ORACLE_BASE/oradata/standby/expect {yes/no { send \"yes\r\"; exp_continue }*assword* { send \"oracle\r\" }};expect 100%expect eof ;"
}senduser(){
expect -c "set timeout -1spawn scp $ORACLE_BASE/oradata/$ORACLE_SID/users01.dbf oracle@$S_IP:$ORACLE_BASE/oradata/standby/expect {yes/no { send \"yes\r\"; exp_continue }*assword* { send \"oracle\r\" }};expect 100%expect eof ;"
}sendpasswd(){
expect -c "spawn scp $ORACLE_HOME/dbs/orapw$ORACLE_SID oracle@$S_IP:$ORACLE_HOME/dbs/orapwstandbyexpect {yes/no { send \"yes\r\"; exp_continue }*assword* { send \"oracle\r\" }};expect 100%expect eof ;"
}echo "mkdir standby for standby"
echo
sleep 3s
mkd_1 >> /oracle/711/dg.log 2>&1
echo "mkdir adump for standby"
echo
sleep 3s
mkd_2 >> /oracle/711/dg.log 2>&1
echo "send orapw file to standby"
echo
sleep 3s
sendpasswd >> /oracle/711/dg.log 2>&1
echo "send pfile to standby"
echo
sleep 3s
sendpfile >> /oracle/711/dg.log 2>&1
echo "send standby controlfile to standby"
echo
sleep 3s
sendstdc >> /oracle/711/dg.log 2>&1
echo "send system.dbf to standby"
echo
sleep 3s
sendsystem >> /oracle/711/dg.log 2>&1
echo "send sysaux.dbf to standby"
echo
sleep 3s
sendsysaux >> /oracle/711/dg.log 2>&1
echo "send temp.dbf to standby"
echo
sleep 3s
sendtemp >> /oracle/711/dg.log 2>&1
echo "send undo.dbf to standby"
echo
sleep 3s
sendundo >> /oracle/711/dg.log 2>&1
echo "send user.dbf to standby"
echo
sleep 3s
senduser >> /oracle/711/dg.log 2>&1echo "add tns"
#tns
cat >> $ORACLE_HOME/network/admin/tnsnames.ora << EOF
$P_B_UNIQUE_NAME=(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=$P_DB)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=$P_B_UNIQUE_NAME)(SERVER=DEDICATED)))$S_B_UNIQUE_NAME=(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=$S_DB)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=$S_B_UNIQUE_NAME)(SERVER=DEDICATED)))
EOFsendtns(){
expect -c "spawn scp $ORACLE_HOME/network/admin/tnsnames.ora oracle@$S_IP:$ORACLE_HOME/network/admin/tnsnames.oraexpect {yes/no { send \"yes\r\"; exp_continue }*assword* { send \"oracle\r\" }};expect 100%expect eof ;"
}echo "send tns to standby"
sendtns >> /oracle/711/dg.log 2>&1add_p_stdlog(){
su - oracle -c "sqlplus -S / as sysdba << !
set trimspool on feedback off  pagesize 0 heading off
alter database add standby logfile '/oracle/oradata/$ORACLE_SID/std_redo01.log' size 50m;
alter database add standby logfile '/oracle/oradata/$ORACLE_SID/std_redo02.log' size 50m;
alter database add standby logfile '/oracle/oradata/$ORACLE_SID/std_redo03.log' size 50m;
alter database add standby logfile '/oracle/oradata/$ORACLE_SID/std_redo04.log' size 50m;
exit;
!
"
}echo "create standby redolog for primary"
add_p_stdlog >> /oracle/711/dg.log 2>&1register(){
su - oracle -c "sqlplus -S / as sysdba << !
set trimspool on feedback off pagesize 0 heading off
alter system register;
exit;
!
"
}
register >> /oracle/711/dg.log 2>&1#去备库mount 建standby redo
#调用mount_standby.shexpect -c "spawn ssh $S_IPexpect {yes/no { send \"yes\r\"; exp_continue }*assword* { send \"oracle\r\" }} ;expect ] { send \"cd /oracle/711 \r\" };expect ] { send \"sh /oracle/711/mount_standby.sh \r\" };
#          send \r;expect eof ;"#至此主库mount,备库mountsleep 10s#open主库
get_standby_status(){
standby_status=$(
su - oracle -c "sqlplus -S sys/oracle@standby as sysdba << !
set trimspool on feedback off pagesize 0 heading off
select status from v\\\$instance;
exit;
!
"
)
}echo
echo "get standby status"
get_stanby_status
echo $standby_statusopen(){
su - oracle -c "sqlplus -S / as sysdba << !
set trimspool on feedback off pagesize 0 heading off
alter database open;
exit;
!
"
}#if [ "$standby_status" == "Mounted" ];then
#   echo "开始收尾工作open主库"
#   open >> /oracle/711/dg.log 2>&1
#else
#   echo "standby not mounted please check"
#   exit -1
#fiwhile true
doget_standby_statusif [ "$standby_status" == "MOUNTED" ];thenecho "开始收尾工作open主库"open >> /oracle/711/dg.log 2>&1breakfi
doneexpect -c "spawn ssh $S_IPexpect {yes/no { send \"yes\r\"; exp_continue }*assword* { send \"oracle\r\" }} ;expect ] { send \"cd /oracle/711 \r\" };expect ] { send \"sh /oracle/711/recover.sh \r\" };
#          send \r;expect eof ;"echo "all done!"

config文件类似于这样:

# 指定软件存放目录
SOFTWARE_HOME=/tmp/database#指定oracle实例名称,默认orcl
ORACLE_SID=orcl#指定INVENTORY
INVENTORY_LOCATION=/oracle/oraInventory#指定oracle基目录,默认/oracle
ORACLE_BASE=/oracle#SET ORACLE_HOME,默认/oracle/db11g
ORACLE_HOME=/oracle/db11g#SET DB_NAME,默认orcl
DB_NAME=orcl#指定归档路径,默认为{ORACLE_HOME}/arch
ARCH=/oracle/arch#指定主库hostname,此脚本并不会配置按照您的填写配置主机名
P_DB=master#指定主库的ip,此脚本并不会配置按照您的填写配置ip
P_IP=192.168.134.139#指定备库hostname,此脚本并不会配置按照您的填写配置主机名
S_DB=slave#指定备库的ip,此脚本并不会配置按照您的填写配置ip
S_IP=192.168.134.134#指定主库B_UNIQUE_NAME,默认为primary
P_B_UNIQUE_NAME=primary#指定备库B_UNIQUE_NAME,默认为standby
S_B_UNIQUE_NAME=standby#指定控制文件,默认两个分别为{ORACLE_BASE}/oradata/{DB_UNIQUE_NAME}/control01.ctl和{ORACLE_BASE}/oradata/{DB_UNIQUE_NAME}/control02.ctl
#ctl=/disk1/control01.ctl,/disk2/control02.ctl,/disk3/control03.ctl

###到这脚本没有完,具体看附件
哦传不了附件,那就算了吧
全部脚本如有需要请到本人博客评论留邮箱
自取吧https://github.com/Fanduzi/One_Click_DG

一键DG脚本(静默安装创建实例创建DG)相关推荐

  1. oracle12cR2 静默安装不自动创建flash_recovery_area

    oracle12cR2 静默安装不自动创建flash_recovery_area 在静默安装oracle12cR2过程中,按照11g安装的方法,完成后发现没有快速恢复区,当然我们可以自己创建,但是本着 ...

  2. oracle软件静默安装程序,Oracle 11.2.0.4静默安装软件和创建数据库

    在没有图形界面的情况时,安装Oracle数据库软件和创建数据库就只能使用命令行的方式进行. 本文假设安装的前提条件都已经配置好. 一.静默安装数据库软件 1.准备参数文件 这个参数文件是用于安装软件使 ...

  3. Talend 安装及实例创建

    Talend Open Studio ETL工具,用于提取转换输出数据. 1. 安装: (1)talend https://link.zhihu.com/?target=https%3A//downl ...

  4. centos7 无网络 安装oracle 脚本静默安装

    1.oracle 11g 安装包下载: 百度网盘自行下载.下载地址: 链接:https://pan.baidu.com/s/1RfsgsqkhpXKIyvKH11P_Xw 提取码:fh88 oracl ...

  5. Openstack:创建实例

    Openstack:创建实例 创建实例前需要准备好三个工作:镜像.网络.实例类型. 网络创建会在另外一篇文章列出,下面主要讲实例类型和镜像相关的操作. 实例类型(flavor) 看到这个图应该很容易理 ...

  6. DBCA静默安装Oracle数据库

    DBCA静默安装Oracle数据库 DBCA静默安装Oracle软件 准备db_install.rsp文件 静默安装软件 DBCA静默安装数据库 准备工作 准备dbca.rsp文件 修改dbca模板文 ...

  7. GRID静默安装部署

    一.环境准备工作 Red Hat 5.6 grid安装包 -------------------------------------------- 安装软件包 yum -y install     b ...

  8. linux CentOS7最小化安装环境静默安装Oracle11GR2数据库(静默创建实例_08)

    接上一篇:linux CentOS7最小化安装环境静默安装Oracle11GR2数据库(执行安装_07) 创建ORACLE实例前提,准备下面7项工作 序号 说明 链接 ① 安装操作系统 https:/ ...

  9. oracle静默创建实例linux,linux CentOS7下快速静默安装Oracle11GR2数据库并创建实例

    linux CentOS7下快速静默安装Oracle11GR2数据库并创建实例 本文章适合已经熟悉安装过程,需要快速部署使用 初学者建议分步学习:https://edu.51cto.com/cours ...

最新文章

  1. 鸟哥的linux 实训教程,鸟哥的Linux基础学习实训教程
  2. 实验楼第二次试验报告
  3. 百度地图api location 211 sn校验失败
  4. SQL基础【十五、join、Inner join、Left join、Right join、Full join】
  5. 使用Oracle验证外部数据
  6. EF中DB First模式下数据库中表结构变化时如何快速同步到EF模型中
  7. Python urllib2和urllib的使用
  8. 世界首富洛克菲勒的6句忠告,每个字都值钱
  9. 在Vue项目中引入echarts图表的方法(引入cdn)
  10. activemq linux 100M,Linux下安装 activemq 并指定jdk 1.8(示例代码)
  11. 计算机生存代码,方舟生存进化OL代码大全 最新最全的代码
  12. RT-Thread 应用笔记 - libmodbus RTU 编译问题的解决
  13. 《东周列国志》第七十一回 晏平仲二桃杀三士 楚平王娶媳逐世子
  14. C语言:用指针求字符串长度
  15. PNP NPN 三线制接近开关接线
  16. html中siblings方法,jQuery使用siblings获取某元素所有同辈(兄弟姐妹)元素用法示例...
  17. 神武授权位置服务器,太古封魔录神武获得,神武服务器入口
  18. 哪吒之魔童降世视听语言影评_《哪吒之魔童降世》观后感——不用吹爆,但值得点赞...
  19. 使用Python连接crossbar.io 报错 could not create serializer for “cbor“ (available: [‘json‘])
  20. ValueError: With n_samples=0, test_size=0.2 and train_size=None, the resulting train set will be emp

热门文章

  1. 系统安全知识之系统安全的最小特权原则
  2. 骨传导耳机好不好,骨传导耳机的原理是什么?
  3. 为什么需要Spring? 什么是Spring?带你由浅入深的方式进行介绍,只要你会编程就能看懂
  4. Windows11抢先体验,带下载地址
  5. Sophus库:李群和李代数
  6. WPS或EXCEL度分秒和十进制度之间的转换
  7. 关于步进电机的小知识
  8. 服务器安全狗使用心得
  9. LoadRunner运行场景报错处理方式
  10. geojson shp esrijson 相互转换