Skip to content

适用虚谷数据库版本

v12.9



适用虚谷数据库版本

v12.9


数据库

📄字数 3.2K
👁️阅读量 加载中...

首次启动虚谷数据库服务程序时,系统默认创建系统库 (SYSTEM),它除了用户库应有的功能外,还存储所有非系统库的控制信息以及整个系统的控制与描述信息,所有用户库的创建、修改与删除必须在系统库中进行。

注意

  • 数据库的创建、修改与删除必须在系统库中进行,使用SYSDBA用户或其他已被授予数据库管理员权限(SYSDBA权限)的用户进行操作,权限相关内容参见 权限管理
  • 系统库管理员权限的用户,可以通过 SYS_DATABASES 表查看当前数据库实例里所有库的信息。

一、创建数据库

1.1 语法格式

1.2 参数说明

  • IF NOT EXISTS:创建数据库时若同名数据库存在则忽略错误,该关键字无法验证已有同名数据库与当前创建库结构是否一致;
  • database_name:数据库名;
  • (IDENT|SCONST):字符集名称,可以在数据库中执行SELECT * FROM sys_charsets查看系统支持的字符集,系统库固定为UTF8,用户库缺省值为GBK(可在系统参数 def_charset 修改此缺省值);
    • IDENT:预定义的字符集标识符(如UTF8),无需引号;
    • SCONST:字符串常量(如'UTF8'),需单引号包裹;
  • TIME ZONE:时区,其SCONST形式为'GMT+HH:MM''GMT-HH:MM',表示当前时区与格林威治时间的时差,默认为GMT+08:00(可在系统参数 def_timezone 修改此缺省值),时差取值范围[-12:59,+14:59];
  • ENCRYPT BY SCONST:使用加密机加密并指定加密机名SCONST,需先成功创建加密机,加密机相关内容请参见 加密机

1.3 示例

  • 示例1

    创建一个名为db_test的数据库,其字符集是GBK,时区是东8区,并使用名为ENC_TEST的加密机进行加密。

    sql
    SQL> CREATE ENCRYPTOR 'ENC_TEST' BY 'ENC_TEST'; --需使用SYSSSO用户创建
    SQL> CREATE DATABASE db_test CHARACTER SET 'GBK' TIME ZONE 'GMT+08:00' ENCRYPT BY 'ENC_TEST'; --系统库SYSDBA执行
  • 示例2

    创建数据库时存在同名数据库,但原数据库和创建库字符集类型不同,数据库相关信息可通过系统视图dba_databases查询。

    sql
    SQL> CREATE DATABASE db_fea CHAR SET 'GB18030';
    
    SQL> SELECT db_name,char_set FROM dba_databases WHERE db_name='DB_FEA';
    +---------+----------+
    | DB_NAME | CHAR_SET |
    +---------+----------+
    | DB_FEA  | GB18030  |
    +---------+----------+
    
    -- 创建一个与原数据库字符集类型不同的数据库,此处会返回警告
    SQL> CREATE DATABASE IF NOT EXISTS db_fea CHAR SET 'gbk_chinese_ci';
    Warnning: [E2007] 数据库已存在
    
    -- 不会对原数据库产生影响
    SQL> SELECT db_name,char_set FROM dba_databases WHERE db_name='DB_FEA';
    +---------+----------+
    | DB_NAME | CHAR_SET |
    +---------+----------+
    | DB_FEA  | GB18030  |
    +---------+----------+

二、切换数据库

切换数据库,是指客户端或数据库中间件,与服务端建立连接之后,可以通过以下命令,将当前连接的库信息,修改成新登录的数据库。除必选的数据库名之外,还可指定使用的用户名以及用户密码,具体区别见下方参数说明。

2.1 语法格式

2.2 参数说明

  • database_name:要切换的数据库名,若不指定用户名或密码,则默认使用当前用户及其密码登录到新数据库;
  • PASSWORD = SCONST:指定使用密码 SCONST 登录到新数据库,此时默认切换后使用的用户为当前同名用户;
  • USER = user_name PASSWORD = SCONST:指定使用用户 user_name 和密码 SCONST 登录到新数据库。

2.3 示例

  • 示例1

    切换数据库,不指定用户名或密码。

    sql
    SQL> USE db_test;
    SQL> SELECT current_db() AS current_db;
    +------------+
    | CURRENT_DB |
    +------------+
    | DB_TEST    |
    +------------+
  • 示例2

    切换数据库,指定密码。

    sql
    SQL> USE db_test PASSWORD = 'SYSDBA';
    SQL> SELECT current_db() AS current_db;
    +------------+
    | CURRENT_DB |
    +------------+
    | DB_TEST    |
    +------------+
  • 示例3

    切换数据库,指定用户名和密码。

    sql
    SQL> USE db_test USER = SYSDBA PASSWORD = 'SYSDBA';
    SQL> SELECT current_db() AS current_db;
    +------------+
    | CURRENT_DB |
    +------------+
    | DB_TEST    |
    +------------+

三、修改数据库

支持修改三个属性:数据库名称、时区、备注。

3.1 语法格式

3.2 参数说明

  • database_name:要修改的数据库名;
  • database_new_name:重命名后的数据库名;
  • TIME ZONE SCONST:修改时区,SCONST形式为'GMT+HH:MM''GMT-HH:MM',表示当前时区与格林威治时间的时差,取值范围[-12:59,+14:59];
  • COMMENT SCONST:修改数据库注释信息,SCONST为注释信息字符串,需使用单引号包裹。

3.3 示例

  • 示例1

    将数据库db_test重命名为db_rename,该操作需要数据库管理员在系统库执行,且要求无同名数据库。

    sql
    SQL> ALTER DATABASE db_test RENAME TO db_rename;
    SQL> SELECT db_name,time_zone from dba_databases WHERE db_name='DB_RENAME';
    +-----------+-----------+
    |  DB_NAME  | TIME_ZONE |
    +-----------+-----------+
    | DB_RENAME | GMT+08:00 |
    +-----------+-----------+
  • 示例2

    修改数据库db_rename的时区和注释信息。

    sql
    SQL> ALTER DATABASE db_rename TIME ZONE 'GMT-08:00';
    SQL> ALTER DATABASE db_rename COMMENT 'comment_db';
    SQL> SELECT db_name,time_zone,comments from dba_databases WHERE db_name='DB_RENAME';
    +-----------+-----------+------------+
    |  DB_NAME  | TIME_ZONE |  COMMENTS  |
    +-----------+-----------+------------+
    | DB_RENAME | GMT-08:00 | comment_db |
    +-----------+-----------+------------+

四、删除数据库

删除数据库是高风险操作,此操作将删除该库下所有对象数据,建议在执行前确认数据库名称,避免误删导致数据丢失。

4.1 语法格式

4.2 参数说明

  • IF EXISTS:删除数据库时若不存在则忽略此错误;
  • database_name:数据库名。

4.3 示例

  • 示例1

    将删除用户库db_rename,同时该库下所有对象与数据都将被清除。该操作为不可逆操作,需数据库管理员在系统库执行。

    sql
    SQL> DROP DATABASE db_rename;
  • 示例2

    删除时数据库不存在且支持了IF EXISTS关键字。

    sql
    SQL> DROP DATABASE IF EXISTS db_test;
    Warnning: [E2006] 数据库DB_TEST不存在