南大通用 GBase 8s 之 dbschema 导出数据库对象定义介绍

0 阅读6分钟

原文链接:www.gbase.cn/community/p…
更多精彩内容尽在南大通用GBase技术社区,南大通用致力于成为用户最信赖的数据库产品供应商。

在数据库管理和开发过程中,经常需要导出数据库对象的定义,以便进行备份、迁移或分析。GBase 8s 提供了  dbschema  工具,能够方便地导出各种数据库对象的定义。本文将详细介绍  dbschema  的使用方法,帮助你快速掌握这一实用工具。

前提:
DBA 用户或对数据库具有 Connect 或 Resource 权限,才可对数据库运行 dbschema。

作用:
dbschema显示复制数据库对象所需的 SQL 语句(模式),可以用于以下用途:
显示 UPDATE STATISTICS 语句创建的分发。
显示 Information Schema 视图的模式
显示用于创建对象(例如数据库、表、序列、同义词、存储空间、块、日志、角色和特权)的模式
显示用于创建对象(例如数据库、表、序列、同义词、角色和特权)的模式
显示为数据库中的一个或多个表存储的分发信息
显示有关用户定义的数据类型和行类型的信息

命令格式:

dbschema { [-q] [-t tabname] [-s user] [-p user] [-r rolename] [-f procname][-hd tabname] 
-d dbname [-seq sequence] [-o package_name or proc_name or all] [-l [num]] [-dlk dblinkname]
[[-u[i|a] udtname] | [-u all]] [-it [Type]] [-ss [-si]] [filename] [-sl length] [-nw] }
{ [-q] -c [-ns] [filename] }

命令参数:

-q      Suppress the db version from header.
不显示header中的数据库版本
-t      table name or "all" for all tables.
指定表名,"all"指定所有表
-s      synonyms created by user name or "all" for all users.
生成该用户所创建同义词的信息,"all"指定所有用户
-p      permissions granted to user name or "all" for all users.
生成该用户被授予权限的信息,"all"指定所有用户
-r      create and grant of the role or "all" for all roles :Not a valid option for SE.
生成该角色创建和授予权限的信息,"all"指定所有角色 
-f      SPL routine name or "all" for all SPL routines.
指定SPL例程名,"all"指定所有SPL例程
-hd     Histograms of the distribution for columns of of a specified table, a specific table                 column, or "all" for all tables. 
生成表的所有列、表的某列的分发信息,"all"指定所有表
-d      database name.
指定数据库名
-seq    generate sequence specific syntax.
生成指定序列对象的定义
-ui     Prints the definition of a user-defined data type, including type inheritance.
打印用户定义数据类型的定义,包括类型继承
-ua     Prints the definition of a user-defined data type, including functions and casts defined         over an opaque or constructor type.
打印用户定义数据类型的定义,包括定义在不透明或构造类型上的函数和转换
-u all   Prints the definitions of all user-defined data types, including all functions and casts defined over the types.
打印所有用户定义数据类型的定义,包括定义在类型上的函数和转换
-it     Type of isolation can be DR, CR, CS, RR or LC.
设置隔离类型,可选项DR, CR, CS, RR或LC
DR = Dirty Read脏读(等同于TRANSACTION_READ_UNCOMMITTED)
CR = Committed Read已落实读(等同于TRANSACTION_READ_COMMITTED)
CS = Cursor Stability游标稳定性(等同于TRANSACTION_READ_COMMITTED)
RR = Repeatable Read可重复读(等同于TRANSACTION_REPEATABLE_READ)
LC = Committed Read LAST COMMITTED已落实读(上次落实)
(等同于TRANSACTION_LAST_COMMITTED)
-l      set lock mode to wait [number] optional.
设置锁等待时长为[number]秒
-ss     generate server specific syntax.
生成特定于服务器的信息
-si     excludes the generation of index storage clauses for non-fragmented tables.
排除为非分区表生成索引存储子句
-sl     the maximum length (in bytes) of unformatted CREATE TABLE and ALTER RAGMENT statements.
指定未格式化的CREATE TABLE和ALTER RAGMENT语句的最大长度(以字节为单位)
filename  the name of file that the SQL script goes in.
文件名是 SQL 脚本保存的文件名。
-c      generate storage space and logical log definitions.
生成存储空间和逻辑日志定义
-ns     generate commands in non-sql format.
以非 SQL 格式生成命令
-nw    generate file with no specified owner.
生成未指定所有者的情况下创建对象的定义
-o      Package routine name or all for all packages.
指定包例程名,"all"指定所有包
-dlk    dblink name
指定数据库链接名

使用示例:

示例版本:GBase8sV8.8_3.6.1_1

1.导出数据库中指定表/视图的定义
dbschema -d <db_name> -t <tab_name/view_name> # 输出到命令行
dbschema -d <db_name> -t <tab_name/view_name> db.sql # 输出到当前路径的db.sql文件
dbschema -d <db_name> -t <tab_name/view_name> -ss db.sql # 输出该表更详细的定义到db.sql文件

注:dbschema -ss 选项生成特定于服务器的信息。在除 SE 以外的所有 GBase 8s 数据库服务器中,-ss 选项总是生成锁定方式、扩展数据块大小以及数据库空间名称(如果数据库空间名称与数据库的数据库空间不同)。另外,如果表被分片,那么-ss 选项将显示有关分片存储策略的信息。
指定 dbschema -ss 选项时,输出还会显示为特定用户或在整个模式中发出的所有 GRANT FRAGMENT 语句。
只有和-ss 选项一起使用时才可用的-si 选项为非分段表排除索引存储子句的生成。
如果数据库空间包含多重分区,将在输出中显示数据库空间分区名称。

 

示例:

(1)创建分区表tabrrage1_1:

(2)输出分区表tabrrage1_1的定义

(3)使用-ss选项输出分区表tabrrage1_1的详细定义(包括有关分片表、锁定方式以及扩展数据块大小的信息)

 

2.导出数据库中所有的表/视图/触发器的定义

参数 -t all 导出所有表对象及涉及触发器,Oracle模式下创建的触发器导出格式为Oracle 语法

dbschema -d <db_name> -t all db.sql

示例:

[gbasedbt@gbase201 gbase361_1]$ dbschema -d testdb -t all db_t.sql
Your evaluation license will expire on 2025-07-10 00:00:00
DBSCHEMA Schema Utility       GBASE-SQL Version 12.10.FC4G1TL
[gbasedbt@gbase201 gbase361_1]$ vim db_t.sql

 

 

3.导出数据库中GBase模式下函数/存储过程的定义

dbschema -d <db_name> -f <func_name/proc_name> db.sql # 指定GBase模式下创建的函数或存储过程名
dbschema -d <db_name> -f all db.sql # 导出GBase模式下创建的全部函数和存储过程

示例:

[gbasedbt@gbase201 gbase361_1]$ dbschema -d testdb -f g_func1
DBSCHEMA Schema Utility       GBASE-SQL Version 12.10.FC4G1TL
CREATE FUNCTION "gbasedbt".g_func1()
RETURNS int
BEGIN
 --enter function body here
END
END FUNCTION
;
[gbasedbt@gbase201 gbase361_1]$ dbschema -d testdb -f all db_f.sql
DBSCHEMA Schema Utility       GBASE-SQL Version 12.10.FC4G1TL
[gbasedbt@gbase201 gbase361_1]$ vim db_f.sql

 

4.导出数据库中Oracle模式下函数/存储过程/包的定义

-o 对象名(例如:-o pkg1)导出指定数据库对象,-o all导出ORACLE模式下创建的所有包、存储过程、函数等数据库对象

dbschema -d <db_name> -o <func_name/proc_name/pkg_name> db.sql # 指定Oracle模式下创建的函数、存储过程或包名
dbschema -d <db_name> -o all db.sql # 导出Oracle模式下创建的全部函数、存储过程和包

示例:


[gbasedbt@gbase201 gbase361_1]$ dbschema -d testdb -o o_func1
DBSCHEMA Schema Utility       GBASE-SQL Version 12.10.FC4G1TL
set environment sqlmode 'oracle';
CREATE
OR REPLACE FUNCTION o_func1 (c IN NUMBER) RETURN NUMBER IS
BEGIN
 RETURN 100;
END
;
/
set environment sqlmode 'gbase';
[gbasedbt@gbase201 gbase361_1]$ dbschema -d testdb -o all db_o.sql
DBSCHEMA Schema Utility       GBASE-SQL Version 12.10.FC4G1TL
[gbasedbt@gbase201 gbase361_1]$ vim db_o.sql

 

5.导出数据库中对用户或角色的授权信息

dbschema -d <db_name> -p <use_rname> # 指定用户
dbschema -d <db_name> -p all # 导出所有用户的授权信息
dbschema -d <db_name> -r <role_name> # 指定角色
dbschema -d <db_name> -r all # 导出所有角色的授权信息

6.导出数据库中的所有对象的定义

使用 dbschema 且只指定了数据库名称时,等同于使用带所有选项(除了-hd 和 -ss 选项)的 dbschema。另外,如果为数据库创建了“信息模式”视图,那么将显示此模式。 

dbschema -d <db_name> # 导出数据库的所有对象
dbschema -d <db_name> -ss # 包括有关分片表、锁定方式以及扩展数据块大小的信息

 

本文的介绍了 GBase 8s 中  dbschema  工具的使用方法,包括各种参数的含义和实际应用示例。 dbschema  能够满足不同场景下导出数据库对象定义的需求。希望这些内容能帮助你在数据库管理和开发中更高效地使用  dbschema 。如果你在使用过程中遇到任何问题,欢迎随时在社区中提问,我们在这里为你提供支持!

原文链接:www.gbase.cn/community/p…
更多精彩内容尽在南大通用GBase技术社区,南大通用致力于成为用户最信赖的数据库产品供应商。