相关链接
CDB与PDB
CDB与PDB是Oracle 12C引入的新特性,在ORACLE 12C数据库引入的多租用户环境(Multitenant Environment)中,允许一个数据库容器(CDB)承载多个可插拔数据库(PDB)。
CDB全称为Container Database,中文翻译为数据库容器,PDB全称为Pluggable Database,即可插拔数据库。
在ORACLE 12C之前,实例与数据库是一对一或多对一关系(RAC):即一个实例只能与一个数据库相关联,数据库可以被多个实例所加载。
而实例与数据库不可能是一对多的关系。当进入ORACLE 12C后,实例与数据库可以是一对多的关系。
和SQL Server相对照的话,CDB与PDB是不是感觉和SQL SERVER的单实例多数据库架构是一回事。像PDB$SEED可以看成是master、msdb等系统数据库,PDBS可以看成用户创建的数据库。而可插拔的概念与SQL SERVER中的用户数据库的分离、附加其实就是那么一回事。
CDB组件
-
ROOT组件
- ROOT又叫CDB$ROOT, 存储着ORACLE提供的元数据和Common User,元数据的一个例子是ORACLE提供的PL/SQL包的源代码,Common User 是指在每个容器中都存在的用户。
-
SEED组件
- Seed又叫PDB$SEED,这个是你创建PDBS数据库的模板,你不能在Seed中添加或修改一个对象。一个CDB中有且只能有一个Seed. 这个感念,个人感觉非常类似SQL SERVER中的model数据库
-
PDBS
- CDB中可以有一个或多个PDBS,PDBS向后兼容,可以像以前在数据库中那样操作PDBS,这里指大多数常规操作。
这些组件中的每一个都可以被称为一个容器。因此,ROOT(根)是一个容器,Seed(种子)是一个容器,每个PDB是一个容器。每个容器在CDB中都有一个独一无二的的ID和名称。
Oracle角色说明
-
connect(连接角色)
- 这种角色下只可以登录Oracle,不可用创建实体,也不可用创建数据库结构,即只能对其他人创建的表中的数据进行操作。
-
resource(资源角色)
- 该角色可以创建实体,但是不可以创建数据库结构。 可以创建表、序列(sequence)、运算符(operator)、过程(procedure)、触发器(trigger)、索引(index)、类型(type)和簇(cluster)。
-
dba(数据库管理员权限)
- 该角色拥有系统最高权限,只有DBA才可以创建数据库结构。包括无限制的空间限额和给其他用户授予各种权限的能力,system由dba用户拥有。 对于普通用户来说,授予connect和resource权限即可,只对dba授予connect、resource和dba权限。
Oracle命令
系统相关
- 查询oracle版本
select *
from V$VERSION;
- 查询oracle的SID
select instance_name from v$instance;
- 查询db_name
select name from v$database;
- 重启数据库
shutdown immediate;
startup;
- 当前连接数
select count(*) from v$process;
- 数据库允许的最大连接数
select value from v$parameter where name = 'processes';
- 修改最大连接数:
alter system set processes = 2000 scope = spfile;
- 数据库服务器配置
tnsnames,方便后期运维操作
# 添加前最好先备份下,vim tnsnames.ora编辑文件,仔细检查,不要配置错误
cd $ORACLE_HOME/network/admin/
- 格式如下
TESTRAC =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = scan域名)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = TESTRAC )
)
- 数据库告警阈值设定查看
select warning_value, critical_value
from dba_thresholds
where metrics_name='Tablespace Space Usage' and object_name is NULL;
- 数据库当前告警和可用的处理方法
select reason,SUGGESTED_ACTION
from dba_outstanding_alerts
where object_name='CDATA';
- 查看系统的编码格式
select userenv('language') from dual;
PDB相关
- 查看CDB信息
select name, cdb, open_mode, con_id
from v$database;
- 查看PDB实例
select name, con_id, open_mode
from V$PDBS;
- 查看已有pdb的tempfile文件
select name
from V$TEMPFILE;
- 查看已有的PDB的datafile
select name
from V$DATAFILE;
- 创建一个新的PDB
- 密码大小写是否敏感可以在CDB下查看该参数: show parameter sensitive
file_name_convert参数参数格式:/opt/oracle/oradata/${SID}/pdbseed, /opt/oracle/oradata/${SID}/${PDB_Name}
create pluggable database dev admin user dev identified by 123 file_name_convert =('/opt/oracle/oradata/ORCLCDB/pdbseed','/opt/oracle/oradata/orcl_root_dev');
- 设置pdb自启动
${pdb} save state是对于某个pdb而言。即你想让哪个pdb随着cdb启动,就设置哪一个。
alter pluggable database all save state;
-- 查询自启动设置
select con_name, instance_name, state from dba_pdb_saved_states;
-- 取消自启动
alter pluggable database all discard state;
- 启动或关闭一个创建好的PDB
alter pluggable database dev open;
alter pluggable database pdb1 close;
-- 启动所有pdb
alter pluggable database all open;
- 切换到指定PDB
alter session set container=pdb1;
- 查看配置文件default
-- FAILED_LOGIN_ATTEMPTS --用户失败登录尝试次数
-- PASSWORD_LIFE_TIME--用户密码生命周期(按规定要求是配置3个月90天)
-- PASSWORD_VERIFY_FUNCTION--密码校验函数
-- PASSWORD_GRACE_TIME--密码失效宽容期限(30天的宽容期限)
select * from dba_profiles;
- 删除PDB
-- 关闭所有节点下的指定PDB,PDB处于关闭状态才能删除
show pdbs;
-- 首先在所有节点上停止实例(PDB)
alter pluggable database testrac close immediate;
-- 单节点执行删除命令
drop pluggable database testrac including datafiles;
- 查看profile
-- 查看profile
select profile,resource_name,limit from dba_profiles;
select * from dba_profiles where profile='PASSWORD_UNLIMIT_PROFILE';
- 创建profile
-- 创建profile
CREATE PROFILE "PASSWORD_UNLIMIT_PROFILE" LIMIT
COMPOSITE_LIMIT UNLIMITED
SESSIONS_PER_USER UNLIMITED
CPU_PER_SESSION UNLIMITED
CPU_PER_CALL UNLIMITED
LOGICAL_READS_PER_SESSION UNLIMITED
LOGICAL_READS_PER_CALL UNLIMITED
IDLE_TIME UNLIMITED
CONNECT_TIME UNLIMITED
PRIVATE_SGA UNLIMITED
FAILED_LOGIN_ATTEMPTS 10
PASSWORD_LIFE_TIME 180
PASSWORD_REUSE_TIME UNLIMITED
PASSWORD_REUSE_MAX UNLIMITED
PASSWORD_VERIFY_FUNCTION NULL
PASSWORD_LOCK_TIME 1
PASSWORD_GRACE_TIME 7
INACTIVE_ACCOUNT_TIME UNLIMITED;
- 修改profile密码过期策略
-- 修改profile密码过期时间
ALTER profile PASSWORD_UNLIMIT_PROFILE limit PASSWORD_LIFE_TIME UNLIMITED;
表空间相关
- 查看OMF配置的
db_create_file_dest
show parameter db_create_file_dest;
- 查看表空间
select name from v$tablespace;
-- 查看表空间大小
SELECT t.tablespace_name, round(SUM(bytes / (1024 * 1024)), 0) ts_size
FROM dba_tablespaces t, dba_data_files d
WHERE t.tablespace_name = d.tablespace_name
GROUP BY t.tablespace_name;
- 查看表空间下的表
select TABLE_NAME,TABLESPACE_NAME from dba_tables where TABLESPACE_NAME='CDATA';
- 查看表空间使用情况
select sum(bytes) / (1024 * 1024) as free_space, tablespace_name
from dba_free_space
group by tablespace_name
-- 查看表空间使用情况(注:若表空间未使用或者占满,sys.sm$ts_used、sys.sm$ts_free可能为空)
SELECT a.tablespace_name,a.bytes total,b.bytes used,c.bytes free,(b.bytes * 100) / a.bytes "% USED ",(c.bytes * 100) / a.bytes "% FREE "
FROM sys.sm$ts_avail a, sys.sm$ts_used b,sys.sm$ts_free c
WHERE a.tablespace_name = b.tablespace_name
AND a.tablespace_name = c.tablespace_name;
- 查看单个表空间使用情况
select df.tablespace_name tablespace, fs.bytes free,
df.bytes , fs.bytes *100/ df.bytes pct_free
from dba_data_files df ,dba_free_space fs
where df.tablespace_name = fs.tablespace_name
and df.tablespace_name = 'CDATA';
- 查看表空间是否可扩展
SELECT T.TABLESPACE_NAME, D.FILE_NAME, D.AUTOEXTENSIBLE, D.BYTES, D.MAXBYTES, D.STATUS
FROM DBA_TABLESPACES T,DBA_DATA_FILES D
WHERE T.TABLESPACE_NAME = D.TABLESPACE_NAME
ORDER BY TABLESPACE_NAME, FILE_NAME;
- 设置表空间大小和是否可扩展
//设置表空间大小
alter database datafile '/opt/oracle/oradata/orclpdb3/ORCL/****/datafile/o1_mf_inventor_k4ykocb9_.dbf' resize 64M;
//设置表空间是否可扩展s
alter database datafile '/opt/oracle/oradata/orclpdb3/ORCL/****/datafile/o1_mf_inventor_k4ykocb9_.dbf' autoextend off;
- 创建表空间
-- 最基础的创建表空间
create tablespace 123;
-- 创建表空间,指定数据文件位置,指定文件大小,扩宽性,等
-- 创建表空间时需要保证指定的datafile目录是存在的
-- 参数说明:
-- datafile '${data file path}':数据文件路径
-- size ${size}:数据文件大小
-- autoextend on next ${size}:下次自动扩展大小
-- maxsize unlimited:最大尺寸无限制
create tablespace 表空间 datafile '/opt/oracle/oradata/orcl/数据文件.dbf' size 200m autoextend on next 10m maxsize unlimited;
- 创建临时表空间
-- 创建临时表空间,指定数据文件位置,指定文件大小,扩宽性,等
-- 创建临时表空间时需要保证指定的datafile目录是存在的
-- 参数说明:
-- tempfile '${temp data file path}':数据文件路径
-- size ${size}:数据文件大小
-- autoextend on next ${size}:下次自动扩展大小
-- maxsize unlimited:最大尺寸无限制
create temporary tablespace 表空间 tempfile '/opt/oracle/oradata/orcl/数据文件.dbf' size 200m autoextend on next 10m maxsize unlimited;
- 设置表空间自动扩展
alter database datafile '/opt/oracle/oradata/oradata/orcl/数据文件.dbf' autoextend on;
- 查看文件位置(表空间等一些文件的位置)
select name from v$datafile;
- 查看默认表空间
select property_name ,property_value from database_properties where property_name like 'DEFAULT_%TABLE%';
- 设置默认表空间
alter database default tablespace 123;
-- 默认临时表空间
alter database default temporary tablespace 123;
- 删除表空间
drop tablespace 123;
-- 如果表空间有数据,使用以下命令删除
drop tablespace 123 including contents and datafiles;
表空间权限
建用户的时候通常都可以选择一个default tablespace,但是在没有授权的情况下该用户也无法往该表空间写数据,需要进行授权。
授权有全局授权和通过quota限制两种情况(quota配额可以防止某个用户过多使用某个表空间中的空间)
- 授予用户全局表空间权限 - 通过命令的方式
grant unlimited tablespace to username;
- 授予用户全局表空间权限 - 通过角色的方式
-- 查看resource角色底下带的权限,没有unlimited tablespace权限
SELECT * from Dba_Sys_Privs s WHERE s.grantee='RESOURCE';
-- 把resource角色授予用户
grant resource to username;
--查看用户拥有的权限,可以发现自己带上了unlimited tablespace(另外这个时候可以去看dba_ts_quotas,这样授权的用户没有体现出来)
SELECT * from Dba_Sys_Privs s WHERE s.grantee='USERNAME' ;
- 授予某个用户完全访问某个表空间权限
-- 授权
alter user ${username} quota unlimited on ${tablespace};
-- 在授予完权限后查看dba_ts_quotas表
-- max_bytes = -1,代表不受限制
SELECT * from Dba_Ts_Quotas z WHERE z.username='USERNAME';
- 授予某个用户有限的访问某个表空间权限
-- 授权
ALTER USER username QUOTA 1M ON rcat;
-- 在授予完权限后查看dba_ts_quotas表
-- max_bytes = 1M
SELECT * from Dba_Ts_Quotas z WHERE z.username='USERNAME';
- 删除用户表空间权限
-- 全局
revoke unlimited tablespace from username;
-- 个别表空间
ALTER USER username QUOTA 0 ON rcat
角色相关
Oracle三种标准角色,connect role(连接角色)、resource role(资源角色)、dba role(数据库管理员角色)
-
connect role:临时用户,特指不需要建表的用户,通常只赋予他们connect role。 connect是使用oracle简单权限,这种权限只对其他用户的表有访问权限,包括select/insert/update和delete等。 拥有connect role 的用户还能够创建表、视图、序列(sequence)、簇(cluster)、同义词(synonym)、回话(session)和其他 数据的链(link)
-
resource role:更可靠和正式的数据库用户可以授予resource role。 resource提供给用户另外的权限以创建他们自己的表、序列、过程(procedure)、触发器(trigger)、索引(index)和簇(cluster)。
-
dba role:dba role拥有所有的系统权限 包括无限制的空间限额和给其他用户授予各种权限的能力。system由dba用户拥有
- 查看所有角色
select * from dba_roles;
- 查看当前用户被激活的全部角色
select * from session_roles;
- 查看当前用户被授予的角色和信息
select * from user_role_privs;
- 查看某个用户所拥有的角色
select * from dba_role_privs where grantee = 'username';
- 查看某个角色所拥有的权限
select * from dba_sys_privs where grantee = 'CONNECT';
- 创建角色
创建的角色可以由表或系统权限或者两者的组合构成
-- 创建角色
create role myRole;
-- 授权角色
-- 如使myRole获得了在mytable中使用select进行查询的权限
grant select on mytable to myRole;
-- 再比如为角色赋予创建会话的权限
grant create session to myRole;
-- 删除角色
drop role myRole;
- 授予用户角色
-- 切换到对应的PDB下
alter session set container=PDB1;
show pdbs;
-- 授予dba、resource、connect角色
grant dba,resource,connect to pdb1;
-- 收回某个用户的某个角色
revoke dba,resource,connect from pdb1;
-- 查看用户角色
select * from dba_role_privs where grantee = 'PDB1' and granted_role in ('DBA','RESOURCE','CONNECT')
- 授予角色权限
-- create seesion 用户登陆会话权限
-- create table 用户建表权限
-- create sequence 用户创建序列权限
-- create view 用户创建视图权限
-- create procedure 用户创建存储过程权限
-- create tablespace 用户创建表空间权限
grant create session,create table to role_name;
- 撤销角色权限
revoke create table from role_name;
用户相关
- 查看所有用户信息
select * from all_users;
- 查看当前用户的信息
select * from user_users;
- 创建用户,对于普通用户名,用户创建的普通用户名必须以C##(或c##)开头。
create user c##svc_res identified by 123;
-- 创建用户并指定表空间
-- default tablespace ${tablespace}:默认表空间
-- temporary tablespace ${talbespace}:临时表空间
create user tssh identified by "XXXXX" default tablespace TSSH_15_DATA_MIN temporary tablespace TEMP;
- 更改用户密码
-- 如果密码带有字符需要加上双引号
alter user pdb identified by 321
- 查看当前用户
show user;
- 删除用户
-- cascade操作需要谨慎,cascade代表代表着联级删除用户名下所有的表和视图
drop user c##svctest cascade;
- 创建一个模式
Oracle是不支持创建自定义模式的,想要创建模式的话只能新建一个用户,每个用户会有一个默认的和用户名相同的模式
CREATE SCHEMA "svc_test" AUTHORIZATION SYSTEM;
- 查看当前有哪些用户正在使用数据
SELECT osuser, a.username,cpu_time/executions/1000000||'s', sql_fulltext,machine
from v$session a, v$sqlarea b
where a.sql_address = b.address order by cpu_time/executions desc;
- 锁定与解锁用户
alter user itcast account lock;
alter user itcast account unlock;
- 设置用户空间
-- 设置用户的空间配额
-- quota 容量的意思
-- unlimited 无限制
alter user itcast quota unlimited on pdb1;
-
设置用户失效
- 旨在要求使用方强制修改密码,提高密码安全性和复杂度,避免由我方运维人员知晓
alter user testrac password expire;
select username,account_status from dba_users where oracle_maintained='N';
- 查看用户所属的profile
SELECT username,PROFILE FROM dba_users;
- 查看指定概要文件(default)的密码有效期设置
SELECT * FROM dba_profiles s WHERE s.profile='DEFAULT' AND resource_name='PASSWORD_LIFE_TIME';
- 修改密码有效期
-- 影响所有用户
ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;
- 修改用户所属的profile
-- 修改用户所属profile
-- 修改单个用户的密码有效期可以通过新建profile,然后修改用户所属的profile实现
ALTER user test profile PASSWORD_UNLIMIT_PROFILE;
权限相关
- 基本权限查询
--当前用户所拥有的全部权限
select * from session_privs;
--当前用户的系统权限
select * from user_sys_privs;
--当前用户的对象权限
select * from user_tab_privs;
--查询某个用户所拥有的系统权限
select * from dba_sys_privs where grantee='DBA';
--查看角色(只能查看登陆用户拥有的角色)所包含的权限
select * from role_sys_privs;
- 查看哪些用户有
sysdba或sysoper系统权限(查询时需要相应权限)
select * from v$pwfile_users;
- 查询所有的用户级别权限
select *
from system_privilege_map
order by name;
- 授予用户权限
-- create seesion 用户登陆会话权限
-- create table 用户建表权限
-- create sequence 用户创建序列权限
-- create view 用户创建视图权限
-- create procedure 用户创建存储过程权限
-- create tablespace 用户创建表空间权限
-- unlimited teblespace 用户无限表空间使用权限
grant create session,create table to user_name;
- 查看Oracle提供的系统权限
select name from sys.system_privilege_map
- 查看一个用户的所有系统权限(包含角色的系统权限)
select privilege from dba_sys_privs where grantee='SCOTT'
union
select privilege from dba_sys_privs where grantee in (
select granted_role from dba_role_privs where grantee = 'SCOTT'
);
- 查看当前用户可以访问的所有数据字典的视图
select * from dict where comments like '%grant%';
- 查看当前数据库全称
select * from global_name;
其他设置
- 查看表字段
#desc ${table_name}
- 命令行相关设置
-- 显示一行多少字符
show line
-- 设置一行多少字符
set linesize 1000
-- 设置是否显示报表标题
set hea on
-- 显示每页行数
show pages
-- 设置每页显示行数
set pages 50
-- 设置输出结果是否滚动
set pause on/off
-- 设置滚动时自定义的提示
set pause 'Press <Enter> to continue'