如何系统的学习数据库、形成自己的数据库体系、数据库快速入门

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 ht/ht@192.168.40.240/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

期望每一个喜欢数据库,钻研数据库的人,迅速成为数据库大师;

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值