fag oracle 审计_oracle学习

01) :

1.oracle的用户

sys (超级管理员)董事长, system(管理员)总经理 。scott(普通用户,测试) 默认锁定的状态,默认密码:tiger

角色:sysdba , sysoper

忘记登录密码,如何操作?

a 找到密码的配置文件修改

b 以操作系统的管理身份登录

在运行中,输入 sqlplus / as sysdba

使用oracle的步骤?

a 启动服务

oracle中每个数据库对应一个服务(db实例)

b 使用第三方工具链接oracle ,需要启动监听服务

2 .常用的命令

a 解锁用户

alter user 用户名 account unlock

b 锁定用户

alter user 用户名 account lock

注意:a和b 两种语句必须管理员身份才能做到

02):

1 常用的sqlplus的命令

a 显示当前的用户

show user

b 解锁用户

alter user 账号名 account unlock

注意:执行此命令一定是 dba角色

c 切换用户

conn 账号名/密码 [as sysdba]

d 修改当前账号的密码

password

e 修改其他账号的密码

alter user 账号名 identified by 新密码

注意:此命令,一定是dba权限可以做

f 设置每行显示的字符数,默认 80个字符

set linesize 字符数

g 设置每页显示的行数

set pagesize 行数

j 清屏

clear(在sqlplus中不生效)

k 显示表的结构

desc 表名

q 显示执行sql的时间

set timing on

2 oracle数据库

物理存储和逻辑存储

逻辑存储分层管理数据库,优点:查找速度等很快的。

表空间:一个数据库可以对应多个表空间,

3 用户管理

a 创建用户

简易语法:

create user 账号名 identified by 密码

注意:创建账号,需要dba角色

b 授予“系统权限”

grant 权限/角色 to 账号 [with admin option]

注意:执行此语句,一定有dba管理员权限

c 授予“对象权限”

grant 权限 on 表名 to 账号 [width grant option]

d 权限的回收

回收对象权限

revoke 权限 on 表名 from 账号

回收系统权限

revoke 权限/角色 from 账号

问题:如果scott将emp表的select权利从 zhangsan 回收,那么lisi还具备这个查询的权利吗? 级联

f 删除用户

drop user 账号 [cascade]

4 权限管理

画图说明

sys(超级管理员--董事长) , system(数据库管理员--总经理)

03):

1 表空间

在oracle中管理数据库主要使用的就是 表空间。一个数据库可以有多个表空间的,但是一个表空间只能对应一个数据库。

表空间中,有 视图,索引,表等等。

创建表空间

语法:

create tablespace 名 datafile ‘路径’ size 大小(兆)

修改表空间

删除表空间

drop 关键字开头

表空间是如何使用?创建用户时,指定表空间,创建表指定表空间等

2 oracle中的数据类型

number(N,M) 数值

N:表示的是数字的个数

M:小数的位数

如:number(5,2) 表示 范围:-999.99-------999.99

number(10) 代表的是 整数 范围:-9999999999------------9999999999

char:字符,固定长度

如:char(5) 如果插入的字符数:abc ,意味着,后面还会补充2个空格。

varchar2:字符,可变长度

如:varchar2(5) 如果插入的字符数:abc,意味着,字段中只有3位,后面不会补齐空格

注意:

char类型的字段,查询速度是非常快。

所以,一般固定长度的字段都会使用char,如:性别,电话,身份证,等等

date :日期

long:字符,最多可以存储2G

lob:大对象。最多可以存储4G

完成:创建用户信息表,学号,姓名,性别,电话,生日 并且向其中插入一条测试数据

注意:

1 oracle数据库更新数据,那么数据的类型必须要与字段类型匹配。

2 oracle中更新操作,所有的事务默认打开,所以当更新之后必须要提交事务(commit) 才能将缓存中的数据更新到数据库中

3 同义词

给表起别名,同义词分为两种:共有(public)和私有

语法:

create [or replace][public] synonym 别名 for 表名

删除同义词

drop synonym 同义词别名

4 视图(重要)

可以将一张表或者多张表连接起来,形成一张虚拟的表。

语法:

create [or replace] view 视图名 as 查询的sql语句

创建一个视图,只显示emp表中的,编号,姓名,工作

注意:

a 视图可以做更新操作的(前提:一定要满足原来表的一些约束)

删除语法:

drop view 视图名

5 索引

表建立索引,相当于书建立了目录。 目的:提高查询效率。索引属于系统优化的一部分

语法:

create [or replace] index 索引名 on 表名(字段的列表)

索引常用的根据主键 建立索引

注意:

a 建立索引有磁盘空间开销

b 建立索引的字段,尽量少的做更新操作

删除:

drop index 索引名

6 序列

在sql中 创建表,可以指定某个列自动增长,在oracle中没有此功能,所以出现 序列代替自增长。

语法:

create sequence 序列名

start with 起始值

increment by 每次增长的值

minvalue 序列的最小值

maxvalue 序列的最大值

cache 缓存序列的个数

noche 不缓存

cycle 循环开始

注意:cache 5 ,表示在内存中会先生存5个序列号。问题:如果一旦特殊原因如断电,那么在使用序列时,从第6个序列开始了、

修改序列

语法:

alter sequence 序列名

increment by 每次增长的值

minvalue 序列的最小值

maxvalue 序列的最大值

cache 缓存序列的个数

noche 不缓存

cycle 循环开始

修改的时候,不能有 start with

删除序列

drop sequence 序列名

04):

1 oracle中的常用函数

a 数值函数

abs(n) 求出n的绝对值

ceil(n) 求出比n大的最小整数

floor(n) 求出比n小的最大整数

round(n,m) 四舍五入,n表示数字,m表示n小数点保留的位数

trunc(n,m) 截取数字n,m表示截取的位数

c 字符串函数

lower(n) 将n转换成小写

upper(n) 将n转换成大写

length(n) 求出n的长度

ltrim(n) 去掉n的左边空格

rtrim(n)去掉n的右边空格

replace(n,m,h) 将n中的m,替换成h

d 转换函数

to_number(n,m) 将满足数字格式的n,按照m的格式转成数字

to_number('23',99)

to_char(n,m) 将n按照m的格式转换成 字符串

to_char(sysdate,'yyyy-MM-dd hh24:mi:ss')

to_date(n,m); 将n,按照m的格式转换成日期

nvl(n,m) 如果n为空,则显示m

nvl2(n,m,h) 如果n不为空,则显示m,否则显示h

1 oracle中的常用函数

a 数值函数

abs(n) 求出n的绝对值

ceil(n) 求出比n大的最小整数

floor(n) 求出比n小的最大整数

round(n,m) 四舍五入,n表示数字,m表示n小数点保留的位数

trunc(n,m) 截取数字n,m表示截取的位数

c 字符串函数

lower(n) 将n转换成小写

upper(n) 将n转换成大写

length(n) 求出n的长度

ltrim(n) 去掉n的左边空格

rtrim(n)去掉n的右边空格

replace(n,m,h) 将n中的m,替换成h

d 转换函数

to_number(n,m) 将满足数字格式的n,按照m的格式转成数字

to_number('23',99)

to_char(n,m) 将n按照m的格式转换成 字符串

to_char(sysdate,'yyyy-MM-dd hh24:mi:ss')

to_date(n,m); 将n,按照m的格式转换成日期

nvl(n,m) 如果n为空,则显示m

nvl2(n,m,h) 如果n不为空,则显示m,否则显示

2 oracle中的查询

a 计算每个员工的年薪?

select ename,sal*12+nvl(comm,0) 年薪 from emp;

b 查询“SMITH” 的基本信息

select * from emp where ename='SMITH';

c 显示 工资大于等于2850 ,小于等于5000 的员工信息。

select * from emp where sal>=2850 and sal<=5000;

select * from emp where sal between 2850 and 5000

d 查询,姓名中有 M 的人的基本信息

select * from emp where ename like '%M%'

模糊查询:% 表示0到n个任意字符 _代表单个字符 [] 如果满足其中的某个字符都会查询出来

e 查询 姓名以"m"开头的人的信息

select * from emp where ename like 'M%'

链接查询(内链接,左连接,右链接)

语法:

select * from 表1 别名1 [inner/left/right] join 表2 别名2 on 别名1.相同的字段=别名2.相同的字段

inner join 两张表中有关联的数据查询出来

left join 左表是主表,左表中的所有数据都会查询出来

right join 跟左链接相反

f 查询 部门名称是“ACCOUNTING” 下面的所有员工

select * from emp e inner join dept d on e.deptno=d.deptno where d.dname='ACCOUNTING';

子查询

select * from emp where deptno=(select deptno from dept where dname='ACCOUNTING')

e 查询 部门名称是“ACCOUNTING”,“RESEARCH” 的下面所有员工

select * from emp e inner join dept d on e.deptno=d.deptno where d.dname='ACCOUNTING' or d.dname='RESEARCH'

select * from emp where deptno in(select deptno from dept where dname='ACCOUNTING' or dname='RESEARCH' )

g 查询 ‘SMITH’ 的上级姓名

select ename from emp where empno=(select mgr from emp where ename='SMITH')

h 笛卡尔积查询

select * from 表1,表2

排除笛卡尔积的结果

加上条件

select * from 表1,表2 where 表1.字段=表2.字段

j 查询 姓名是“SMITH”和"ADAMS" 并且 工资(sal)大于 1000的员工信息

select * from emp where ename in('SMITH','ADAMS') and sal >1000

select * from emp where (ename='SMITH' or ename='ADAMS') and sal>1000

3 oracle中的事务

一般批量更新时,使用较多。

oracle中的事务,自动开启的。但是没有自动提交。为了提高效率,每次更新动作完成之后,手动提交事务

提交事务:commit

回滚事务:rollback

设置保存点:savepoint 保存点名

回滚到保存点:rollback to 保存点名

if(有异常)

{

回滚

}else

{

commit

}

4 oracle中的存储过程?

存储过程类似程序中的方法,可以独立完成某个特定的操作(功能),如(订单,分页)等等

语法:

create [or replace] procedure 过程名(参数1 [模式] 数据类型,参数2 [模式] 数据类型,、、、、)

is/as

定义变量的区域

begin

具体的sql代码的区域

end;

解释:模式有两种:输入参数(in)和输出参数(out)。默认模式 输入参数in

完成:打印当前系统时间的存储过程

DBMS_OUTPUT.put_line(sysdate);

解释:DBMS_OUTPUT包名,put_line过程名

注意:如果使用此过程,需要先打开包

set serveroutput on

create or replace procedure pro_my

is

begin

DBMS_OUTPUT.put_line(to_char(sysdate,'yyyy-MM-dd'));

end;

调用存储过程:execute(exec):过程名

完成:根据员工的姓名,查出他的工资

create or replace procedure pro_my(enam varchar2)

is

--定义变量表示工资

my_sal number(5);

begin

select sal into my_sal from emp where ename=enam;

--打印工资

DBMS_OUTPUT.put_line(enam||'的工资是:'||my_sal);

end;

5 oracle中的函数

与过程非常类似,可以独立完成特定的功能

语法:

create [or replace] function 函数名(参数列表)

return 返回值的类型

is/as

begin

end;

完成:根据员工的姓名,查出他的工资

create or replace function func_my(enam varchar2)

return number

is

--定义变量表示工资

my_sal number(5);

begin

select sal into my_sal from emp where ename=enam;

return my_sal;

end;

05):

1 pl/sql

是在标准sql的扩展,oracle中的编程,主要通过pl/sql进行

分类:

a 存储过程

b 函数

c 触发器

d 包

2 常用语法规则

注释

-- 单行注释

/**/ 多行注释

变量命名规范

v_变量名

c_常量名

游标名_cursor

e_异常变量名

3 块的结构

declare

定义部分

begin

执行具体代码

exception

异常处理

end

注意:declare和exception 都是可以省略

完成:打印“hello word”

DBMS_OUTPUT.put_line('内容')

DBMS_OUTPUT 包,put_line 过程名

前提:必须要导入包,开启包

set serveroutput on

begin

DBMS_OUTPUT.put_line('HELLO WORD');

end;

案例:根据用户输入的雇员编号,显示该雇员的名字

declare

--定义变量,保存查询出来的姓名

v_name varchar2(20);

begin

select ename into v_name from emp where empno=&empno;

DBMS_OUTPUT.put_line('雇员名是:'||v_name);

exception

when no_data_found then

DBMS_OUTPUT.put_line('查无此人');

end;

定义变量的语法

变量名 [constant] 数据类型 [not null] [:=初始值]

如:

v_name varchar2(20) not null:='abc';

v_number number(5):=23;

注意:

布尔类型,必须有初始值

v_fag boolean :=false;

v_fag boolean not null default false;

2 以输入员工号,显示雇员姓名、工资、个人所得税(税率为0.03)。

declare

--定义变量,保存查询出来的姓名

v_name emp.ename%type;

v_sal emp.sal%type;

begin

select ename,sal into v_name,v_sal from emp where empno=&empno;

DBMS_OUTPUT.put_line('雇员名是:'||v_name);

DBMS_OUTPUT.put_line('工资是:'||v_sal);

DBMS_OUTPUT.put_line('所得税:'||v_sal*0.03);

exception

when no_data_found then

DBMS_OUTPUT.put_line('查无此人');

end;

if语句的三种语法形式

if 、、、then、、、、

if、、、、then、、、、else、、、

if、、、、then、、、elsif、、、、else、、、

注意:以上三种语法结构都是以 end if结束

a 定义整形变量等123,如果变量的值大于100,则打印该变量大于100

declare

v_number number(5):=123;

begin

--判断

if v_number>100 then

DBMS_OUTPUT.put_line('变量的值大于100');

end if;

end;

3 编写一个过程,可以输入一个雇员名,如果该雇员的工资低于2000,就给该雇员工资增加10%

create or replace procedure pro_sal(enam varchar2)

is

v_sal emp.sal%type;

begin

select sal into v_sal from emp where ename=enam;

--判断工资是否小于2000

if v_sal<2000 then

--修改该员工的工资,增加10%

update emp set sal=sal+sal*0.1 where ename=enam;

commit;

end if;

end;

4 编写一个过程,可以输入一个雇员名,如果该雇员的补助不是0就在原来的基础上增加100;如果补助为0就补助设为200

create or replace procedure pro_comm(enam varchar2)

is

--定义补助

v_comm emp.comm%type;

begin

select nvl(comm,0) into v_comm from emp where ename=enam;

if v_comm!=0 then

update emp set comm=comm+100 where ename=enam;

commit;

else

update emp set comm=200 where ename=enam;

commit;

end if;

end;

5 编写一个过程,可以输入一个雇员编号,如果该雇员的职位是PRESIDENT 就给他的工资增加1000,如果该雇员的职位是MANAGER就给他的工资增加500,其它职位的雇员工资增加200

create or replace procedure pro_job(eno number)

is

--定义工作

v_job emp.job%type;

begin

select job into v_job from emp where empno=eno;

if v_job='PRESIDENT ' then

update emp set sal=sal+1000 where empno=eno;

commit;

elsif v_job='MANAGER' then

update emp set sal=sal+500 where empno=eno;

commit;

else

update emp set sal=sal+200 where empno=eno;

commit;

end if;

end;

6 循环语句

loop

exit

when 条件

end loop;

特点:至少执行一次

while 条件 loop

end loop;

特点:只有条件为真时才会执行循环体

for 循环变量 in [reverse] 范围 loop

end loop;

请,编写一个过程,循环添加10个用户到users表中,用户编号从1开始增加.

create or replace procedure pro_insert

is

v_i number(5):=1;

begin

loop

insert into userInfo values(v_i,'a'||v_i);

commit;

v_i:=v_i+1;

exit

when v_i>10;

end loop;

end;

编写一个过程,并循环添加10个用户到users表中,用户编号从11开始增加. while

is

v_i number(5):=11;

begin

while v_i<=20 loop

insert into userInfo values(v_i,'a'||v_i);

commit;

--改变条件

v_i:=v_i+1;

end loop;

end;

编写一个过程,并循环添加10个用户到users表中,用户编号从11开始增加. for

create or replace procedure pro_insert

is

begin

for v_i in 21..30 loop

insert into userInfo values(v_i,'a'||v_i);

commit;

end loop;

end;

游标

问题:

写pl/sql程序块,完成将emp表中的所有数据查询出来,如何做?

游标作用:可以存储select语句查询的多条记录

语法:

declare cursor 游标名 is 查询的sql语句

分解:

declare cursor 游标名

is

sql查询语句;

定义变量

begin

end;

注意:

a 游标的使用,必须先打开

open 游标名

b 使用完之后,关闭游标

close 游标名

declare cursor emp_cursor

is

select * from emp;

--定义变量,保存游标中的一行数据

v_cursr_emp emp_cursor%rowtype;

begin

--打开

open emp_cursor;

loop

--使用fetch 输出游标中的值

fetch emp_cursor into v_cursr_emp;

DBMS_OUTPUT.put_line(v_cursr_emp.empno||'----'||v_cursr_emp.ename);

exit

when emp_cursor%notfound;

end loop;

--关闭

close emp_cursor;

end;

declare cursor emp_cursor

is

select * from emp;

--定义变量,保存游标中的一行数据

v_cursr_emp emp_cursor%rowtype;

begin

for v_cursr_emp in emp_cursor loop

DBMS_OUTPUT.put_line(v_cursr_emp.empno||'----'||v_cursr_emp.ename);

end loop;

end;

数据中心机房是现代信息技术的核心设施,它承载着企业的重要数据和服务,因此,其基础设计与规划至关重要。在制定这样的方案时,需要考虑的因素繁多,包括但不限于以下几点: 1. **容量规划**:必须根据业务需求预测未来几年的数据处理和存储需求,合理规划机房的规模和设备容量。这涉及到服务器的数量、存储设备的容量以及网络带宽的需求等。 2. **电力供应**:数据中心是能源消耗大户,因此电力供应设计是关键。要考虑不间断电源(UPS)、备用发电机的容量,以及高效节能的电力分配系统,确保电力的稳定供应并降低能耗。 3. **冷却系统**:由于设备密集运行,散热问题不容忽视。合理的空调布局和冷却系统设计可以有效控制机房温度,避免设备过热引发故障。 4. **物理安全**:包括防火、防盗、防震、防潮等措施。需要设计防火分区、安装烟雾探测和自动灭火系统,设置访问控制系统,确保只有授权人员能进入。 5. **网络架构**:规划高速、稳定、冗余的网络架构,考虑使用光纤、以太网等技术,构建层次化网络,保证数据传输的高效性和安全性。 6. **运维管理**:设计易于管理和维护的IT基础设施,例如模块化设计便于扩展,集中监控系统可以实时查看设备状态,及时发现并解决问题。 7. **绿色数据中心**:随着环保意识的提升,绿色数据中心成为趋势。采用节能设备,利用自然冷源,以及优化能源管理策略,实现低能耗和低碳排放。 8. **灾难恢复**:考虑备份和恢复策略,建立异地灾备中心,确保在主数据中心发生故障时,业务能够快速恢复。 9. **法规遵从**:需遵循国家和地区的相关法律法规,如信息安全、数据保护和环境保护等,确保数据中心的合法运营。 10. **扩展性**:设计时应考虑到未来的业务发展和技术进步,保证机房有充足的扩展空间和升级能力。 技术创新在数据中心机房基础设计及规划方案中扮演了重要角色。例如,采用虚拟化技术可以提高硬件资源利用率,软件定义网络(SDN)提供更灵活的网络管理,人工智能和机器学习则有助于优化能源管理和故障预测。 总结来说,一个完整且高效的数据中心机房设计及规划方案,不仅需要满足当前的技术需求和业务目标,还需要具备前瞻性和可持续性,以适应快速变化的IT环境和未来可能的技术革新。同时,也要注重经济效益,平衡投资成本与长期运营成本,实现数据中心的高效、安全和绿色运行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值