MySQL和Oracle对比学习之数据字典元数据(r4笔记第33天)
发布日期:2021-06-30 13:30:10 浏览次数:2 分类:技术文章

本文共 10552 字,大约阅读时间需要 35 分钟。

MySQL和Oracle虽然在架构上有很大的不同,但是如果从某些方面比较起来,它们有些方面也是相通的。毕竟学习的主线是MySQL,所以会从MySQL的角度来对比Oracle的一些功能。大体总结了以下的内容,欢迎大家拍砖,查看当前的数据库名mysql> SELECT DATABASE();+------------+| DATABASE() |+------------+| test |+------------+1 row in set (0.00 sec)+++ Oracle的实现方法 ++++因为架构的不同,所以列举了数据库,实例级的查询方法。方法一,通过数据库参数来查看SQL> show parameter instance_nameNAME TYPE VALUE------------------------------------ --------------------------------- ------------------------------instance_name string TRUABP4方法二:通过数据字典来查看数据库级SQL> select name from v$database;NAME---------------------------TRUABP4实例级SQL> select instance_name from v$instance;INSTANCE_NAME------------------------------------------------TRUABP4方法三:通过内置函数来实现,这种方法相比前两种更为通用。SQL> select sys_context('USERENV','instance_name') from dual;SYS_CONTEXT('USERENV','INSTANCE_NAME')----------------------------------------------------TRUABP4得到数据库创建的脚本mysql> show create database mysql;+----------+------------------------------------------------------------------+| Database | Create Database |+----------+------------------------------------------------------------------+| mysql | CREATE DATABASE `mysql` /*!40100 DEFAULT CHARACTER SET latin1 */ |+----------+------------------------------------------------------------------+1 row in set (0.00 sec)+++ Oracle的实现方法 ++++CREATE DATABASE mynewdb USER SYS IDENTIFIED BY pz6r58 USER SYSTEM IDENTIFIED BY y1tz5p LOGFILE GROUP 1 ('/u01/oracle/oradata/mynewdb/redo01.log') SIZE 100M, GROUP 2 ('/u01/oracle/oradata/mynewdb/redo02.log') SIZE 100M, GROUP 3 ('/u01/oracle/oradata/mynewdb/redo03.log') SIZE 100M MAXLOGFILES 5 MAXLOGMEMBERS 5 MAXLOGHISTORY 1 MAXDATAFILES 100 MAXINSTANCES 1 CHARACTER SET US7ASCII NATIONAL CHARACTER SET AL16UTF16 DATAFILE '/u01/oracle/oradata/mynewdb/system01.dbf' SIZE 325M REUSE EXTENT MANAGEMENT LOCAL SYSAUX DATAFILE '/u01/oracle/oradata/mynewdb/sysaux01.dbf' SIZE 325M REUSE DEFAULT TEMPORARY TABLESPACE tempts1 TEMPFILE '/u01/oracle/oradata/mynewdb/temp01.dbf' SIZE 20M REUSE UNDO TABLESPACE undotbs DATAFILE '/u01/oracle/oradata/mynewdb/undotbs01.dbf' SIZE 200M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED;查看当前的用户mysql> SELECT USER();+----------------+| USER() |+----------------+| root@localhost |+----------------+1 row in set (0.00 sec)+++ Oracle的实现方法 ++++方法一,通过sql*plus中的show user命令杰克得到SQL> show userUSER is "N1"方法二:通过内置函数来实现,比较通用的方式。SQL> select sys_context('USERENV','current_user') from dual;SYS_CONTEXT('USERENV','CURRENT_USER')--------------------------------------------------N1查看含有的表信息mysql> show tables; +---------------------------+| Tables_in_mysql |+---------------------------+ | columns_priv || db | | event | | func || general_log | | help_category | | time_zone_transition_type | | user | +---------------------------+28 rows in set (0.00 sec) +++ Oracle的实现方法 ++++SQL> select *from cat where rownum<3;TABLE_NAME TABTYPE ------------------ --------------------- AAA TABLEAAAA TABLE方法二:通过tab同义词来实现SQL> select *from tab where rownum<3;TNAME TABTYPE CLUSTERID------------------ --------------------- ----------AAA TABLEAAAA TABLE方法三:通过数据字典user_tables来实现SQL> select table_name from user_tables where rownum<3;TABLE_NAME------------------AAAAAAA查看指定数据库中的表信息比如查询数据库名为mysql里面含有的表。mysql> show tables from mysql; +---------------------------+ | Tables_in_mysql | +---------------------------+ | columns_priv | | db | | event | | func | | general_log | | help_category | | help_keyword | | help_relation | | time_zone_transition_type | | user | +---------------------------+28 rows in set (0.00 sec) +++ Oracle的实现方法 ++++SQL> select table_name from all_tables where owner='REFWORK';TABLE_NAME------------------------------OFFER查看test数据库中的表temp结构>mysqlshow test tempDatabase: test Table: temp+---------+-------------+-----------------+------+-----+---------+--------------| Field | Type | Collation | Null | Key | Default | Extra+---------+-------------+-----------------+------+-----+---------+--------------| id | int(11) | | NO | PRI | | auto_incremen| char | char(50) | utf8_general_ci | NO | MUL | | | varchar | varchar(50) | utf8_general_ci | NO | MUL | | | text | text | utf8_general_ci | NO | MUL | |+---------+-------------+-----------------+------+-----+---------+--------------+++ Oracle的实现方法 ++++可以通过all_tab_cols来实现select table_name,column_name from all_tab_cols where owner='N1' and table_name='TEST';查看表的建表语句mysql> show create table event\G *************************** 1. row *************************** Table: event Create Table: CREATE TABLE `event` ( `db` char(64) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '', `name` char(64) NOT NULL DEFAULT '', `body` longblob NOT NULL, `definer` char(77) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '', `execute_at` datetime DEFAULT NULL, `body_utf8` longblob, PRIMARY KEY (`db`,`name`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='Events' 1 row in set (0.00 sec) +++ Oracle的实现方法 ++++oracle中一直直观的方式是使用dbms_metadata.get_ddl来实现 SQL> select DBMS_METADATA.GET_DDL(object_type=>'TABLE',name=>'CSM_OFFER')from dualDBMS_METADATA.GET_DDL(OBJECT_TYPE=>'TABLE',NAME=>'CSM_OFFER')-------------------------------------------------------------------------------- CREATE TABLE "REFWORK"."OFFER" ( "OWNER" VARCHAR2(30) NOT NULL ENABLE, "OBJECT_NAME" VARCHAR2(30) NOT NULL ENABLE, "SUBOBJECT_NAME" VARCHAR2(30), "OBJECT_ID" NUMBER NOT NULL ENABLE, "DATA_OBJECT_ID" NUMBER, "OBJECT_TYPE" VARCHAR2(19), "CREATED" DATE NOT NULL ENABLE, "LAST_DDL_TIME" DATE NOT NULL ENABLE, "TIMESTAMP" VARCHAR2(19)...得到表结构的信息mysql> desc columns_priv -> ;+-------------+----------------------------------------------+------+-----+-----| Field | Type | Null | Key | Defa+-------------+----------------------------------------------+------+-----+-----| Host | char(60) | NO | PRI || Db | char(64) | NO | PRI || User | char(16) | NO | PRI || Table_name | char(64) | NO | PRI || Column_name | char(64) | NO | PRI || Timestamp | timestamp | NO | | CURR| Column_priv | set('Select','Insert','Update','References') | NO | |+-------------+----------------------------------------------+------+-----+-----7 rows in set (0.01 sec)+++ Oracle的实现方法 ++++这一点完全一样SQL> desc offer Name Null? Type ----------------------------------------- -------- ---------------------------- OWNER NOT NULL VARCHAR2(30) OBJECT_NAME NOT NULL VARCHAR2(30) SUBOBJECT_NAME VARCHAR2(30) OBJECT_ID NOT NULL NUMBER DATA_OBJECT_ID NUMBER OBJECT_TYPE VARCHAR2(19) CREATED NOT NULL DATE LAST_DDL_TIME NOT NULL DATE TIMESTAMP VARCHAR2(19) STATUS VARCHAR2(7) TEMPORARY VARCHAR2(1) GENERATED VARCHAR2(1) SECONDARY VARCHAR2(1)得到表中的列信息mysql> show columns from columns_priv;+-------------+----------------------------------------------+------+-----+-----| Field | Type | Null | Key | Defa+-------------+----------------------------------------------+------+-----+-----| Host | char(60) | NO | PRI || Db | char(64) | NO | PRI || User | char(16) | NO | PRI || Table_name | char(64) | NO | PRI || Column_name | char(64) | NO | PRI || Timestamp | timestamp | NO | | CURR| Column_priv | set('Select','Insert','Update','References') | NO | |+-------------+----------------------------------------------+------+-----+-----7 rows in set (0.01 sec)+++ Oracle的实现方法 ++++通过user_tab_cols来实现。 SQL> select column_name from user_tab_cols where table_name='OFFER';COLUMN_NAME------------------------------OWNEROBJECT_NAMESUBOBJECT_NAMEOBJECT_IDDATA_OBJECT_IDOBJECT_TYPECREATEDLAST_DDL_TIME得到索引的信息mysql> show index from columns_priv;+--------------+------------+----------+--------------+-------------+-----------| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation+--------------+------------+----------+--------------+-------------+-----------| columns_priv | 0 | PRIMARY | 1 | Host | A| columns_priv | 0 | PRIMARY | 2 | Db | A| columns_priv | 0 | PRIMARY | 3 | User | A| columns_priv | 0 | PRIMARY | 4 | Table_name | A| columns_priv | 0 | PRIMARY | 5 | Column_name | A+--------------+------------+----------+--------------+-------------+-----------5 rows in set (0.00 sec)+++ Oracle的实现方法 ++++通过User_indexes来实现SQL> select index_name,index_type from user_indexes where table_name='OFFER';INDEX_NAME INDEX_TYPE------------------------------ ---------------------------INX_OFFER NORMAL基于列的模糊查找mysql> show columns from columns_priv like '%ab%';+------------+----------+------+-----+---------+-------+| Field | Type | Null | Key | Default | Extra |+------------+----------+------+-----+---------+-------+| Table_name | char(64) | NO | PRI | | |+------------+----------+------+-----+---------+-------+1 row in set (0.01 sec)+++ Oracle的实现方法 ++++SQL> select column_name from user_tab_cols where table_name='OFFER' and column_name like '%OBJE%';COLUMN_NAME------------------------------OBJECT_NAMESUBOBJECT_NAMEOBJECT_IDDATA_OBJECT_IDOBJECT_TYPE精确查找列名mysql> show columns from columns_priv where field='User';+-------+----------+------+-----+---------+-------+| Field | Type | Null | Key | Default | Extra |+-------+----------+------+-----+---------+-------+| User | char(16) | NO | PRI | | |+-------+----------+------+-----+---------+-------+1 row in set (0.01 sec)+++ Oracle的实现方法 ++++还是使用usre_tab_cols,一用倒底。SQL> select column_name from user_tab_cols where table_name='OFFER' and column_name= 'OBJECT_NAME';COLUMN_NAME------------------------------OBJECT_NAME查看进程相关的信息mysql> show processlist -> ;+----+------+-----------------+-------+---------+------+-------+----------------| Id | User | Host | db | Command | Time | State | Info+----+------+-----------------+-------+---------+------+-------+----------------| 3 | root | localhost:49479 | mysql | Query | 0 | init | show processlis+----+------+-----------------+-------+---------+------+-------+----------------1 row in set (0.00 sec)+++ Oracle的实现方法 ++++Oracle中提供了比较全面的视图,可以通过v$session,v$process来查找USERNAME MACHINE PROGRAM SID------------------------------ -------------------- ------------------------- ---------- REFWORK rac1 sqlplus@rac1 (TNS V1-V3) 257select *from v$process;查看数据字典的信息>mysqlshow information_schemaDatabase: information_schema+---------------------------------------+| Tables |+---------------------------------------+| CHARACTER_SETS || COLLATIONS || COLLATION_CHARACTER_SET_APPLICABILITY || COLUMNS || COLUMN_PRIVILEGES || ENGINES || EVENTS || FILES || GLOBAL_STATUS || GLOBAL_VARIABLES || KEY_COLUMN_USAGE || OPTIMIZER_TRACE || PARAMETERS || PARTITIONS || PLUGINS || PROCESSLIST || PROFILING || REFERENTIAL_CONSTRAINTS || ROUTINES |+---------------------------------------++++ Oracle的实现方法 ++++Oracle中的视图更加丰富,除了常说的数据字典表,还有动态性能视图,调优诊断很是方便。select *from dict; --数据字典表select *from v$fixed_table;--动态性能视图表

转载地址:https://jeanron100.blog.csdn.net/article/details/102506989 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:通过shell绑定系统进程调优 (r4笔记第34天)
下一篇:一条全表扫描sql语句的分析 (r4笔记第32天)

发表评论

最新留言

初次前来,多多关照!
[***.217.46.12]2024年04月08日 11时23分25秒