数据库介绍 目前主流的关系型数据库有mysql、oracle、db2、sqlserver、sybase等 sqlserver/access 微软 瑞典mysql 由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品 美国oracle 甲骨文 美国sybase公司 赛贝斯 美国IBM公司 DB2 小型数据库 access 基本没有安全性 salary<1k 中型数据库 mysql sqlserver 有一定的安全性 <1w 大型数据库 oracle sybase db2 安全性最高 9k~10w 数据库相关概念 1.数据库 DB,DataBase 数据的仓库,用于存放数据 2..数据库管理系统 DBMS,Database Management System 用于管理数据库的软件 负责数据的存储、检索、安全、数据的一致性控制 3.关系型数据库 形式上 由一组表、表之间的关系组成 这些表格的作用是装载数据 你们现在知道的都是关系型数据库 *底层上: 是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据 关系模型由关系数据结构、关系操作集合、关系完整性约束三部分组成 集合代数 范畴: 数学-集合代数 创始人:笛卡尔 简介:集合代数发展并描述了集合的基本性质和规律,集合论运算,如并集、交集、补集,差集,幂集,以及集合的关系,如等于、包含。这门学科系统研究如何来表达和进行上述的运算和关系的操作 4.表 以二维的形式对数据进行组织 每个表有0行或多行数据 每一行数据有一列或多列 行,记录,描述一个实体的信息 列,字段或属性,用于描述实体的一个特性 *实体 某一领域内 具体存在的一个事物 实体可以是有形的,也可以是无形的,实体也可以是抽象的事物或联系 如教学领域实体: 教师 学生 班级 课程 总统??? 5.实体之间的关系 1:1 国家--总统 对于一个实体集中的某个实体,在另一个实体集中最多只有一个实体与之对应,反之,亦然。 关系是有方向的,但具体描述时一般不细分 1:n 班主任--学生 对于实体集A中的每个实体,实体集B中可以有多个实体与之对应; 反之,对于实体集B中的某个实体,实体集A中最多只有一个实体与之对应。 或对于实体集B中的一组实体,实体集A中最多只有一个实体与之对应 n:n 课程--学生 对于实体集A中的实体,实体集B中可以有多个实体与之对应; 对于实体B中的某个实体,实体集A中可以有多个实体与之对应。 6.E-R图 实体之间的关系可以使用E-R图来表示 E-R图的三个元素:实体(矩形)、字段(椭圆形)、关系(菱形) 7.数据库三大范式 1、一张表必须有一个主键(逻辑主键) 和业务无关的主键 因为业务是会变的 2、外键引用主键 不再去设计外键约束,即逻辑外键 3、不要出现冗余字段 实际开发中 第三个原则 有时候不会遵守 一定要冗余 1、保证数据的正确性 2、提高查询效率 空间换时间 时间换空间 8.SQL structured query language 结构化 查询 语言 是一种语言 是一种规范标准 几乎所有主流的关系型数据库都支持 ANSI,American National Standard Institute,SQL语言标准:SQL-86、SQL-89、SQL-92、SQL-99 为了在各个数据库厂商之间取得更大的统一性, 美国国家标准学会(American National Standards Institute,ANSI) 于1986年发布了第一个SQL标准,并于1989年发布了第二个版本,该版本已经被广泛地采用。 ANSI在1992年更新了SQL标准的版本,即SQL92和SQL2, 并于1999年再次更新为SQL99和SQL3标准。 在每一次更新中,ANSI都在SQL中添加了新特性,并在语言中集成了新的命令和功能。 现在,SQL标准由ANSI和国际标准化组织(International Standards Organization,ISO)作为ISO/IEC 9075标准维护。 最新发布的SQL标准是SQL:2008,下一版本的发布工作已经在进行之中,它将包含RDBMS在收集或分发数据方式上的新发展。 Oracle完全遵从ANSI的SQL标准,Oracle9i/Oracle 10g完全遵从了SQL-99标准 SQL包含了: Data Definition,数据定义语言,创建、修改、删除数据库对象,create、alter、drop Data Manipulation,数据操作语言,改变表中存放的数据,insert、delete、update Data Query,数据查询语言,检索数据库数据,select Data Control,数据控制语言,授予和收回权限,grant、revoke Transactional Control,事务控制语言,维护数据的一致性,commit、rollback、savepoint,DDL语句和DCL语句会导致事务提交 SQL关键字不区分大小写 对象名和列名不区分大小写 变量名不区分大小写 字符值区分大小写 客户端把SQL语句发送给服务器,服务器对SQL语句进行编译、执行,并把执行的结果发回给客户端 9.数据库对象 数据库中客观存在的个体(东西),都是对象 Oracle中: 用户 user 表 table 约束 constraint 序列 sequence 表空间 tablespace 视图 view 索引 index 存储过程procedure 函数 function 触发器 trigger 包 package 彻底卸载Oracle 重装操作系统 或者 卸载Oracle的步骤: 1.停止Oracle的所有服务 控制面板-->管理工具-->服务-->右键-->发送到-->桌面快捷方式 2.用DBCA删除数据库 OracleService<SID>服务也会被删除 3.用Oracle Universal Intaller自动删除Oracle一些组件 Universal 普遍的,一般的; 通用的,万能的; universal installer 通用安装程序 4.手动删除Oracle的其他组件 1.删除与Oracle相关的注册表 开始+R-->regedit 搜索inst_loc删除,并记录值C:\Program Files (x86)\Oracle\Inventory 搜索带ora、orcl、oracle、enumora的注册表并删除 2.环境变量 path、classpath、oracle_home、oracle_sid、tns_admin、jserv、wv_gateway_cfg 3.重启操作系统 4.目录与文件 删除与Oracle相关的所有目录和文件 inst_loc 安装目录 环境变量oracle_base C:\Users\Administrator\AppData\Local\Temp下与Oracle相关的文件(xp:documents and settings/user_name/local_settings/temp) 5.启动菜单 注意 用DBCA删除数据库或用Oracle Universal Intaller删除Oracle组件的过程中, 如果出现错误,请忽略这些错误,继续执行后面的步骤 [2.删除ASM] Automatic Storage Management 1.设置ASM实例的名字:set oracle_sid = +asm; 2.登录ASM :sqplus /nolog ? conn sys as sysasm; 3.查看哪些数据库实例正在使用ASM实例,关闭数据库或删除表空间:select instance_name from v$asm_client; 4.查看有哪些磁盘组:select name from v$asm_diskgroup; 5.删除磁盘组:drop diskgroup diskgroupName including comments; 6.关闭asm实例:shutdown 7.从操作系统中删除asm服务:oradim -delete asmsid +asm; 安装Oracle 100M+内存,运行时所需最小内存,建议在3G+ 1.5G+硬盘 推荐9i、10g,原因:小。现在最新oracle12c win7安装10g-32,要以兼容模式运行 企业版,安装内容比较全面 标准版,安装的组件比企业版少,节省空间 个人版,只安装最基本的组件,只支持单用户 定制安装,用户选择需要安装的组件 先决条件检查,检查软硬件是否满足Oracle的最低安装要求 数据库 由一组文件构成 物理结构 操作系统文件 ORACLE_HOME/oradata/orcl 数据文件 .dbf 是数据的物理载体 数据库中的所有数据都是存放在数据文件中的 如:数据库表中的数据 重做日志文件 .log 用于记录对数据库所做的所有更改 如:修改了表中的数据、修改了表等 在发生系统故障、用户误操作时,可用它对数据库进行恢复 只有当事务的重做日志条目被成功写到磁盘上的重做日志文件中,事务的提交才算完成 控制文件 .ctl 二进制文件 用于记录数据库的物理结构 如: 数据库名、数据库的数据文件和日志文件的名字和位置等信息 比如数据库的数据文件、重做日志文件、数据库的名称、数据库创建信息、表空间信息、数据文件的状态、日志文件信息、备份信息、检查点信息等 数据库只是一组文件组成的一个集合, 如果让我们自己去管理这些文件、访问、维护文件中的数据,即文件操作, 将会使得数据库的使用变得非常复杂与难以使用 如果你自己实现了,那么恭喜你,你实现了一个DBMS (DBMS)实例 一系列的内存和后台进程 作用 装载数据库 操作、管理数据库 对外提供数据库的访问服务 所以可以这么理解 大家访问Oracle数据库, 其实都是在访问一个实例 sql>startup nomount 启动了一个实例,现在内存分配了,进程在运行,除数据库所有的东西都启动了 也可以不装载数据库单独运行 sql>alter database mount 根据init.ora文件中配置的控制文件位置,找到控制文件,根据控制文件中配置的信息,定位到其他数据库文件,重做日志文件、数据文件、临时文件 sql>alter database open 数据库可供任何人通过这个实例访问 Oracle服务 OracleService+系统标识符,数据库启动的基础,只有该服务启动了,Oracle数据库才能正常启动 OracleOraDb10g_home1TNSListener,为客户端提供的监听服务,只有该服务启动了,远程客户端才能连接到服务器 数据库和实例的关系 一个实例只能装载一个数据库 一个数据库可以被多个实例装载 如集群环境中,一个服务器一个实例,某个服务器出现故障时,可以使用其他的实例 数据库名 数据库的标识 数据库创建之后,数据库名需要作为db_name参数的值写入参数文件中,还会被写入控制文件中 oracle\product\10.2.0\db_1\admin\orcl\pfile\init.ora.222017142510 select name from v$database; 作用 创建数据库、创建控制文件、修改数据库结构、备份与恢复数据库时都要用到数据库名 实例名 实例的标识 也叫做SID System Identifier 外部访问Oracle服务器时,实际访问的是某个实例 需要通过实例名来指定访问的是哪个实例 regedit-->搜索Oracle_sid select instance_name from v$instance 一个Oracle服务器上可以创建多个数据库,对应过个Oracle实例 创建Oracle数据库: 可在安装Oracle DBMS的时候,勾选创建数据库 或者 开始?程序?Oracle?配置和移植工具?Database Configuration Assistant(数据库配置助手) 或者 create database命令,非常繁琐 1.指定一个实例标识符SID:set ORACLE_SID=mynewdb 2.确保设置了必要的环境变量:在大多数平台中,ORACLE_SID和ORACLE_HOME必须要设置.另外建议设置PATH变量包含ORACLE_HOME/bin目录 3.创建一个数据库初始化参数文件:当oracle实例启动时会读取一个初始化参数文件 4.创建一个服务器参数文件 5.启动实例 6.执行create database 7.创建额外的表空间 8.运行脚本来创建数据字典视图 水平太次,DBA做 虽然一个Oracle数据库服务器中可以创建多个数据库, 但一个数据库需要占用非常大的内存空间, 所以一般一个服务器中只创建一个数据库,对应一个数据库实例 Oracle客户端工具 sql*plus sqlplus是装Oracle的时候,附带的一个客户端工具 Oracle的sql*plus是与oracle进行交互的客户端工具。在sql*plus中,可以运行sql*plus命令与sql语句 连接之后,help index,查看所有sql*plus命令 命令提示符窗口-->sqlplus命令-->启动sql*plus工具-->输入用户名、密码 sqldeveloper Oracle公司开发的一个免费非开源的图形化客户端, 使用 SQL Developer 可以浏览数据库对象、运行 SQL 语句和脚本、编辑和调试 PL/SQL 语句 支持 Windows、Linux 和 Mac OS X 系统 解压 打开终端-->cd sqldevelper -->chmod 777 *.sh -->./sqldevelper.sh | bash sqldevelper.sh | sh sqldevelper.sh sql*plus客户端命令 大部分在sqldeveloper客户端工具中是不能用的 sqlplus命令 启动sql*plus客户端工具 1.sqlplus 紧接着提示输入用户名、密码 2.sqlplus [username][/password] 并连接 密码暴露问题,MySQL密码长度暴露问题 3.sqlplus /nolog 不连接 先spool conn[ect]命令 启动sql*plus客户端工具之后,连接数据库 1.conn[ect] 紧接着提示输入用户名、密码 2.conn[ect] [logon] [as {sysdba|sysoper}] 其中logon 登录的意思 [username/password][@connect_identifier] connect_identifier ip:port/sid netServiceName 不指定,默认连接到本机上的数据库,本机ip、默认端口号、某一个sid 实际开发中,数据库服务器都是远程的一台或几台机器 没有username/password,不能写@ 网络服务配置 oracle/product/10.2.0/db_1/NETWORK/ADMIN/tnsnames.ora 监听配置文件 oracle/product/10.2.0/db_1/NETWORK/ADMIN/listener.ora listener.ora(host) 客户端工具 网络ip <==> MS-20170302AWWW(hostname命令查看)、网络ip MS-20170302AWWW<==> localhost、127.0.0.1、网络ip、MS-20170302AWWW 不能配置为localhost、127.0.0.1 回送地址 127.x.x.x是本机回送地址, 即主机IP堆栈内部的IP地址, 主要用于网络软件测试以及本地机进程间通信, 无论什么程序,一旦使用回送地址发送数据, 协议软件立即返回数据,数据不进行任何网络传输, 通常用127.0.0.1来表示,总是代表本机的IP地址。 发往127的消息不会出网卡,发往本机IP的消息则要进行地址解析, 需要路由器或交换机或者hub给出响应, 正确进行地址解析后才能返回, 没有网络连接时发往本机ip地址的消息是不行的 lsnrctl status|stop listener|start listener *修改了port,不起作用,不要改,需要 端口修改后监听一定要记得修改为“静态注册”方式 netstat -aon|findstr "1521" tasklist /fi "pid eq 21492" as 指定连接身份 决定了用户连接后拥有的权限与登录用户 sysdba 数据库管理员 sysdba拥有数据库的所有权限 只要有操作系统认证或用户拥有sysdba(不能是dba角色)身份都可以以sysdb的身份登录 登录之后用户总是sys 任何用户都可以以该身份作为sys用户连接 操作系统认证 拥有sysdba身份 无论以哪个用户登录,登录之后都是sys用户 sysoper 数据库操作员 权限基本与sysdba差不多: 没有创建和删除数据库对象的权限、没有访问用户信息的权限、没有给用户赋权限的权限、没有访问其他用户对象的权限 只有用户拥有sysoper身份才可以以sysoper的身份登录 登录之后用户总是public REVOKE 失败: 用户 SYS 始终具有 SYSOPER 和 SYSDBA 使用sys用户登录时,必须指明身份 conn /as sysdba oracle在登录时,有三种身份认证方式: 操作系统身份认证、密码文件认证、数据库认证 conn /as sysdba是属于操作系统认证, 在“我的电脑”单击右键,找到“管理”, 选择“本地用户和组”,发现有一个组叫“ora_dba”, 在conn /as sysdba,oracle会进行操作系统验证,发现你当前登录操作系统的用户就属于ora_dba组, 因此才可以登录成功 disconnect 断开连接 spool命令 将在sql*plus中的输入输出的内容输出到一个文件中 spool filePath 最后,spool off,才会输出到文件中 set命令 设置sql*plus客户端的系统参数 语法 set 参数名 参数值 常用参数: pagesize 设置每页可显示的行数 超过指定行数会换一页 默认值为24 为了避免分页,可设定为0 还要结合着调整窗口大小 窗口如果过矮,一页显示不下所有行,仍会分页 linesize 设置一行显示的字符个数 一行上的字符个数超过指定个数,会换一行 默认值为80 还要结合着调整窗口大小 窗口如果过窄,显示不下一行内容,仍会换行 time 设置是否显示当前时间 值on off 默认值off timing 设置是否显示执行已用的时间 值on off 默认值off 00:00: 00.01 Hours:Minutes:Seconds.Milliseconds Oracle数据库的启动和关闭 必须是超级管理员sys startup open; 启动实例 装载数据库 任何人都可以通过这个实例访问数据库 shutdown immediate; 卸载数据库 停止实例 Oracle数据库服务器上一般只有一个数据库,这一个数据库可以被多个人使用, Oracle数据库通过用户名来区分哪些数据库对象是属于哪个用户的 不同用户拥有各自的数据库对象,访问时互不干扰, 一个用户如果要访问其他用户的数据库对象,必须由其他用户授予权限 用户 创建 create user 用户名 identified by 密码 [default tablespace 表空间名字] 用户默认使用的表空间,默认表空间是users 某个用户在创建表时,若未指明该表中存放的数据存放的表空间 则使用创建该用户时,指定的默认表空间 [password expire] 密码过期 类似于后台添加一个用户,管理员知道你的密码, 不让用于输入密码,默认有一个初始密码, 第一次登录时强制修改密码 [account {unlock|lock}] 锁用户,默认unlock 删除 drop user 用户名 [cascade] 要删除的用户下有对象,删除时提示不让删 cascade表示级联操作,删除用户时,将这个用户的所有对象一起删除 drop user无法删除正在连接的用户,合理的,也是不合理的(不明来历的用户) 但也可以删: 查看当前正在登陆的用户 select sid, serial#, username from v$session; 干掉某个session: 结束会话,关闭连接 alter system kill session 'sid,serial#'; 删用户 修改 alter user 用户名 identified by 新密码 修改密码 password 登录后,直接输入 修改自己的密码 password 用户名 修改别人的密码 需要权限 grant alter user to xxx alter user 用户名 password expire 设置密码过期,登录时重新设置新密码 alter user 用户名 account unlock | lock 解锁|上锁 查询 select * from user_users; 查看当前登录用户的信息 user_users 名称 是否为空? 类型 ---------------------------------- -------- --------------- USERNAME NOT NULL VARCHAR2(30) USER_ID NOT NULL NUMBER ACCOUNT_STATUS NOT NULL VARCHAR2(32) 账户状态 open & EXPIRED & LOCKED LOCK_DATE DATE 锁的时间 EXPIRY_DATE DATE 过期时间 DEFAULT_TABLESPACE NOT NULL VARCHAR2(30) 使用的默认表空间 TEMPORARY_TABLESPACE NOT NULL VARCHAR2(30) 临时表空间 CREATED NOT NULL DATE 创建时间 select username, password from dba_users; 查看所有用户的信息 dba_users结构同user_users show user; 查看当前登录用户名 权限 系统权限 控制用户对数据库可执行的操作 常用系统权限: create session 允许用户连接到数据库 create table 允许用户创建表 create role 创建角色 create sequence 允许用户创建序列 create view 允许用户创建视图 create trigger 创建触发器 create procedure 创建存储过程 create procedure 创建函数的权限 oracle中存储过程与函数本是一体的 操作用户的权限 create user 允许用户创建用户 drop user 删除用户 alter user 修改用户 操作表空间的权限 create tablespace alter tablespace drop tablespace unlimited tablespace 对表空间的使用无限制 除了操作用户、表空间的权限分的比较细之外,对于其他对象,只要有创建的权限,就会有删除、修改的权限 赋权限 grant 权限1,权限2,... to 用户名 [with admin option] with admin option 指定用户在获得当前权限的同时,还可以把这些权限赋给其他的用户 收权限 revoke 权限1,权限2,... from 用户名 grant 权限1,权限2,角色名1,... to 用户名1,... revoke 权限1,权限2,角色名1,...from 用户名1,... all privileges 所有系统权限 可以收回其中的某个系统权限,收回后用户的权限不再是all privileges 对象权限 控制用户对指定的数据库对象可以执行的操作 数据库对象 表、视图、序列 select insert update delete all 赋权限 grant 权限1,权限2,... on 对象名 to 用户名 [with grant option] with grant option 指定用户在获得当前权限的同时,还可以把这些权限赋给其他的用户 收权限 revoke 权限1,权限2,... on 对象名 from 用户名 grant 权限1,权限2,... on 对象名 to 用户名1,... revoke 权限1,权限2,... on 对象名 from 用户名1,... on 对象名1,对象名2,... 错误,只能on一个对象 查看当前登录用户的系统权限 user_sys_privs 名称 是否为空? 类型 ----------------------------------------- -------- ------------- USERNAME VARCHAR2(30) 用户名 PRIVILEGE NOT NULL VARCHAR2(40) 权限名 ADMIN_OPTION VARCHAR2(3) 查看所有用户的系统权限 dba_sys_privs 名称 是否为空? 类型 ----------------------------------------- -------- ------------- GRANTEE NOT NULL VARCHAR2(30) 接受(拥有)指定权限的用户名或系统角色名 (用户名、系统角色名,不能是自定义角色名) PRIVILEGE NOT NULL VARCHAR2(40) 权限名 ADMIN_OPTION VARCHAR2(3) 查看当前登录用户的对象权限 user_tab_privs 名称 是否为空? 类型 ------------------------ -------- ---- GRANTEE NOT NULL VARCHAR2(30) 接受指定权限的用户名 OWNER NOT NULL VARCHAR2(30) 对象所属者 TABLE_NAME NOT NULL VARCHAR2(30) 表名 GRANTOR NOT NULL VARCHAR2(30) 授权者 PRIVILEGE NOT NULL VARCHAR2(40) 权限 GRANTABLE VARCHAR2(3) 是否可赋给别的用户 查看所有用户的对象权限 dba_tab_privs 名称 是否为空? 类型 ----------------------- -------- - GRANTEE NOT NULL VARCHAR2 OWNER NOT NULL VARCHAR2 TABLE_NAME NOT NULL VARCHAR2 GRANTOR NOT NULL VARCHAR2 PRIVILEGE NOT NULL VARCHAR2 GRANTABLE VARCHAR2 HIERARCHY VARCHAR2 角色 角色由若干个权限组成 一个角色拥有多个权限 一个权限可以属于多个角色 一个用户具有了某个角色,就拥有了该角色的所有权限 系统角色 connect create session select * from dba_sys_privs where grantee = 'CONNECT'; resource CREATE TABLE CREATE PROCEDURE CREATE TRIGGER CREATE SEQUENCE CREATE CLUSTER CREATE TYPE 不包括create session权限 dba 所有权限 两个身份 sysdba 以sys用户登录 sysoper 以public用户登录 可以收回其中的某个权限,收回后用户的角色还是dba角色 赋角色 grant 角色1,角色2,... to 用户名 [with admin option] 收角色 revoke 角色1,角色2,... from 用户名 grant 角色1,角色2,... to 用户名1,用户名2,... revoke 角色1,角色2,... from 用户名1,用户名2,... 自定义角色 创建 create role 角色名; 给角色赋权限 grant 权限1,权限2,... to 角色名 grant 权限1,权限2,角色名1,... to 角色名1,角色名2,... grant 权限1,权限2,非角色,... on 对象名 to 角色名1,角色名2,... 删除 drop role 角色名 查询 查看当前登录用户的角色 user_role_privs 名称 是否为空? 类型 ------------------ -------- ------------- USERNAME VARCHAR2(30) 用户名 GRANTED_ROLE VARCHAR2(30) 被赋予的角色(拥有的角色) ADMIN_OPTION VARCHAR2(3) 是否可赋给别的用户 一用户创建某个角色后,会自动拥有该角色,并且可赋给别的用户 查看所有用户的角色 dba_role_privs 名称 是否为空? 类型 ------------------- -------- ------------ GRANTEE VARCHAR2(30) 用户名或系统角色名(不会是自定义角色名) GRANTED_ROLE NOT NULL VARCHAR2(30) 角色,拥有的角色 ADMIN_OPTION VARCHAR2(3) 是否可赋给别的用户 查看所有的角色 dba_roles 名称 是否为空? 类型 ------------------- -------- ------------- ROLE NOT NULL VARCHAR2(30) 查看所有角色的权限 role_sys_privs 名称 是否为空? 类型 ----------------------------------------- -------- ------------ ROLE NOT NULL VARCHAR2(30) PRIVILEGE NOT NULL VARCHAR2(40) ADMIN_OPTION VARCHAR2(3) select * from role_sys_privs where role = '角色名'; 数据字典 查东西 Data Dictionary 查数据 存放了数据库的所有信息(系统数据) 存放的信息: 角色、权限信息 数据库对象(用户、表、约束、序列、表空间、视图、索引...)的信息 其他数据库的有关信息 是Oracle数据库的核心组成部分, 由一系列的表和视图组成, 这些表和视图是在创建数据库时由Oracle创建的, 并存放在系统表空间中, 这些表和视图的拥有者是sys, 且Oracle实例自动维护,用户无权修改 数据字典的组成部分: (基)表 真正存放数据的地方, 表中的数据以加密的形式存在, 只有Oracle实例能使用这些表,用户不能直接使用这些表 视图, 在基表的基础上,创建了视图,用户可以查询视图 只能查不能改 数据来源于表 数据表数据发生改变时,视图数据自动改变 视图命名规律: user_xxx 当前用户的数据,只有当前用户可访问 dba_xxx 所有用户的数据,只有DBA角色用户能访问 select table_name from user_tables; select column_name,data_type from user_tab_columns where Table_Name='表名' desc 表名 user_tables当前用户的表信息 dba_tables所有用户的表信息 user_sys_privs当前用户的系统权限 dba_sys_privs user_role_privs当前用户的角色 dba_role_privs role_sys_privs角色权限信息 user_users当前用户的信息 dba_user所有用户的信息 dictionary | dict 提供了数据字典中所有的视图的描述 数据字典中的数据, 都是存放在系统表空间system中的, 这些数据包括了所有数据库对象的信息,如用户信息、表结构信息、约束信息、序列信息等 会自动转换为大写,然后存储在表中 dictionary视图,该视图里记录了所有的数据字典视图的名称。 所以当我们需要查找某个数据字典而又不知道这个信息在哪个视图里的时候, 就可以在dictionary视图里找。该视图还有个同义词dict 表空间 在关系型数据库中,数据都是存放在表中的,表中能存放数据,需要存储空间 存放表的数据的存储空间 表空间是一个逻辑概念(逻辑虚构的,并不是物理分割), 若干个数据文件组成一个表空间, 一个数据文件只能属于一个表空间, 一个数据空间由若干个表空间组成 一个表空间由若干个数据文件组成 数据文件 .dbf 是数据的物理载体 数据库中的所有数据都是存放在数据文件中的 Oracle中的所有数据都存在数据文件中 数据文件的大小受操作系统的限制 过大的数据文件影响数据的存取性能 表空间分类 系统表空间,存放系统数据,在数据库创建时创建,表空间名称为system 临时表空间,主要用于数据排序,在数据库创建时创建,表空间名称为temp 自定义表空间 创建 create tablespace 表空间名 datafile '文件名' size xxxM [,'文件名' size xxxM...] 文件名,路径+文件名.dbf 数据文件的最大大小 *extent management local 本地管理表空间,要求Oracle中的数据分区大小一致 *uniform size yyyM 用于指定每个分区的大小 扩充表空间 alter tablespace 表空间名 add datafile '文件名' size xxxM 删除表空间 drop tablespace 表空间名 [including contents] 将内容删除 表的数据会被全部删除 表也会被删除,表的存储空间都没了,表也没有存在的必要了 为用户指定了默认表空间,删除该表空间之后,不会删除用户,创建表,表空间 'TS_HWZ' 不存在 这样就造成了数据的不一致性,所以尽量避免删除表空间 查询 当前用户的默认表空间 user_users 名称 是否为空? 类型 ----------------------------------------- -------- --------------- USERNAME NOT NULL VARCHAR2(30) USER_ID NOT NULL NUMBER ACCOUNT_STATUS NOT NULL VARCHAR2(32) LOCK_DATE DATE EXPIRY_DATE DATE DEFAULT_TABLESPACE NOT NULL VARCHAR2(30) TEMPORARY_TABLESPACE NOT NULL VARCHAR2(30) CREATED NOT NULL DATE INITIAL_RSRC_CONSUMER_GROUP VARCHAR2(30) EXTERNAL_NAME VARCHAR2(4000) 任意用户的默认表空间 dba_users 基本同user_users 当前用户的表使用的哪个表空间 user_tables 名称 是否为空? 类型 ----------------------------------------- -------- ------------- TABLE_NAME NOT NULL VARCHAR2(30) TABLESPACE_NAME VARCHAR2(30) 任意用户的任意表使用的表空间 dba_tables 任意表空间的数据文件 dba_data_files 名称 是否为空? 类型 ----------------------------------------- -------- ------------- FILE_NAME VARCHAR2(513) TABLESPACE_NAME VARCHAR2(30) 表空间的使用 创建用户时 create user ... default tablespace 表空间名 指定用户的默认表空间,在当前用户创建表时,如果未指定表空间,表的存储空间则会在该默认表空间中开辟 用户的默认表空间是users表空间 创建表时 create table ... tablespace 表空间名 指定存放表数据的表空间,如果未指定,则使用当前用户的默认表空间 创建索引时 create index ... tablespace 表空间名 会生成索引表 指定存放索引表数据的表空间 如果未指定,则使用当前用户的默认表空间 JDBC访问Oracle数据库 oracle数据库驱动包 oracle driver oracle.jdbc.driver.OracleDriver oracle url 连接url jdbc:oracle:thin:@ip:port:数据库实例名 1)从使用上来说,oci必须在客户机上安装oracle客户端或才能连接,而thin就不需要,因此从使用上来讲thin还是更加方便,这也是thin比较常见的原因。 2)原理上来看,thin是纯java实现tcp/ip的c/s通讯; 而oci方式,客户端通过native java method调用c library访问服务端,而这个c library就是oci(oracle called interface),因此这个oci总是需要随着oracle客户端安装