
////
  Licensed to the Apache Software Foundation (ASF) under one
  or more contributor license agreements.  See the NOTICE file
  distributed with this work for additional information
  regarding copyright ownership.  The ASF licenses this file
  to you under the Apache License, Version 2.0 (the
  "License"); you may not use this file except in compliance
  with the License.  You may obtain a copy of the License at
 
      http://www.apache.org/licenses/LICENSE-2.0
 
  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
////


+sqoop-list-databases+
----------------------

Purpose
~~~~~~~

List database schemas present on a server.

Syntax
~~~~~~

----
$ sqoop list-databases (generic-args) (list-databases-args)
$ sqoop-list-databases (generic-args) (list-databases-args)
----

Although the Hadoop generic arguments must preceed any list-databases
arguments, the list-databases arguments can be entered in any order
with respect to one another.

include::common-args.txt[]

Example Invocations
~~~~~~~~~~~~~~~~~~~

List database schemas available on a MySQL server:

----
$ sqoop list-databases --connect jdbc:mysql://database.example.com/
information_schema
employees
----

NOTE: This only works with HSQLDB, MySQL and Oracle. When using with Oracle,
it is necessary that the user connecting to the database has DBA privileges.

