资源描述
东南大学实用数据库复习
实用数据库系统实践
30个选择题:
Linux相关
1.Linux目录
/ 根目录
/home 主目录
/root 管理员的主目录
/tmp 临时文件
/etc 存放Linux服务器软件的配置信息
/var 服务器运行产生日志
/sbin 管理员执行的命令
/bin 普通用户执行的命令
/dev 设备文件
2.一些基本操作命令
head -n [文件] 查看文件的前n行内容
tail -n [文件] 查看文件的前n行内容
cat [文件] 查看文件所有内容,适合查看小文件
more [文件] Enter一行 空格一屏 q退出
less [文件] 上下键一行 空格一屏 q退出
wc [文件] 统计 行数,单词数,字符数
touch [文件] 建立空文件
-p 目录不存在则创建
mkdir [文件] 建立空目录
rmdir [文件] 删除空目录
cp [opt] [文件] [文件]
-r 递归执行
mv [opt] [文件] [文件]
rm [opt] [文件] [文件]
3.TAB键补全
单击 补全命令/文件/目录
双击 列出输入字符开头的所有命令/文件/目录
4.文件权限
三级用户权限
文件所有用户
文件所有组
其他用户
权限标识
可读取 r 4 2^2
可写入 w 2 2^1
可执行 x 1 2^0
权限示例
rwx rw- r--
111 110 100
7 6 4
相关命令
chown [参数] [用户名][:组名] [文件] //更改文件的拥有用户,组
[参数] -R 递归执行
chmod [参数] [who][opt][mode] [文件]
[参数] -R 递归执行
[who] 操作对象who可是下述字母中的任一个或者它们的组合:
u user, owner
g group, group
o others, other users
a all, all users, 默认值
[opt]
+ 增加权限
- 删除权限
= 覆盖权限
[mode]
[-/r][-/w][-/x]
chmod [umod][gmod][omod] [文件/目录名]
[umod]
0 1 2 3 4 5 6 7
000 001 010 011 100 101 110 111
--- --x -w- -wx r-- r-x rx- rwx
[gmod]
0 1 2 3 4 5 6 7
000 001 010 011 100 101 110 111
--- --x -w- -wx r-- r-x rx- rwx
[omod]
0 1 2 3 4 5 6 7
000 001 010 011 100 101 110 111
--- --x -w- -wx r-- r-x rx- rwx
5.查看Linux进程
ps //列出某个进程
-A //显示所有程序
-e //此参数的效果和指定"A"参数相同
-f //显示UID, PPIP, C, STIME栏位
grep pname //查找
| //管道命令,同时执行
ps -ef|grep python //列出python进程信息
kill [参数] pid //结束进程
-2 发送Ctrl+c请求
-9 强制终止
-15 发送Ctrl+\请求
Oracle数据库相关
6.Oracle服务器体系结构
使用SQL
兼容C/S架构,B/S架构
Oracle Server = Instance + Database
Instance = Process + memory
Database = 多种File(Disk)
7.启动服务器
单命令
SQL> startup
分步骤
1.startup nomount; //读初始化参数文件,启动实例,但不加载数据库
ORACLE instance started.
2.alter database mount; //加载数据库控制文件
Database mounted.
3.alter database open; //根据控制文件找到并打开数据文件和日志文件,打开数据库
Database opened.
8.关闭服务器
shutdown normal; 等待所有会话断开连接
shutdown transactional; 等待所有会话完成事务
shutdown immediate; 不等待所有会话完成事务
shutdown abort; 立即关闭实例
9.更改参数文件, scope
db_name 8字符 字母$#_ 不可修改
processes 最小值6 最大依赖OS 不可修改
JAVA_POOL_SIZE 可修改
show parameter java_pool_size;
alter system set java_pool_size=20M scope=both; 立即生效并保存(默认值)
alter system set java_pool_size=32M scope=memory; 立即生效不保存
alter system set java_pool_size=24M scope=spfile; 保存且下次生效
10.服务器网络设置
主机名 server1.example.coom
服务名 orcl.example.coom
监听器 LISTENER 打开
使用Oracle账户操作
lsnrctl status/start/stop;
进程 ps –ef | grep tnslsnr
文件 /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora
默认名 LISTENER
端口 1521
协议 TCP
(第五天:)
11.启动监听器、服务器、企业管理器
1.监听器 lsnrctl status
2.服务器 sqlplus / as sysdba
SQL> startup
3.Oracle Enterprise Manager
emctl status dbconsole
emctl start dbconsole
进入 https://主机名:1158/em
12.创建账户
create user 用户名 identified by "密码";
13.权限
grant create session to jack;
grant create table to jack;
revoke create table from jack;
系统权限的撤销不级联
grant create session to jack with admin option;
grant create table to jack with admin option;
对象权限的撤销级联
grant select on hr.employees to jack with grant option;
14.数据库并发性
DML 增删改合
DDL create drop 等
行锁TX
表锁TM
2 row share
表级行共享锁. SELECT FROM FOR UPDATE时申请, 允许申请2345
3 row exclusive
表级行排他锁. 非全表DML时申请, 允许申请(删改时非本行)23
4 share
全表共享锁. SELECT * FROM FOR UPDATE时申请, 允许申请24, 不允许DML
5 share row exclusive
全表行排他锁. 4下申请3升级而来, 允许申请(删改时非本行)2, 不允许DML
6 exclusive
全表排它锁. DDL时申请, 不与任何锁共存,不允许其他会话读取修改
手工加锁语句
SQL> LOCK TABLE 表名 IN 锁级别 MODE;
锁释放 事务commit/事务rollback/事务结束
解决锁冲突(dba账户)
SQL> select sid from v$lock where block>0; 发现锁定其他会话的SID
SQL> select serial# from v$session where sid=会话ID; 查找序列号
SQL> alter system kill session '会话ID, 序列号' immediate; 结束会话
19.UNDO还原
查看参数 show parameter undo_tablespace
创建UNDO数据文件
create undo
tablespace undotbs2
datafile '/u01/app/oracle/oradata/orcl/undotbs2.dbf'
size 50M
autoextend on next 10M maxsize 30G;
设置UNDO空间 SQL> alter system set undo_tablespace=undotbs2;
设置保留时间 SQL> alter system set undo_retention=86400(秒);
修改UNDO数据文件的大小 SQL> alter database
datafile '/u01/app/oracle/oradata/orcl/undotbs2.dbf'
resize 200M;
自动管理 SQL> alter system set undo_management=AUTO;
保留确保机制
SQL> alter tablespace undotbs2 retention guarantee/ noguarantee;
20.备份和恢复
可以备份 数据 控制 参数
不可备份 日志文件
设置归档路径
mkdir -p /u01/arch01
SQL> alter system set log_archive_dest_1='location=/u01/arch01';
开启归档
SQL> shutdown immediate;
SQL> startup mount;
SQL> alter database archivelog;
SQL> alter database open;
备份工具 Recovery Manager
RMAN> backup datafile '/u01/app/oracle/oradata/orcl/users01.dbf'; 数据文件
RMAN> backup current controlfile; 控制文件
RMAN> backup spfile; 参数文件
RMAN> backup datafile 4, 5;
RMAN> backup tablespace users, example; 表空间users, example
RMAN> backup database; 数据库
RMAN> backup archivelog all; 归档文件
(第九天:)
21.闪回技术
1.闪回删除表 对应drop table语句
例外:系统表空间中system的表 不受回收站保护
前提: recyclebin = ON
SQL> alter system set recyclebin = ON;
查看回收站 SQL> show recyclebin; (可以查看到表的原始名称和回收站中名称)
SQL> select count(*) from "BIN$SdtN9PxJvp/gUAB/AQBSBA==$0";
步骤:
执行闪回 SQL> flashback table
原表名/"回收站表名" to before drop
(可选) rename to 新表名;
删除表时同时清除回收站 SQL> drop table test02 purge;
清除回收站中的表 SQL> purge table other_test02;
2.闪回查询 对应DML语句误操作
尚未提交 rollback
已经提交 闪回查询
前提: undo_management = auto
SQL> show parameter undo;
SQL> alert system set undo_management = auto;
SQL> alert system set undo_retention = 900;
步骤:
1.获取误操作前的时间戳(可以省略此步)
SQL> select
to_char(sysdate, 'yyyy-mm-dd hh24:mi:ss') time,
from dual;
结果:
TIME
-------------------
2010-06-29 23:03:14
2.闪回表
SQL> alter table employees enable row movement;//开启闪回表的行迁移
SQL> flashback table employees to timestamp
to_timestamp('2010-06-29 23:03:14', 'yyyy-mm-dd hh24:mi:ss');
3.闪回数据库 对应truncate table语句(清空表中的内容)
前提:数据库归档模式(必须在服务器mount阶段修改)
01.关闭服务器(如果开启) SQL> shutdown immediate;
02.启动到mount阶段 SQL> startup mount;
03.开启数据库闪回功能 SQL> alter database flashback on;
04.打开数据库 SQL> alter database open;
05.设置备份时间 SQL> alter system set
db_flashback_retention_target=2880;
06.查看确认 SQL> select flashback_on from v$database;
步骤: (必须在服务器mount阶段闪回)
01.关闭服务器(如果开启) SQL> shutdown immediate;
02.启动到mount阶段 SQL> startup mount;
03.闪回数据库 SQL> flashback database to timestamp
to_timestamp('2017-03-17 20:43:16','YYYY-MM-DD HH24:MI:SS');
04.打开数据库并清空日志 SQL> alter database open resetlogs;
附加步骤:重备份
01. RMAN> delete backup;
02. RMAN> delete copy;
03. RMAN> backup database;
MySQL数据库
(第十天:)
22.MySQL体系结构
连接层
通信协议
TCPIP(Windows/Linux)
Socket(Linux)
share memory(Windows)
name pipe(windows)
线程 每一个客户分配连接线程
验证 用户名 口令 主机
SQL层
解析器 select * from emp where id=1;
授权 检查权限
优化器 生成计划
查询执行 查询
查询高速缓存 保存查询结果
查询日志记录
存储层
存放在内存 MEMORY
存放在磁盘 引擎InnoDB/Myisam
存放在网络 NDB
23.MySQL命令
客户机命令程序(需要数据库用户名密码认证)
mysql /usr/bin/mysql
mysql> show databases; 查看有多少数据库
mysql> use mysql 使用某个数据库
mysql> show tables; 表
mysql> show engines; 存储引擎
mysql> show variables; 查看服务器变量
mysql> show status; 查看服务器状态
SQL语句
mysql> create table students(stu_id int,stu_name char(10));
mysql> insert into students values(1,'jack');
mysql> show variables like 'autocommit';
mysqladmin /usr/bin/mysqladmin
mysqladmin [OPTIONS] command [command-option] [command [command-option]]
create db_name
drop db_name
password new_password
ping
processlist
mysqlcheck:检查数据库表的完整性。
mysqldump: 创建逻辑备份。
mysqlimport:导入文本数据文件。
mysqlshow:显示数据库、表和列信息。
mysqlslap:模仿客户机负载。
管理和使用程序(无需数据库用户名密码认证)
innochecksum:脱机检查InnoDB 表空间文件。
mysqlaccess:检查访问特权。
mysqldumpslow:汇总慢速查询日志文件。
mysqlbinlog:显示二进制日志文件。
(第十一天:)
24.系统的安装 脚本
1.建立数据库
scripts/mysql_install_db
--user=mysql
--basedir=/usr/local/mysql
--datadir=/usr/local/mysql/data
2.安全加固mysql
/usr/bin/mysql_secure_installation
(第十三天:)
25.二进制日志
1.错误日志
开启
./usr/local/mysql/bin/mysqld_safe
--user=mysql
--log_error=/usr/local/mysql/data/mysqld.err
重启服务器 service mysql restart
2.常规查询
开启
./usr/local/mysql/bin/mysqld
--user=mysql
--general_log=1
--general_log_file=/usr/local/mysql/data/mysqld.log
查看
cat /usr/local/mysql/data/ mysqld.log
3.慢速查询
开启
./usr/local/mysql/bin/mysqld
--user=mysql
--slow_query_log=1
--slow_query_log_file=/usr/local/mysql/data/mysqld_slow.log
--long_query_time=3
查看 mysql> show variables like 'slow_query_log%';
测试
select sleep(4);
cat /usr/local/mysql/data/mysqld_slow.log
4.二进制日志
开启
./usr/local/mysql/bin/mysqld
--user=mysql
--binlog_format=ROW/STATEMENT
查看 mysqlbinlog /usr/local/mysql/data/1.000003
5.企业审计
mysql> show variables like 'plugin_dir';
20个填空题:
(第二天:)
1.监听器
使用Oracle账户操作
进程 tnslsnr
文件 /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora
默认监听器名字 LISTENER
lsnrctl status/start/stop;
2.客户端登录
sqlplus 账户名/密码
3.Oracle数据库文件
1.数据文件
select name from v$datafile;
2.日志文件
select member from v$logfile;
3.控制文件
select name from v$controlfile;
4.参数文件
/u01/app/oracle/product/11.2.0/dbhome_1/dbs/spfileorcl.ora
5.口令文件
/u01/app/oracle/product/11.2.0/dbhome_1/dbs/orapworcl
6.跟踪文件目录
/u01/app/oracle/diag/rdbms/orcl/orcl/trace/
7.预警文件
/u01/app/oracle/diag/rdbms/orcl/orcl/trace/alert_orcl.log
(第三天:)
4.配置监听器
cat /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora
5.连接方式 sqlplus
sqlplus 账户名/密码@主机名或地址:端口/服务名
6.数据库中逻辑对象, 物理对象
查看oracle数据文件
select name from v$datafile;
select name from v$tempfile;
查看oracle表空间
select tablespace_name from dba_data_files;
查看以上的关系
select tablespace_name,file_name from dba_data_files;
7.表空间
创建表空间 create tablespace tbs2
datafile '/u01/app/oracle/oradata/orcl/tbs2_1.dbf'
size 20M
autoextend on
next 10M maxsize 20G [,...];
删除表空间 drop tablespace tbs2;
drop tablespace tbs1 including contents;
drop tablespace tbs2 including contents and datafiles;
(第六天:)
8.数据库并发性
DML 增删改合
DDL create drop 等
行锁TX
表锁TM
2 row share
表级行共享锁. SELECT FROM FOR UPDATE时申请, 允许申请2345
3 row exclusive
表级行排他锁. 非全表DML时申请, 允许申请(删改时非本行)23
4 share
全表共享锁. SELECT * FROM FOR UPDATE时申请, 允许申请24, 不允许DML
5 share row exclusive
全表行排他锁. 4下申请3升级而来, 允许申请(删改时非本行)2, 不允许DML
6 exclusive
全表排它锁. DDL时申请, 不与任何锁共存,不允许其他会话读取修改
手工加锁语句
SQL> LOCK TABLE 表名 IN 锁级别 MODE;
锁释放 事务commit/事务rollback/事务结束
解决锁冲突(dba账户)
SQL> select sid from v$lock where block>0; 发现锁定其他会话的SID
SQL> select serial# from v$session where sid=会话ID; 查找序列号
SQL> alter system kill session '会话ID, 序列号' immediate; 结束会话
9.创建UNDO表空间
create undo
tablespace undotbs2
datafile '/u01/app/oracle/oradata/orcl/undotbs2.dbf'
size 50M
autoextend on
next 10M
maxsize 30G;
(第八、九天:)
10.闪回技术
1.闪回删除表 对应drop table语句
例外:系统表空间中system的表 不受回收站保护
前提: recyclebin = ON
SQL> alter system set recyclebin = ON;
查看回收站 SQL> show recyclebin; (可以查看到表的原始名称和回收站中名称)
SQL> select count(*) from "BIN$SdtN9PxJvp/gUAB/AQBSBA==$0";
步骤:
执行闪回 SQL> flashback table
原表名/"回收站表名" to before drop
(可选) rename to 新表名;
删除表时同时清除回收站 SQL> drop table test02 purge;
清除回收站中的表 SQL> purge table other_test02;
2.闪回查询 对应DML语句误操作
尚未提交 rollback
已经提交 闪回查询
前提: undo_management = auto
SQL> show parameter undo;
SQL> alert system set undo_management = auto;
SQL> alert system set undo_retention = 900;
步骤:
1.获取误操作前的时间戳(可以省略此步)
SQL> select
to_char(sysdate, 'yyyy-mm-dd hh24:mi:ss') time,
from dual;
结果:
TIME
-------------------
2010-06-29 23:03:14
2.闪回表
SQL> alter table employees enable row movement;//开启闪回表的行迁移
SQL> flashback table employees to timestamp
to_timestamp('2010-06-29 23:03:14', 'yyyy-mm-dd hh24:mi:ss');
3.闪回数据库 对应truncate table语句(清空表中的内容)
前提:数据库归档模式(必须在服务器mount阶段修改)
01.关闭服务器(如果开启) SQL> shutdown immediate;
02.启动到mount阶段 SQL> startup mount;
03.开启数据库闪回功能 SQL> alter database flashback on;
04.打开数据库 SQL> alter database open;
05.设置备份时间 SQL> alte
展开阅读全文