database-maintenance.xml
Delivered as text/xml
[ hide source ] | [ make this the default ]
File Contents
<?xml version='1.0' ?>
<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
"http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd" [
<!ENTITY % myvars SYSTEM "../variables.ent">
%myvars;
]>
<chapter id="database-management">
<title>Database Management</title>
<authorblurb>
<para>By <ulink url="mailto:joel@aufrecht.org">Joel Aufrecht</ulink></para>
</authorblurb>
<sect1 id="remote-postgres">
<title>Running a PostgreSQL database on another server</title>
<para>To run a database on a different machine than the
webserver requires changes to the database configuration file
and access control file, and to the OpenACS service's
configuration file.</para>
<itemizedlist>
<listitem>
<para>Edit the database configuration file, which in a
Reference install is located at <computeroutput>/usr/local/pgsql/data/postgresql.conf</computeroutput>
and change</para>
<programlisting>#tcpip_socket = false</programlisting>
<para>to</para>
<programlisting>tcpip_socket = true</programlisting>
</listitem>
<listitem>
<para>Change the access control file for the database to
permit specific remote clients to access. Access can be
controlled ... (add notes from forum post) </para>
</listitem>
<listitem>
<para>Change the OpenACS service's configuration file to
point to the remote database. Edit
<computeroutput>/var/lib/aolserver/<replaceable>$OPENACS_SERVICE_NAME</replaceable>/etc/config.tcl</computeroutput>
and change</para>
<programlisting></programlisting>
<para>to </para>
<programlisting></programlisting>
</listitem>
</itemizedlist>
</sect1>
<sect1 id="install-openacs-delete-tablespace">
<title>Deleting a tablespace</title>
<para>Skip down for instructions on <xref linkend="install-openacs-delete-postgres-tablespace"/>.
</para>
<sect2 id="install-openacs-delete-oracle-tablespace">
<title>Deleting an Oracle tablespace</title>
<para>
Should it become necessary to rebuild a tablespace from scratch,
you can use the <computeroutput>drop user</computeroutput> command
in SVRMGRL with the <computeroutput>cascade</computeroutput>
option. This command will drop the user and every database object
the user owns.</para>
<programlisting>SVRMGR> <userinput>drop user <replaceable>$OPENACS_SERVICE_NAME</replaceable> cascade;</userinput></programlisting>
<para>
If this does not work because svrmgrl "cannot drop a user that
is currently connected", make sure to kill the AOLserver using
this user. If it still does not work, do:</para>
<programlisting>SVRMGR> <userinput>select username, sid, serial# from v$session where lower(username)='<replaceable>$OPENACS_SERVICE_NAME</replaceable>';</userinput></programlisting>
<para>and then</para>
<programlisting>SVRMGR> <userinput>alter system kill session '<replaceable>sid, serial#</replaceable>';</userinput></programlisting>
<para>
where <emphasis>sid</emphasis> and <emphasis>serial#</emphasis> are
replaced with the corresponding values for the open session.</para>
<para><emphasis role="strong">Use with caution!</emphasis></para>
<para>
If you feel the need to delete <emphasis>everything</emphasis>
related to the service, you can also issue the following:</para>
<programlisting>SVRMGR> <userinput>drop tablespace <replaceable>$OPENACS_SERVICE_NAME</replaceable> including contents cascade constraints;</userinput></programlisting>
</sect2>
<sect2 id="install-openacs-delete-postgres-tablespace" xreflabel="Deleting a PostgreSQL tablespace">
<title>Deleting a PostgreSQL tablespace</title>
<para>
Dropping a PostgreSQL tablespace is easy. You have to stop any
AOLserver instances that are using the database that you wish to
drop. If you're using daemontools, this is simple, just use the
'down' flag (-d). If you're using inittab, you have to comment out
your server in <computeroutput>/etc/inittab</computeroutput>,
reread the inittab with <computeroutput>/sbin/init
q</computeroutput>, and then <computeroutput>restart-aolserver
<replaceable>$OPENACS_SERVICE_NAME</replaceable></computeroutput>.</para>
<para>Then, to drop the db, just do:</para>
<programlisting>
[$OPENACS_SERVICE_NAME ~]$ <userinput>dropdb <replaceable>$OPENACS_SERVICE_NAME</replaceable></userinput>
DROP DATABASE</programlisting>
</sect2>
</sect1>
<sect1 id="install-next-nightly-vacuum">
<title>Vacuum Postgres nightly</title>
<para>
The "vacuum" command must be run periodically to reclaim space
in versions of PostgreSQL before 7.4. The "vacuum analyze" form
additionally collects statistics on the
disbursion of columns in the database, which the optimizer uses when
it calculates just how to execute queries. The availability of this
data can make a tremendous difference in the execution speed of
queries. This command can also be run from cron, but it probably makes
more sense to run this command as part of your nightly backup
procedure - if "vacuum" is going to screw up the database, you'd
prefer it to happen immediately after (not before!) you've made a
backup! The "vacuum" command is very reliable, but conservatism is
the key to good system management. So, if you're using the export
procedure described above, you don't need to do this extra
step.
</para>
<para>Edit your crontab:</para>
<programlisting>[joeuser ~]$ <userinput>crontab -e</userinput></programlisting>
<para>We'll set vacuum up to run nightly at 1 AM. Add the following
line:</para>
<programlisting>
0 1 * * * /usr/local/pgsql/bin/vacuumdb <replaceable>$OPENACS_SERVICE_NAME</replaceable></programlisting>
<para><phrase role="cvstag">($Id: database-maintenance.xml,v 1.9 2017/08/07 23:47:54 gustafn Exp $)</phrase></para>
</sect1>
</chapter>
<!--
Local Variables:
sgml-parent-document: ("../index.xml" "book" "chapter")
End:
-->