Hi.

If you set the DATASIZE in MB, it would better to set a MAXDATASIZE in
MB too and then calculate the MAXDATAPAGES.

It could be useful to set the de dbm user and password, and the dba user
and password as a variables since they appear several times in the
script.

Is there a reason that the variable representing the database's name is
called SID and not DBNAME for example ?

I found other interesting scripts there :
http://www.crionics.com/faq/sapdb.html

Laurent

On Wed, 2001-12-05 at 20:26, Fabian Moerchen wrote:
> hi
> 
> i played around with the create_demo_db.sh script and made some
> improvements. apart from better error reporting it is also easier to
> customize it when starting to build an own database. script is attached,
> here's the details:
> 
> - while the error checking in the old script worked for one line dbmcli
> commands, it didn't for the multiline commands fed with cat to dbmcli.
> the captured output seems to be that of cat, so there is never an error
> reported. in my version all output of these commands goes to a logfile.
> then the last lines of the logfile are checked with tail and grep for an
> error ("ERR"). 
> 
> - i added error handling for the stop and drop commands. of course these
> fail if the database doesn't exists, but the user should at least now
> about it, the script continues anyway. this way the error will at least
> be in the log in case it fails for some other reason.
> 
> - the size of the database file and the logfile can be specified in MB.
> conversion to the 8KB pages is done with bc. this means a new
> dependency, i don't really know which distributions install it by
> default.
> 
> - moved some other db parameters into variables at the top.
>             
> - another new dependency is tee to output to the screen and log at the
> same time, but this should be on all systems, right?
> 
> - removed usage of $HOME. the data, log and backup files shouldn't be on
> the same harddrive in a production system, so three different variables
> are used, they default to /home/sapdb. alternative: leave the $HOME part
> in and use it as default for the threee.
> 
> - nicer output ;)
> 
> so tell me what you think and you sapdb people feel free to include any
> parts of it if you like.
> 
> bye
> fabian
> 
> p.s. tested on linux debian woody/tgz package 7.3.0.18
> 
> ----
> 

> #!/bin/sh
> ###
> # create a SAPDB database
> ###
> 
> # name of the database
> SID=TST
> 
> # username and password
> USERNAME=test
> PASSWORD=test
> 
> # size of database and logs in MB
> DATASIZE=20 
> LOGSIZE=8
> 
> # path to sapdb binaries
> DEP=/usr/sapdb/depend
> IND=/usr/sapdb/indep_prog
> 
> # path to database files
> DATA=/home/sapdb
> LOG=/home/sapdb
> BACKUP=/home/sapdb
> 
> # more advanced database parameters
> CATCACHESUPPLY=300
> DATACACHE=2500
> MAXDATADEVSPACES=5
> MAXDATAPAGES=1024000
> 
> # logfile for output of this script
> LOGFILE=create_demo_db.log
> 
> # end of configuration
> # no need to go below this line unless something is wrong
> 
> # calculate database pages from sizes
> DATAPAGES=`cat <<EOF | bc
> $DATASIZE*128
> EOF`
> LOGPAGES=`cat <<EOF | bc
> $LOGSIZE*128
> EOF`
> 
> # script shouldn't be run as root
> id=`id | sed s/\(.*// | sed s/uid=//`
> if [ "$id" = "0" ]; then
>         echo "Don't start script as root!" 1>&2
>         exit 1
> fi
> 
> # set variables
> INSTROOT=$DEP
> PATH=$IND/bin:$PATH
> export PATH
> 
> # print header
> echo "Start creating SAPDB database $SID" | tee -a $LOGFILE
> echo -n `hostname` | tee -a $LOGFILE
> echo -n " " | tee -a $LOGFILE
> echo `date` | tee -a $LOGFILE
> echo | tee -a $LOGFILE
> 
> # start remote communication server
> x_server start >/dev/null 2>&1
> 
> # try to stop existing database
> echo -n "Stopping database $SID..." | tee -a $LOGFILE
> _o=`dbmcli -d $SID -u dbm,dbm db_offline 2>&1`
> _test=`echo $_o | grep OK`
> if [ "$_test" = "" ]; then
>         echo "failed." | tee -a $LOGFILE
>         echo $_o >> $LOGFILE
>         echo "Maybe it didn't exists, so continuing." | tee -a $LOGFILE
> else
>       echo "ok" | tee -a $LOGFILE
> fi
> 
> # try to drop existing database
> echo -n "Dropping database $SID..." | tee -a $LOGFILE
> _o=`dbmcli -d $SID -u dbm,dbm db_drop 2>&1`
> _test=`echo $_o | grep OK`
> if [ "$_test" = "" ]; then
>         echo "failed." | tee -a $LOGFILE
>         echo $_o >> $LOGFILE
>         echo "Maybe it didn't exists, so continuing." | tee -a $LOGFILE
> else
>       echo "ok" | tee -a $LOGFILE
> fi
> 
> # create new demo database
> echo -n "Creating database $SID..." | tee -a $LOGFILE
> _o=`dbmcli -s -R  $INSTROOT db_create $SID dbm,dbm 2>&1`
> _test=`echo $_o | grep OK`
> if [ "$_test" = "" ]; then
>         echo "failed!" | tee -a $LOGFILE
>         echo $_o | tee -a $LOGFILE
>         exit 1
> fi
> echo "ok" | tee -a $LOGFILE
> 
> # create directories for database files
> echo -n "Creating directories..." | tee -a $LOGFILE
> mkdir -p $DATA/$SID
> mkdir -p $LOG/$SID
> mkdir -p $BACKUP/$SID
> echo "ok" | tee -a $LOGFILE
> 
> # setup database parameters
> echo -n "Setting parameters for $SID..." | tee -a $LOGFILE
> cat <<EOF | dbmcli -d $SID -u dbm,dbm >> $LOGFILE 2>&1
> param_rmfile
> param_startsession
> param_init OLTP
> param_put LOG_MODE SINGLE
> param_put CAT_CACHE_SUPPLY $CATCACHESUPPLY
> param_put DATA_CACHE $DATACACHE
> param_put MAXDATADEVSPACES $MAXDATADEVSPACES
> param_put MAXDATAPAGES $MAXDATAPAGES
> param_checkall
> param_commitsession
> param_adddevspace 1 SYS  $DATA/$SID/DISKS01   F
> param_adddevspace 1 DATA $DATA/$SID/DISKD0001 F $DATAPAGES
> param_adddevspace 1 LOG  $LOG/$SID/DISKL001   F $LOGPAGES
> quit
> EOF
> _test=`tail -n 40 $LOGFILE | grep ERR`
> if [ "$_test" != "" ]; then
>         echo "failed!" | tee -a $LOGFILE
>       echo "See $LOGFILE for details."
>         exit 1
> fi
> echo "ok" | tee -a $LOGFILE
> 
> # startup database
> echo -n "Starting database $SID..." | tee -a $LOGFILE
> _o=`dbmcli -d $SID -u dbm,dbm db_start 2>&1`
> _test=`echo $_o | grep OK`
> if [ "$_test" = "" ]; then
>         echo "failed!" | tee -a $LOGFILE
>         echo $_o | tee -a $LOGFILE
>         exit 1
> fi
> echo "ok" | tee -a $LOGFILE
> 
> # initialize database files
> echo -n "Initializing database files..." | tee -a $LOGFILE
> cat <<EOF | dbmcli -d $SID -u dbm,dbm >> $LOGFILE 2>&1
> util_connect dbm,dbm
> util_execute init config
> util_activate dba,dba
> quit
> EOF
> _test=`tail -n 20 $LOGFILE | grep ERR`
> if [ "$_test" != "" ]; then
>         echo "failed!" | tee -a $LOGFILE
>       echo "See $LOGFILE for details."
>         exit 1
> fi
> echo "ok" | tee -a $LOGFILE
> 
> # load database system tables
> echo -n "Loading system tables..." | tee -a $LOGFILE
> _o=`dbmcli -d $SID -u dbm,dbm load_systab -u dba,dba -ud domain 2>&1`
> _test=`echo $_o | grep OK`
> if [ "$_test" = "" ]; then
>         echo "failed!" | tee -a $LOGFILE
>         echo $_o | tee -a $LOGFILE
>         exit 1
> fi
> echo "ok" | tee -a $LOGFILE
> 
> # create database demo user
> echo -n "Creating database user $USERNAME..." | tee -a $LOGFILE
> cat <<EOF | dbmcli -d $SID -u dba,dba >> $LOGFILE 2>&1
> sql_connect dba,dba
> sql_execute CREATE USER $USERNAME PASSWORD $PASSWORD DBA NOT EXCLUSIVE
> EOF
> _test=`tail -n 7 $LOGFILE | grep ERR`
> if [ "$_test" != "" ]; then
>         echo "failed!" | tee -a $LOGFILE
>       echo "See $LOGFILE for details."
>         exit 1
> fi
> echo "ok" | tee -a $LOGFILE
> 
> # define backup medium
> echo -n "Setting backup parameters..." | tee -a $LOGFILE
> cat <<EOF | dbmcli -d $SID -u dbm,dbm >> $LOGFILE 2>&1
> medium_put data $BACKUP/$SID/datasave FILE DATA 0 8 YES
> medium_put auto $BACKUP/$SID/autosave FILE AUTO
> util_connect dbm,dbm
> backup_save data
> autosave_on
> quit
> EOF
> _test=`tail -n 40 $LOGFILE | grep ERR`
> if [ "$_test" != "" ]; then
>         echo "failed!" | tee -a $LOGFILE
>       echo "See $LOGFILE for details."
>         exit 1
> fi
> echo "ok" | tee -a $LOGFILE
> 
> echo
> echo "All done, see $LOGFILE for details."
> echo
> 
> exit 0
> 
> 
> 


Reply via email to