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 > > >