如何系统的学习数据库形成自己的数据库体系数据库快速入门
如何系统的学习数据库、形成自己的数据库体系、数据库快速入门
1,适合对象: 在日常工作过程中,频繁使用数据库的技术人员、研发人员
适合管理数据库的技术人员。
2,开始学习
第一部分:快速的熟悉数据库信息
2.1,熟悉业务系统的基本功能;所有的数据库设计都是依赖于业务逻辑;
2.2,熟悉数据库的所有对象类型
2.3,熟悉数据库的命名规范:具备一定技术含量的数据库设计,都有一个比较好的命名规范,方便快速查找,管理数据库。
2.4,熟悉数据库的所有对象,整理成一张excel;方便技术人员使用;
第二部分:数据库日常操作
2.5,熟悉数据库常用sql
2.6,复杂sql的编写和拆分
2.7,数据库的迁移,备份和自动备份脚本,清库
2.8,数据库的常见问题处理
第三部分:具体分享
2.1,熟悉业务系统的基本功能; 需要结合系统学习,此处不做介绍;
2.2,熟悉数据库的所有对象:
目标:知道有哪些数据库对象,每个对象的作用,可以实现那些功能;如何创建,测试和使用;
2.2.1,oracle
熟悉常见的数据库对象:表,视图,函数,触发器,定时器,索引,序列,视图,用户,第三方链接等等;
2.3,了解数据库的命名规范
b_业务数据,例如b_account
c_配置数据,例如c_bank
p_参数配置,例如p_annual
s_系统配置,例如s_enum
l_日志配制,例如l_system
2.4,熟悉数据库的所有对象,整理成一张excel;熟悉表与表之间的关联;
例如:将实际数据库的信息,整理出来;熟悉每个表的含义
2.5,熟悉数据库常用sql:
2.5.1,查询所有表,查询所有列,查询所有索引,所有用户等等
select gg.table_name, from user_tables gg
select * from all_tables where owner=‘AA’;
SELECT TABLE_NAME,COMMENTS from all_tab_comments where OWNER=‘AA’
其中AA为数据库实例名称
2.5.2,查询视图,定时器,触发器,
select * from user_jobs;查询所有定时器;
2.5.3,查询数据库所有表的记录数
create or replace function count_rows(table_name in varchar2,
owner in varchar2 default null)
return number
authid current_user
IS
num_rows number;
stmt varchar2(2000);
begin
if owner is null then
stmt := ‘select count(*) from “’||table_name||’”’;
else
stmt := ‘select count(*) from “’||owner||’”."’||table_name||’"’;
end if;
execute immediate stmt into num_rows;
return num_rows;
end;
之后,再查select table_name, count_rows(table_name) nrows from user_tables
2.5.4,查询查询字符串被那些资源引用;其中 CHANGEAREA为要查询的字符串;
因为一个字段被修改,要么是后台程序,要么是数据库程序,要么就是其他程序;
select distinct name ,type,text from USER_SOURCE A where upper(A.TEXT) like’% CHANGEAREA %'
select * from all_source where OWNER = ‘AA’ and upper(TEXT) like ‘% CHANGEAREA %’
查询结果:展示所有字段被使用的位置;
2.6,特别复杂的sql拆分 ,例如是一个几十、上百航行的sql,一看就头晕,眼睛都花了怎么办?
2.6.1,主要字段:select from where join group by 进行搜索拆分
2.6.2,找到关键的括号()进行分层,通过tab左侧空格,同一层的左侧空白宽度一样,可以很快地看到sql的逻辑;特别适合研究别人的sql,或者处理很久之前写的sql。
2.7,数据库的迁移,备份和自动备份脚本,清库
2.7.1,安装oracle,创建管理账户,创建表空间,创建普通用户,然后授权;
1.1,在plsql中创建表自己的空间
CREATE TEMPORARY TABLESPACE base_TEMP
TEMPFILE ‘E:\APP\ADMINISTRATOR\ORADATA\ORCL\base_temp.DBF’
SIZE 32M
AUTOEXTEND ON
NEXT 32M MAxSIZE UNLIMITED
EXTENT MANAGEMENT LOCAL;
CREATE TABLESPACE base
LOGGING
DATAFILE ‘E:\APP\ADMINISTRATOR\ORADATA\ORCL\base.DBF’
SIZE 32M
AUTOEXTEND ON
NEXT 32M MAXSIZE UNLIMITED
EXTENT MANAGEMENT LOCAL;
1.2,删除用户,创建用户,授权;
drop user kl2018 cascade;
–创建用户
create user kl2018
identified by kl2018
default tablespace base
temporary tablespace base_TEMP
profile DEFAULT;
–授权
grant connect to kl2018;
grant dba to kl2018;
grant resource to kl2018;
2.7.2,数据库导入:整体导入,某几张表导入;
imp ht/ht@orcl file=d:\20221122.dmp full=y ignore=y
imp /TESTYT file=D:\bakorcljf\2022\2022.dmp fromuser=ht touser=ht tables=(M_OPERLOG,M_OPERLOG_DETAIL) ignore=y;
2.7.3,导出语句
exp ht/ht@orcl file=d:\back1%filename%.dmp log=d:\back1%filename%.log OWNER=ht
2.7.4,编写bat脚本,放在window系统的任务计划中,实现自动备份;
2.8,数据库的常见问题处理
2.8.1,oracle服务无法使用:ora 12514
2.8.2,oracle服务无法启动:重新配置监听;或者重启数据库服务器;
2.8.3,oracle服务可以启动但是系统很卡
2.8.3.1,查看cpu是否满载
2.8.3.2,查看表空间是否还有剩余;
select dbf.tablespace_name,
dbf.totalspace “总量(M)”,
dbf.totalblocks as 总块数,
dfs.freespace “剩余总量(M)”,
dfs.freeblocks “剩余块数”,
(dfs.freespace / dbf.totalspace) * 100 “空闲比例”
from (select t.tablespace_name,
sum(t.bytes) / 1024 / 1024 totalspace,
sum(t.blocks) totalblocks
from dba_data_files t
group by t.tablespace_name) dbf,
(select tt.tablespace_name,
sum(tt.bytes) / 1024 / 1024 freespace,
sum(tt.blocks) freeblocks
from dba_free_space tt
group by tt.tablespace_name) dfs
where trim(dbf.tablespace_name) = trim(dfs.tablespace_name)
查询数据库路径,增加表空间;或者配置为表空间自增;
select * from dba_data_files where tablespace_name = ‘USERS’;–查询路径
alter tablespace USERS add datafile ‘D:\ORACLE\PRODUCT\10.2.0\ORADATA\HT\USERS02.DBF’ size 5000m; –现场
2.8.3.3,查看内存配置,sga是否充分利用;
查看数据库内存
show parameter sga; (查看内存占用情况)
NAME TYPE VALUE
lock_sga boolean FALSE
pre_page_sga boolean FALSE
sga_max_size big integer 800M
sga_max_size big integer 800M
修改数据库内存【留意32位系统,最大支持持1.7g】
alter system set sga_max_size=1700m scope=spfile;
alter system set sga_target=1700m scope=spfile;
2.8.3.4,优化重点的sql逻辑;增加日志分析,找到速度慢的sql逻辑;
2.8.3.5,查看正在执行的sql,和近期速度慢的sql;
1、查询执行最慢的sql
select *
from (select sa.SQL_TEXT,
sa.SQL_FULLTEXT,
sa.EXECUTIONS “执行次数”,
round(sa.ELAPSED_TIME / 1000000, 2) “总执行时间”,
round(sa.ELAPSED_TIME / 1000000 / sa.EXECUTIONS, 2) “平均执行时间”,
sa.COMMAND_TYPE,
sa.PARSING_USER_ID “用户ID”,
u.username “用户名”,
sa.HASH_VALUE
from v$sqlarea sa
left join all_users u
on sa.PARSING_USER_ID = u.user_id
where sa.EXECUTIONS > 0 and to_date(sa.FIRST_LOAD_TIME,‘yyyy-mm-dd/hh24:mi:ss’)>sysdate-1 —一天内的sql
and u.username=‘HTCS’ –用户为htcs
order by (sa.ELAPSED_TIME / sa.EXECUTIONS) desc)
where rownum
2、查询次数最多的 sql
select *
from (select s.SQL_TEXT,
s.EXECUTIONS “执行次数”,
s.PARSING_USER_ID “用户名”,
rank() over(order by EXECUTIONS desc) EXEC_RANK
from v$sql s
left join all_users u
on u.USER_ID = s.PARSING_USER_ID
where to_date(s.FIRST_LOAD_TIME,‘yyyy-mm-dd/hh24:mi:ss’)>sysdate-1 —一天内的sql
and s.PARSING_SCHEMA_NAME=‘HTCS’ –用户为htcs
) t
where exec_rank
期望每一个喜欢数据库,钻研数据库的人,迅速成为数据库大师;