数据库基本概念
数据:用符号记录下来的可以区别的信息,数据内容是事物特性的反映或者描述,数据是符号的集合标先形式不仅包括数据和文字,还包括图形,图像,声音等。
信息:显示生活中的事物存在方式或者运行形式的反映,它以数据的形式表示,即数据是信息的载体。
数据库:可以理解为存储数据的仓库,按照一定的组织方式存储的,相关有关的数据的集合,这些数据不仅仅是彼此关联,而且还可以动态变化,具有以下特点:
- 数据结构化:一个或者多个数据文件组成一个数据库,同一个数据库内的数据文件的数据组织应该获得最大程度的共享与最小的冗余度。
- 数据共享:实现不同的用户可以使用数据库中的数据,从而提高数据的利用率
- 数据的独立性:数据与使用数据的应用程序相互独立。
- 数据的一致性与正确性:在处理数据的过程中,必须保证数据的有效,正确。避免由于意外事故与非法操作而导致的数据的不一致。
数据库管理系统(DBMS):数据库管理系统是用户实现加工数据的数据管理软件系统。负责数据库的存储取,维护和管理的软件。有以下几个功能:
- 数据定功能(建立数据库):DBMS通过相应的操作语言实现对采集的初始数据的装入,组织和存储。
- 数据操纵功能:DBMS提供数据操作语言DML,实现对数据的基本操作,根据用户的需求,对数据库中的数据进行修改,删除,插入,检索,重组等操作功能,SQL语言就是DML中的一种;
数据库的控制与维护功能:通过对数据库进行有效的控制,系统性能分析与监视,实现数据的完整性、安全性以及并发控制与数据恢复。由此来确保数据正确有效和数据库系统的正常运行。
数据的网格化和数据通信:实现数据的网络查询,修改等功能,并且实现数据与其他管理系统数据格式的转换功能,与操作系统,其他软件系统和用户程序进行通信,更大程度的实现数据共享。
数据库用户的分类
用户指使用数据库的人,即对数据库的存储,维护和检索等操作。用户分为三类:
第一类用户:终端用户(End User)
主要是使用数据的各级管理人员,工程人员,科研人员,一般为非计算机的专业人员
第二类用户,应用管理员
负责为终端用户设计和编制应用程序,以便终端用户对数据库进行存取操作。
第三类用户,数据库管理员
DBA指全面负责数据系统中的管理,维护和正常使用的人员,职责如下:
- 参与数据库设计的全过程,决定数据库的结构和内容
- 定义数据的安全性和完整性,负责分配用户对数据库系统的使用权限和口令管理;
- 监督控制数据库的使用和运行,改进和重新构造数据库系统,当数据库被破坏的时候,应负责恢复数据库;当数据库的结构需要改变的时候,完成对数据结构的修改。
ORACLE数据库的基本知识
ORACLE数据术语
数据库:存放数据,访问数据,操作数据的存储仓库
DB:数据库,按照存储结构来组织,存储和管理的数据仓库
DBMS:数据库管理系统,管理数据库的软件
SQL
sql:结构化查询语言(structured qurery language)
数据定义语言(DDL):建立,修改,删除数据库对象。create ,alter,drop
数据操纵语言(DML):改变数据库数据:update,insert,delete
事务控制语言(TCL):维护数据的一致性。commit,rollback,savepoint
数据库查询语言(DQL):查询所需要的数据,select
数据控制语言(DCL):执行权限授予和回收的操作,创建用户等,grant,revoke,create user,不需要事物,自动提交。
数据库实例
建立数据库不等于建立实例。
instance是操作系统中一系列进程以及为这些进程所分配的内存块。即访问oracle数据库的通道。
一个实例只能打开一个数据库,一个数据能被多个实例打开。访问oracle数据其实就是访问数据的实例。有时候需要先开启实例,实例名称就像是响应某个数据库操作的数据库管理系统的名字。sid是oracle实例的一个标识。
当配置数据主机连接的时候,需要指定实例名:
jdbc:oralce:thin:@localhost:1521:orcltest (orltest为实例名称)
#查询当前数据库的实例名:
select instance _name from v$instacne;
#查看当前数据实例信息
show parameter instance_name;
注意,一个数据可以有多个实例,在做数据库集群的时候,可以用到,或者不同的项目用不同的数据库实例也可以。
表空间
oracle数据库是通过表空间来存储物理表的,表空间是数据库的逻辑划分,隶属于数据库实例的下面。
一个数据库实例可以有N个表空间,一个表空间下可以有N个表,所以有了实例既可以创建表空间。
#创建表空间
create tablespace OracleTest logging datafile '/opt/oracle/oradata/ORCL/datafile/OracleTest.dbf' size 32m autoextend on next 32 maxsize2048m extent management local;
说明:
表空间名:OracleTest
表功建的位置:/opt/oracle/oradata/ORCL/datafile/OracleTest.dbf
大小:32M, 空间可以自动扩充,每次扩充的大小为32M, 做大为2048M
#查询表空间
select tablespace_name from db_data_files group by tablespace_name;
#查询表空间大小
select tablespace_name,count(*),sum(blocks),sum(bytes)/1024/1024 from dba_data_files group by tablespace_name;
#查询表空间是否自动扩充
select file_nmae,autoextensible,increment_by from dab_data_files;
#如果表空间中有表的话可以查看:
select tablespace_name,table_name,from dba_tables where tables_name='ORACLETEST';
用户
一个oracle数据库装好后,建立数据库实例,创建了表空间,为用户指定表空间,最后才是创建物理表
#创建用户为指定的表空间
create user testuser identified by test default tablespace OracleTest;
用户:testuser
密码:test
表空间:OracleTest
一个表空间可以授予多个用户,并且可以给不同的用户分配对表空间不同等级的操作权限
#给testuser用户授予权限
grant connect to testuser;
grant resource to testuser;
grant dba to testuser;
#给用户授予的第三种dba权限,登录后可以查询当前用户;
show user;
#查看数据库的所以用户
select * from dba_user;
数据库实例,表空间,用户都有了之后就可以在自己的用户所属的表空间下创建表了。
#查看所属的表空间
select table_name,tablespace_name from all_tables where table_name='t_student';
#查看表结构
desct t_student
oracle 运维
常用命令
查询语句
#select查询
SELECT [DISTINCT] {COLUMN1,COLUMN2,...} FROM tablename WHERE {conditions} GROUP BY {conditions} ORDER BY {expressions} [ASC/DESC];
- select 字句用于指定检索数据库的那些列,FROM用于指定从哪一个表或者试图检索数据
- WHERE子句中的条件可以是一个包含等号或者不等号的条件表达式,也可以是一个含有IN,NOT IN,BETWEEN,LIKE,IS NOT NULL 等比较运算符的表达式,还可以是由单一的条件表达式通过逻辑运算符组成的复合条件
- ORDEY BY ,在SQL查询的结果时候将各返回行按照顺序排序,返回行的排列顺序由ORDEY BY 指定的表达式的值确定
- 子查询,如果某个SLEECT命令(查询1)出现在另一个SQL(查询2)的子句中,则称查询1是查询2的子查询。
INSERT语句
INSERT INTO tablename {column1,column2...} VALUES {experssion1,experssion2,...};
UPDATE
UPDATE tables SET {column1=expression1,column2=expression2,..} WHERE {conditions};
DELETE
DELETE FROM tablename WHERE {conditions}
CREATE
#创建空表
CREATE table sms_mo_log_back as select * from sms_mo_log where 1=2;
DROP
DROP table sms_mo_log_back;
Truncate table sms_mo_log_back;
ALTER
#增加主键
ALTER table sms_mo_log ADD constrainst pk_1 prmary key(sequenct_id);
#增加字段
ALTER table table_name add column column_name datatype;
数据控制语句
#GRANT
GRANT connect,resource to username;
#REVOKE
REVOKE connect,resource from username;
#Alter user
ALTER user name quota 300M on tablespace_name
SQL数据类型
char/varchar2
char类型保存定长字符串,最小长度为1字节(或者字符数),最长2000字节,如果不指定,则默认为1
varchar2和varchar同义,都是指变长字符串类型。oracle建议使用varchar2。在使用varchar类型的时候,必须指定其长度,最小1字节或者字符数,最大4000字节。
常用字符串函数
ASCII()
CHR()
CONTACT(,) :c1 和c2均为字符串,函数将c2连接到c1后面,如果c1为null,将返回c2,如果c2为null,则返回c1,如果c1,c2都为null,则返回null
INITCAP():c1为一字符串,函数将每个单词的第一个字母与其他字母小写返回。
INSTR(C1,C2,I,J):c1,c2均为字符串,i,j为整数,函数返回c2在c1中的j次出现的位置。
。。。。。。。。。。
用户安全性
账号管理
#创建用户
create user test1 identified by test1;
#删除用户
drop user test1;
#锁定用户
alter user test1 account lock;
#解锁用户
alter user test1 account unlock;
#查询用户状态
select username,account_status from dba_users where uaername='scott';
#修改用户密码
alter user test1 identified by <新密码?;
密码策略安全
profile配置文件
profile配置包括两个部分的内容,密码配置和kernel资源配置
数据库创建后,系统默认存在default默认profile,若不做特殊指定,创建用户时用户默认使用的profile就是default
select * from dba_profiles;
profile口令参数
profile密码策略
如果两个口令历史记录参数都具有值UNLIMITED,则OracleDB将同时忽略两者。用户可以随时重用任何口令,但是这个不是一种有效的安全做法。如果两个参数均已设置,则允许重用口令,但是必须同时满足这两个条件。用户更改口令的次数必须达到指定次数,而且在最后一次使用旧口令已经过了指定的天数。例如,假设profile文件中PASSWORD REUSEMAX设置为10,PASSWORD_REUSE_TIME设置为30,则用户只有在已重置了10次口令,并且自最后一次使用该口令以来已经过了30天之后,才能重用该口令。如果一个参数设置为一个数,而另一个参数指定为UNLIMITED,则用户永远不能重用口令。
口令复杂度
PASSWORD_VERIFY_FUNCTION:参数指定一个PL/SQL函数,以便在分配口令之前执行口令复杂度检查。
untlpwdmg.sql脚本提供了模型口令验证函数:
linux和unix平台 $ORACEL_HOME/rdbms/admin
windows平台 %ORACLE_HOME%\rdbms\admin
#运行脚本
@$ORACEL_HOME/rdbms/admin/utlpwdmg.sql
#取消密码管理
alter profile DEFAULT limit unlimited;
alter profile DEFAULT limit password_reuse_time unlimited;
#停止密码检验函数
alter profile DEFAULT limit password_verify_function null;