最近接到个任务是抽取mysql和Oracle的元数据,大致就是在库里把库、schema、表、字段、分区、索引、主键等信息抽取出来,然后导成excel。

因为刚开始接触元数据,对这个并不了解,就想借助一下万能的百度,结果百度了一圈全是告诉我sql,直接cv就行了。虽然得到了部分数据,但是查的哪个库,哪个表我是完全不清楚的,得到的数据也不是我想要的,只有自己去官网看文档来完成自己的任务。

授人以鱼不如授人以渔,把经验写出来,给跟我一样疑惑的小伙伴一个参考。

什么是元数据

百度百科:元数据Metadata),又称中介数据中继数据,为描述数据的数据(data about data),主要是描述数据属性(property)的信息,用来支持如指示存储位置、历史数据、资源查找、文件记录等功能。元数据算是一种电子式目录,为了达到编制目录的目的,必须在描述并收藏数据的内容或特色,进而达成协助数据检索的目的。都柏林核心集(Dublin Core Metadata Initiative,DCMI)是元数据的一种应用,是1995年2月由国际图书馆电脑中心(OCLC)和美国国家超级计算应用中心(National Center for Supercomputing Applications,NCSA)所联合赞助的研讨会,在邀请52位来自图书馆员、电脑专家,共同制定规格,创建一套描述网络上电子文件之特征。

元数据是关于数据的组织、数据域及其关系的信息,简言之,元数据就是关于数据的数据。

参考文档地址

mysql:https://docs.oracle.com/cd/E17952_01/index.html

Oracle:https://docs.oracle.com/en/database/oracle/oracle-database/index.html

先说MySQL

mysql的元数据都在information_schema库中以视图的形式存在,只能看,不能修改。

进入文档后直接看information_schema的介绍,里面详细介绍了每一个表和字段。

常用的查询mysql元数据sql

-- 数据库
SELECT `schema_name` 库名,`DEFAULT_CHARACTER_SET_NAME` 默认字符集 FROM `SCHEMATA` -- 表
SELECT `TABLE_NAME` 表名,`TABLE_COMMENT` 描述,`TABLE_TYPE` 表类型 FROM`TABLES` -- 字段
SELECT `TABLE_SCHEMA` 库名,`TABLE_NAME` 表名,`COLUMN_NAME` 字段名,`COLUMN_COMMENT` 字段描述,`DATA_TYPE` 字段类型,`CHARACTER_MAXIMUM_LENGTH` 长度,`IS_NULLABLE` 是否为空
FROM `COLUMNS` -- 分区
SELECT `TABLE_SCHEMA` 库名,`TABLE_NAME` 表名,`PARTITION_NAME` 分区名,`PARTITION_ORDINAL_POSITION` 分区编号,`PARTITION_EXPRESSION` 分区函数表达式
FROM `PARTITIONS` WHERE partition_name IS NOT NULL -- 视图
SELECT * FROM `VIEWS` -- 索引
SELECT * FROM STATISTICS -- 主键
SELECT * FROM `COLUMNS` WHERE COLUMN_KEY = 'PRI'

再说Oracle

Oracle里的元数据在静态数据字典视图。

我们是不能直接访问数据字典表的,但可以通过数据字典视图访问其中的信息。要列出可用的数据字典视图,查询视图DICTIONARY就可以。

在静态数据字典视图里有三大类开头的视图:ALL_DBA_USER_

  • ALL_视图显示所有的信息,当前用户,包括从其他架构中对象的当前用户的模式以及信息访问,如果当前用户拥有的权限或角色授权的方式访问这些对象。
  • DBA_视图显示整个数据库中的所有相关信息。DBA_视图仅供管理员使用。只有拥有SELECT ANY DICTIONARY权限的用户才能访问它们。此权限DBA在系统最初安装时分配给角色。
  • USER_视图显示从当前用户的模式中的所有的信息。查询这些视图不需要特殊权限。

ALL_DBA_以及USER_对应于单个数据字典表视图通常是几乎相同的。

官网:

然后就可以通过文档说明找到对应的视图。

常用的sql:

-- 模式
SELECT * FROM DBA_TABLESPACES; -- 表
select *
from user_tables ut LEFT JOIN user_tab_comments utc ON ut.TABLE_NAME = utc.TABLE_NAME; -- 字段
select t.TABLE_NAME 表名,t.COLUMN_NAME 描述,t.DATA_TYPE 类型,t.DATA_LENGTH 长度,t.NULLABLE 是否为空,t.DATA_DEFAULT 默认值,s.comments 描述
from user_tab_columns t LEFT JOIN user_col_comments s ON t.COLUMN_NAME = s.COLUMN_NAME WHERE t.TABLE_NAME ='ASSET_BASE_TABLE'; -- 分区
SELECT * FROM USER_PART_KEY_COLUMNS; -- 索引
SELECT * FROM USER_INDEXES; -- 视图
SELECT * FROM USER_VIEWS; -- 主键
select cu.* from USER_CONS_COLUMNS cu, USER_CONSTRAINTS au
where cu.constraint_name = au.constraint_name and au.constraint_type = 'P';

以上就是我个人查找元数据的流程,如有不对的地方,欢迎在评论区指正。


MySQL、Oracle元数据抽取分析的更多相关文章

  1. 数据库的元数据抽取SQL

    一.数据库驱动类.端口.默认用户名密码 数据库 驱动 端口 用户名 密码 MySQL com.mysql.jdbc.Driver 3306 root root DB2 com.ibm.db2.jcc. ...

  2. 数据库管理工具神器-DataGrip,可同时管理多个主流数据库[SQL Server,MySQL,Oracle等]连接

    前言 DataGrip:Jet Brains出品的一款数据库管理工具(没错,是Jet Brains出品,必属精品).DataGrip整合集成了当前主流数据库(如:SQL Server, MySQL, ...

  3. Java与SQL Server, MySql, Oracle, Access的连接方法以及一些异常解决

    Java与SQL Server, MySql, Oracle, Access的连接方法以及一些异常解决 I. 概述 1.1 JDBC概念 JDBC(Java Database Connectivity ...

  4. Oracle内存全面分析

    Oracle内存全面分析 Oracle的内存配置与oracle性能息息相关.而且关于内存的错误(如4030.4031错误)都是十分令人头疼的问题.可以说,关于内存的配置,是最影响Oracle性能的配置 ...

  5. MySQL 慢查询日志分析及可视化结果

    MySQL 慢查询日志分析及可视化结果 MySQL 慢查询日志分析 pt-query-digest分析慢查询日志 pt-query-digest --report slow.log 报告最近半个小时的 ...

  6. Mysql 死锁的详细分析方法

    用数据库的时候,偶尔会出现死锁,针对我们的业务系统,出现死锁的直接结果就是系统卡顿.客户找事儿,所以我们也在想尽全力的消除掉数据库的死锁.出现死锁的时候,如果只是想解锁,用show full proc ...

  7. sql server 导出的datetime结果 CAST(0x00009E0E0095524F AS DateTime) 如何向mysql,oracle等数据库进行转换

    1. 处理 sql server 导出的 datetime 类型的字段 在进行sql server向mysql等其他数据进行迁移数据时,会发现使用sql server导出的datetime类型的结果是 ...

  8. 24、jQuery常用AJAX-API/Java调用MySQL / Oracle过程与函数

      1)掌握jQuery常用AJAX-API 2)掌握Java调用MySQL / Oracle过程与函数 一)jQuery常用AJAX-API 目的:简化客户端与服务端进行局部刷新的异步通讯 (1)取 ...

  9. [转载]mysql慢日志文件分析处理

    原文地址:mysql慢日志文件分析处理作者:maxyicha mysql有一个功能就是可以log下来运行的比较慢的sql语句,默认是没有这个log的,为了开启这个功能,要修改my.cnf或者在mysq ...

随机推荐

  1. JavaScript高级程序设计读后感(一)之零碎知识点查漏补缺

    目录 1-script延迟脚本defer及异步脚本async,区别及应用场景 2-未声明的变量,未初始化变量 3-Number parseInt 字符串转数值 ,进制转换 4-undefined &a ...

  2. 【Tool】IntelliJ 搭建Node.js环境

    IntelliJ IDEA 开发 Node.js 2019-07-29  14:12:34  by冲冲 1. 配置插件 在IDEA的 file -> setting -> Plugins, ...

  3. .net打独立运行环境遇到无法trim遇到的bug

    背景介绍 工作中我用到kotlin写代码,在orm上ktorm是一款非常优秀的操作db的框架,我喜欢用它所以我写了一个插件能够增加我的工作效率,这款idea插件的主体逻辑是.net开发的(没错是跨平台 ...

  4. Atcoder Regular Contest 061 D - Card Game for Three(组合数学)

    洛谷题面传送门 & Atcoder 题面传送门 首先考虑合法的排列长什么样,我们考虑将每次操作者的编号记录下来形成一个序列(第一次 A 操作不计入序列),那么显然这个序列中必须恰好含有 \(n ...

  5. C++ and OO Num. Comp. Sci. Eng. - Part 3.

    2. Expressions and Statements 声明是将一个种类型的变量引入程序的语句. 作用域 作用域又一对花括号限定,在所有花括号之外的为全局作用域. 在作用域内声明的变量为局部变量. ...

  6. 【机器学习与R语言】11- Kmeans聚类

    目录 1.理解Kmeans聚类 1)基本概念 2)kmeans运作的基本原理 2.Kmeans聚类应用示例 1)收集数据 2)探索和准备数据 3)训练模型 4)评估性能 5)提高模型性能 1.理解Km ...

  7. Java 读取TXT文件的多种方式

    1).按行读取TXT文件package zc;import java.io.BufferedReader;import java.io.File;import java.io.FileNotFound ...

  8. 修改linux系统下mysql数据库登陆密码(密码忘记)

    报错:Access denied for user 'root'@'localhost' (using password: NO) 解决方案: 1. 检查mysql服务是否启动,如果启动,关闭mysq ...

  9. KMP算法思路

    题目 给定一个字符串\(S\),求\(M\)字符串是否是\(S\)字符串中的子串.如果是,返回\(M\)对应\(S\)的第一个下标,否则返回-1. 例如:S串为a b c d a b c d a b ...

  10. Java8使用并行流(ParallelStream)注意事项

    Java8并行流ParallelStream和Stream的区别就是支持并行执行,提高程序运行效率.但是如果使用不当可能会发生线程安全的问题.Demo如下: public static void co ...