oracle超详细语法和备份工具

编程入门 行业动态 更新时间:2024-10-10 01:19:09

oracle超详细<a href=https://www.elefans.com/category/jswz/34/1770552.html style=语法和备份工具"/>

oracle超详细语法和备份工具

oracle基础语法

在 Oracle 开发中,客户端把 SQL 语句发送给服务器,服务器对 SQL 语句进行编译、执行,把执行的结果返回给客户端。常用的SQL语句大致可以分为五类:数据定义语言(DDL),包括 CREATE(创建)命令、 ALTER(修改)命令、 DROP(删除)命令等。数据操纵语言(DML),包括 INSERT(插入)命令、 UPDATE(更新)命令、 DELETE(删除)命令、 SELECT … FOR UPDATE(查询)等。数据查询语言(DQL),包括基本查询语句、 Order By 子句、 Group By 子句等。事务控制语言(TCL),包括 COMMIT(提交)命令、 SAVEPOINT(保存点)命令、ROLLBACK(回滚)命令。     数据控制语言(DCL), GRANT(授权)命令、 REVOKE(撤销)命令。select - 从数据库中提取数据update - 更新数据库中的数据delete - 从数据库中删除数据insert into - 向数据库中插入新数据create database - 创建新数据库altr database - 修改数据库create lable - 创建新表alter lable - 变更(改变)数据库表drop lable - 删除表create index - 创建索引(搜索键)drop index - 删除索引
查看当前连接数据库的用户
show user
查看数据库当前连接数
select count(*) from v$session;
查看用户下的表
select * from tab;
查看指定用户拥有的表
select table_name from dba_tables where owner='XIAOXIONG';
用户切换
conn 用户名/密码 [as sysdba]conn sys/123456 as sysdba
解锁用户
alter user sys(用户名) account unlock;alter user sys(用户名) identified by 123456(新密码);
新建用户
create user xiaoxiong identified by 123456;create user student--用户名identified by "123456"--密码default tablespace USERS--表空间名temporary tablespace temp --临时表空间名profile DEFAULT    --数据文件(默认数据文件)account unlock; -- 账户是否解锁(lock:锁定、unlock解锁)
修改用户密码
alter user xiaoxiong identified by 123456789;
删除用户
drop user xiaoxiong;
赋予用户所有权限
grant dba to xiaoxiong;
查看用户使用时间限制
select * from dba_profiles where resource_name = 'PASSWORD_LIFE_TIME';
查询密码有效时长
select * from dba_profiles where profile='DEFAULT' and resource_name='PASSWORD_LIFE_TIME';
查看所有用户密码到期日
select username,account_status,expiry_date,profile from dba_users;
查看指定用户的过期时间
select username, expiry_date, created from dba_users where username = 'XIAOXIONG';
设置当前用户密码时长
alter profile default limit password_life_time '90';--90天期限
alter profile default limit password_life_time unlimited; --永久期限
查看当前用户的系统权限和表级权限
select * from user_sys_privs;select * from user_tab_privs;
查看用户下所有的表
select * from user_tables;
查询当前用户所拥有的表的名称和所在的表空间名称
SELECT table_name,tablespace_name FROM user_tables;
查询当前用户所拥有的所有对象的名称、类型、创建时间、状态等信息
SELECT object_name,object_type,created,status FROM user_objects;
查询当前用户可以访问的表
SELECT table_name FROM all_tables;
查询当前数据库中所有的表,sys用户查看
SELECT table_name,tablespace_name,owner FROM dba_tables;
查看当前用户的角色
select * from user_role_privs;
赋予用户链接数据库权限
grant connect to xiaoxiong;
赋予用户只可以创建实体但是没有创建数据结构的权限
grant resource to xiaoxiong;
赋予用户登录的权限
grant create session to xiaoxiong;
赋予用户表操作的权限
grant create table to xiaoxiong;
赋予用户表空间操作的权限
grant unlimited tablespace to xiaoxiong;
赋予用户访问任务表的权限 同理可以赋予update 和delete
grant select on table to xiaoxiong;
取消用户对表操作的权限
rovoke create table from xiaoxiong;
查询指定用户系统权限
select * from dba_sys_privs where grantee = 'xiaoxiong';
查询指定用户对象权限
select * from dba_tab_privs where grantee = 'xiaoxiong';
查询数据库名
select name from v$database;
查询数据库实例名
select instance_name from v$instance;
查看数据库归档状态
select log_mode from v$database;
关闭数据库
shutdown immediate
启动到mount
startup mount
开启归档模式
alter database archivelog;
打开数据库
alter database open;
查看数据库运行状态
select status from v$instance;
查看数据文件、控制文件、日志文件的物理路径
select * from dba_data_files;
修改日志归档目录
alter system set log_archive_dest_1='location=/db/app/oracle/oradata/orcl';
查看日志归档路径
show parameter log_archive_dest;
查看归档日志格式
show parameter log_archive_format;
修改归档日志格式
alter system set log_archive_format ="archive_%t_%s_%r.log" scope=spfile;
查看归档日志空间占用
show parameter db_recovery;
创建表空间
create tablespace xiaoxiong datafile 'xiaoxiong.dbf' size 20M;
查询表空间的基本信息
SELECT tablespace_name,extent_management,segment_space_management,contents,status FROM dba_tablespaces;
删除表空间
drop tablespace xiaoxiong;
删除带内容的表空间
drop tablespace animal including contents and datafiles;
查看表空间存放位置
select * from dba_data_files;
查看所有表空间的大小
select tablespace_name ,sum(bytes) / 1024 / 1024 as MB from dba_data_files group by tablespace_name;
查看所有表空间存放的服务器路径
select tablespace_name,file_name from dba_data_files;
查询表空间
select name from v$datafile;
查询表空间空闲大小
select tablespace_name,file_id,block_id,bytes,blocks from dba_free_space;
修改表空间大小
ALTER DATABASE datafile '/db/app/oracle/product/11.2.0/dbs/daxiong.dbf' RESIZE 50M;
创建表
create table xiaoxiong(name varchar(12),age varchar(12)) tablespace daxiong;
删除表
drop table xiaoxiong;
插入表数据
insert into xiaoxiong(name,age) values('dada',22);
批量插入表数据
INSERT ALL INTO da VALUES(11,'aaa') INTO da VALUES(22,'ccc') INTO da VALUES(33,'ddd') SELECT * FROM da;
修改表数据
update xiaoxiong set name = 'xx' where age = 20;
追加新的列
alter table xiaoxiong add(shengri varchar(12));
修改列名
alter table xiaoxiong rename column shengri to data;
删除列
alter table xiaoxiong drop column data;
删除表内容
delete from xiaoxiong where age = 20;
将表移动到指定表空间
alter table table_name move tablespace_name;
查询数据库字符集
SELECT PARAMETER ,VALUE FROM V$NLS_PARAMETERS WHERE PARAMETER='NLS_CHARACTERSET';
角色管理
数据库预定义角色
CONNECT:CREATE SESSIONRESOURCE:CREATE SEQUENCE、CREATE TRIGGER、CREATE CLUSTER、CREATE PROCEDURE、CREATE TYPE、CREATE OPERATOR、CREATE TABLE、CREATE INDEXTYPEDBA:基本全有
查看所有角色
select * from dba_users;
创建角色
CREATE ROLE role1;
赋予角色权限
grant connect, resource to role1;
撤销角色权限
revoke connect, resource from role1;
查看系统同目前所有的角色
SELECT role FROM dba_roles;
查询用户USER1所有用的角色和默认角色
SELECT granted_role,default_role FROM dba_role_privs WHERE grantee='XIAOXIONG';
查询角色role1中包含的系统权限
SELECT privilege,admin_option FROM role_sys_privs WHERE role='role1';
查看其它用户未提交的事务
SELECT START_DATE,START_TIME,START_SCN,START_SCNB,XID FROM v$TRANSACTION order by start_date , start_time;
索引
CREATE [UNIQUE∣BITMAP] INDEX /*索引类型*/
[<用户方案名>.]<索引名>
ON <表名>(<列名> | <列名表达式> [ASC∣DESC] [,…n])
[LOGGING | NOLOGGING] /*指定是否创建相应的日志记录*/
[COMPUTE STATISTICS] /*生成统计信息*/
[COMPAESS | NOCOMPRESS] /*对复合索引进行压缩*/
[TABLESPACE <表空间名>] /*索引所属表空间*/
[SORT | NOSORT] /*指定是否对表进行排序*/
[REVERSE]UNIQUE:指定索引所 基于的列(或多列)值 必须唯一。默认的索引 是非唯一索引。Oracle 建议不要在表上显式定 义UNIQUE索引。BITMAP:指定创建位图索引而不是 B*索引。位图索引保存的行标识符 与作为位映射的键值有关。位映射 中的每一位都对应于一个可能的行 标识符,位设置意味着具有对应行 标识符的行包含该键值。<用户方案名>:表示包含索 引的方案。若忽略则Oracle 在自己的方案中创建索引。ON子句:在指定表的列中 创建索引,ASC和DESC分别 表示升序索引和降序索引。<列名表达式>:用指定表的列、 常数、SQL函数和自定义函数创 建的表达式,用于创建基于函数 的索引。指定列名表达式以后用 基于函数的索引查询时,必须保 证查询该列名表达式不为空。LOLOGGING | NOLOGGING:LOGGING 选项规定在创建索引时, 创建相应的日志记录, NOGGING选项则表示创建 索引时不产生重做日志信 息,默认为LOGGING。COMPUTE STATISTICS:COMPUTE STATISTICS选项表示在创建索引时 直接生成索引的统计信息,这样可 以避免以后对索引进行分析操作。COMPAESS | NOCOMPRESS:对 于复合索引,如果指定了 COMPRESS选项,则可以在创建 索引时对重复的索引值进行压缩, 以节省索引的存储空间,但对索 引进行压缩后将会影响索引的使 用效率,默认为NOCOMPRESS。SORT | NOSORT:默认情况下,Oracle在 创建索引时会对表中的记录进行排序,如 果表中的记录已经按照顺序排序,可以指 定NOSORT选项,这样可以省略创建索引 时对表进行的排序操作,加快索引的创建 速度。但若索引列或多列的行不按顺序保 存,Oracle就会返回错误,默认为SORT。REVERSE:指定以反序索引块的 字节,不包含行标识符。 NOSORT不能与该选项一起指定。查看表中的索引SELECT * FROM ALL_INDEXES WHERE TABLE_NAME='DADA';查询指定表的索引列是哪个select * from all_IND_COLUMNS where table_name = 'DADA';查询当前登录用户表索引select * from USER_INDEXES where table_name = 'DADA';查询当前用户创建的表的索引列select * from USER_IND_COLUMNS where table_name = 'DADA';B树索引为xiaoxiong的age列创建索引,指定索引段在daxiong的表空间create index age_index on xiaoxiong(age) tablespace daxiong;普通索引create index index_text_txt on dada(age);索引的使用age列上的索引来查询age=1的信息
SELECT * FROM dada WHERE age=1;age上的索引来对年纪按照age进行排序
SELECT * FROM dada ORDER BY age;age上的索引来查询age大于22的信息	
SELECT * FROM dada WHERE age>22;唯一索引create unique index <index_name> on <table_name>(<coiumn_name>);位图索引create bitmap index <index_name> on <table_name>(<column_name>);组合索引create index <index_name> on <table_name>(<column_name1><column_name2>);基于函数索引create index <index_name> on <table_name>(column_name) reverse;
create index <index_name> on <table_name>(upper(column_name));反向键索引create index <index_name> on <table_name>(column_name) reverse;重置索引alter index age_index rebuild;删除索引drop index age_index;将索引移动到指定的表空间alter index index_name rebuild tablespace tablespace_name;手动为索引分配空间alter index age_index allocate extent(size 256k);回收索引未使用的存储空间alter index age_index deallocate unused;
分区
范围分区create table members (
id number,
name varchar2(32),
create_time date)
partition by range(create_time)
(partition p1 values less than (to_date('2023-02-01', 'yyyy-mm-dd')),partition p2 values less than (to_date('2023-03-01', 'yyyy-mm-dd')),partition pmax values less than (maxvalue)
);上面的例子中定义了3个分区:所有create_time小于'2023-02-01'的数据(不包含)被分配在分区p1中。
所有create_time小于'2023-03-01'的数据(不包含)被分配在p2中。
所有create_time大于等于'2023-03-01'的数据被分配在pmax中,如果没有这个分区,那么插入大于等于'2023-03-01'的数据时,会因为没有合适的存储分区而报错。查看指定分区select * from worker_202301 partition (WORKER20230129);添加分区ALTER TABLE worker_202301 
ADD PARTITION WORKER20230131 
VALUES LESS THAN 
(TO_DATE(' 2023-02-01 00:00:00', 
'SYYYY-MM-DD HH24:MI:SS', 
'NLS_CALENDAR=GREGORIAN'));删除分区ALTER TABLE worker_202301(表名) DROP PARTITION WORKER20230131(分区名);列表分区列表分区适用于一个字段只有固定的几个值创建列表create table WORKER_202302
(id        VARCHAR2(100) not null,name      VARCHAR2(200),technology      VARCHAR2(100),save_date DATE
)
partition by list (technology)
(partition technology_java values ('java'),partition technology_python values ('python'),partition technology_c values ('c')
);create index IDX_WORKER_ID202301 on WORKER_202301 (ID)local;
create index IDX_WORKER_ID_NAME202301 on WORKER_202301 (ID, NAME)local;插入数据insert into worker_202302 (id,name,technology,save_date) values ('1','哪吒','java',to_date('2023/2/1 22:45:19','yyyy-MM-dd hh24:mi:ss'));
insert into worker_202302 (id,name,technology,save_date) values ('2','云韵','java',to_date('2023/2/1 22:46:19','yyyy-MM-dd hh24:mi:ss'));
insert into worker_202302 (id,name,technology,save_date) values ('3','美杜莎','python',to_date('2023/2/2 00:45:19','yyyy-MM-dd hh24:mi:ss'));查询分区数据SELECT * FROM worker_202302 PARTITION (technology_python);
exp命令
导出scott用户的dept表和emp表exp scott/tiger FILE=/home/oracle/scott1.exp TABLES=(dept,emp)导出xiaoxiong用户的所有数据exp xiaoxiong/123456 file=/home/oracle/test.exp full=y导出scott用户的dept表,但不导出表中的数据和索引exp scott/tiger FILE=/home/oracle/soctt2.exp TABLES=DEPT ROWS=N INDEXES=N导出分区emp表上的两个分区m和n:exp scott/tiger FILE=/home/oracle/scott3.exp TABLES=(emp:m,emp:n)用户user1导出其他用户的表:需要EXP_FULL_DATABASE系统权限exp user1/1234 FILE=/home/oracle/scott4.exp TABLES= scott.dept
expdp 命令
创建逻辑目录(目录必须存在)
create directory dpdata as '/home/oracle/dump';按用户导出
expdp system/123456@orcl schemas=scott dumpfile=expdp.dmp DIRECTORY=dpdata;导出整个数据库
expdp system/123456 DIRECTORY=dpdata DUMPFILE=full.dmp FULL=y;按表名导出
expdp system/123456@orcl TABLES=emp,dept dumpfile=expdp.dmp DIRECTORY=dpdata;按查询条件导出
expdp system/123456@orcl directory=dpdata dumpfile=expdp.dmp Tables=emp query='WHERE deptno=20';
imp命令
system是登陆用户,123456是用户密码,orcl是数据库名称,file是存放要导入文件的目录imp system/123456@127.0.0.1:1521/orcl file=/home/oracle/imp_test.dmp full=y
impdp 命令
导入到指定用户impdp scott/tiger DIRECTORY=dpdata DUMPFILE=expdp.dmp SCHEMAS=scott;导入表空间impdp system/123456 DIRECTORY=dpdata DUMPFILE=tablespace.dmp TABLESPACES=example;导入数据库impdp system/123456 DIRECTORY=dpdata DUMPFILE=full.dmp FULL=y;
RMAN备份和恢复
RMAN备份
非一致性备份整个数据库(打开状态下全库备份)数据库需处于归档模式
全量备份
RMAN> backup database format '/home/oracle/dump/full_%d_%s_%T_%p.bak';对于非一致性备份,必须在备份完毕后,手工对当前的redo-log进行归归档。 因为在使用备份恢复数据库时,需要使用当前重做日志中的重做记录。
RMAN> sql 'alter system archive log current';查看建立的备份集与备份片段的信息
RMAN> list backup of database;表空间备份RMAN> backup tablespace daxiong format '/home/oracle/dump/full_%d_%s_%T_%p.bak';查看建立的表空间备份信息RMAN> list backup of tablespace daxiong;查看某个表对应的序号及表空间select file_name, file_id, tablespace_name from dba_data_files where file_id in (select distinct file_id from dba_extents where segment_name='DA');查询表空间对应的数据文件及其序号select file_name, file_id, tablespace_name from dba_data_files;备份对应的表RMAN> backup datafile 4 format '/home/oracle/dump/full_%d_%s_%T_%p.bak';查看建立的表备份信息RMAN> list backup of datafile 4;备份控制文件自动备份:开启该参数后,当在RMAN中执行backup或copy命令时,RMAN都会对控制文件进行一次自动备份。可以通过format命令指定其存储路径RMAN> CONFIGURE CONTROLFILE AUTOBACKUP ON;
RMAN> CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/home/oracle/dump/full_%d_%s_%T_%p.bak';单独手动备份RMAN> backup current controlfile format '/home/oracle/dump/full_%d_%s_%T_%p.bak';在执行其他备份的同时,备份控制文件RMAN> backup tablespace tb1 include current controlfile;备份归档重做日志单独备份重做日志RMAN> backup archivelog all format '/home/oracle/dump/full_%d_%s_%T_%p.bak';执行其他备份的同时,备份归档日志RMAN> backup database current controlfile **plus archivelog** format '/home/oracle/dump/full_%d_%s_%T_%p.bak'一致性状态下的全库备份(脱机全库备份)RMAN> shutdown immediate
RMAN> startup mount
RMAN> backup database format '/home/oracle/dump/full_%d_%s_%T_%p.bak';
RMAN> alter database open;
RMAN恢复
完全恢复和不完全恢复;restore和recover:restore 是还原,文件级的恢复。就是物理文件还原。recover 是恢复,数据级的恢复。逻辑上恢复,比如应用归档日志、重做日志,全部同步,保持一致。常用命令:restore 命令:用于还原已经备份的数据文件。
(1)restore database 还原所有的数据文件。
(2)restore tablespace 还原特定表空间的数据文件。
(3)restore datafile 还原特定的数据文件。
(4)restore controlfile 还原控制文件。
(5)restore archivelog 还原归档日志文件。recover 命令:当数据库需要应用归档日志文件恢复数据文件时,使用recover命令。使用该命令数据库系统会自动应用归档的日志文件。
(1)recover database 恢复所有的数据文件。
(2)recover tablespace 恢复特定表空间的数据文件。
(3)recover datafile 恢复特定的数据文件。归档模式下的完全恢复模拟介质故障,通过系统删除daxiong表空间的物理文件;mv daxiong.dbf daxiong.dbf.bak恢复daxiong表空间RMAN> restore tablespace daxiong;
RMAN> recover tablespace daxiong;完全恢复启动数据库到加载状态RMAN> shutdown immediate;
RMAN> startup mount;执行恢复
RMAN> restore database;
RMAN> recover database; 

更多推荐

oracle超详细语法和备份工具

本文发布于:2024-03-07 17:34:36,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1718452.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:语法   备份工具   详细   oracle

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!