当前位置: 首页 > news >正文

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

在数据库管理和开发过程中,经常需要导出数据库对象的定义,以便进行备份、迁移或分析。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 # 包括有关分片表、锁定方式以及扩展数据块大小的信息
http://www.jsqmd.com/news/818798/

相关文章:

  • 标注数据集保姆级教程:从入门到排名第一,看这一篇就够了
  • 基于DNS的TEE认证革新:原理、实现与性能优化
  • 开源无人机远程识别技术突破:ArduRemoteID如何重塑行业合规格局
  • 告别环境配置噩梦:手把手教你用Conda搞定AutoDock-Vina全家桶(含ADFR/Meeko)
  • 高性能鼠标跟随动画实现:从基础原理到mouse-follower库实战
  • 对比直接使用原厂API体验Taotoken在批量任务中的稳定性与成本优势
  • CodeUpdaterBot/ClickUi:多语言依赖自动化更新与可视化管理的工程实践
  • DeepSeek LeetCode 2376.统计特殊整数 C实现
  • LinkSwift:高效解锁八大网盘直链下载的完整实用指南
  • Vue项目重构效率提升300%?Claude智能补全、组件生成与Bug定位实战指南
  • 观察TokenPlan套餐如何帮助团队更可控地管理月度AI支出
  • 数据自主权:解密微信聊天记录本地化导出技术方案
  • EAGLE-3:大模型推理加速的新范式
  • CircuitPython硬件编程入门:从GPIO控制到I2C传感器应用
  • Ceph集群新增osd
  • 从SNAP到ENVI:手把手教你处理哨兵2A数据并计算6种植被指数(附完整代码)
  • 如何制定验证计划
  • 第十一篇:《性能压测基础:JMeter线程模型与压测策略设计》
  • ARM架构定时器系统原理与优化实践
  • ARM架构ELR_EL2寄存器原理与应用详解
  • FPGA异步FIFO设计:跨时钟域数据传输核心技术解析
  • 3分钟免费解密网易云音乐NCM格式:终极音频自由指南
  • ISO13485认证体系代办机构怎么选?2026年最新指南
  • CircuitPython REPL与库管理:嵌入式开发交互调试与项目部署实战
  • AI时代的“新铁饭碗”:那些机器越强、人越贵的岗位
  • 基于Kubernetes的家庭私有云集群搭建:从硬件选型到GitOps实践
  • mls框架实战:从零构建高性能机器学习模型服务
  • NotebookLM支持哪些语言?中文文档未公开的7项本地化缺陷,已验证影响科研笔记生成质量
  • 艾尔登法环存档救星:告别数百小时进度丢失的终极解决方案
  • 3分钟掌握抖音下载神器:douyin-downloader一键下载视频、音乐和直播