# 18. Starting and Stopping Oracle Database

This chapter covers how to start up and shut down Oracle Database using python-oracledb.

Note

Database start up and shut down functionality is only supported in the python-oracledb Thick mode. See Enabling python-oracledb Thick mode.

## 18.1. Starting Oracle Database Up

Python-oracledb can start up a database instance. A privileged connection is required. This example shows a script that could be run as the ‘oracle’ operating system user who administers a local database installation on Linux. It assumes that the environment variable `ORACLE_SID` has been set to the SID of the database that should be started:

    # the connection must be in PRELIM_AUTH mode to perform startup
    connection = oracledb.connect(mode=oracledb.SYSDBA | oracledb.PRELIM_AUTH)
    connection.startup()

    # the following statements must be issued in normal SYSDBA mode
    connection = oracledb.connect(mode=oracledb.SYSDBA, encoding="UTF-8")
    cursor = connection.cursor()
    cursor.execute("alter database mount")
    cursor.execute("alter database open")

To start up a remote database, you may need to configure the Oracle Net listener to use static service registration by adding a `SID_LIST_LISTENER` entry to the database listener.ora file.

## 18.2. Shutting Oracle Database Down

Python-oracledb has the ability to shut down the database using a privileged connection. This example also assumes that the environment variable `ORACLE_SID` has been set:

    # need to connect as SYSDBA or SYSOPER
    connection = oracledb.connect(mode=oracledb.SYSDBA)

    # first shutdown() call must specify the mode, if DBSHUTDOWN_ABORT is used,
    # there is no need for any of the other steps
    connection.shutdown(mode=oracledb.DBSHUTDOWN_IMMEDIATE)

    # now close and dismount the database
    cursor = connection.cursor()
    cursor.execute("alter database close normal")
    cursor.execute("alter database dismount")

    # perform the final shutdown call
    connection.shutdown(mode=oracledb.DBSHUTDOWN_FINAL)