--1、启动
# su - oracle --切换到oracle用户且切换到它的环境
$ lsnrctl status --查看监听及数据库状态
$ lsnrctl start --启动监听
$ sqlplus / as sysdba --以DBA身份进入sqlplus
SQL>startup --启动db
--2、停止
# su - oracle --切换到oracle用户且切换到它的环境
$ lsnrctl stop --停止监听
$ sqlplus / as sysdba --以DBA身份进入sqlplus
SQL>shutdown immediate --关闭db
--3、查看初始化参数及修改
# su - oracle --切换到oracle用户且切换到它的环境
$ sqlplus / as sysdba --以DBA身份进入sqlplus
SQL>show parameter session; --查看所接受的session数量
###############################################################################################
SQL> show parameter session
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
java_max_sessionspace_size integer 0
java_soft_sessionspace_limit integer 0
license_max_sessions integer 0
license_sessions_warning integer 0
logmnr_max_persistent_sessions integer 1
session_cached_cursors integer 0
session_max_open_files integer 10
sessions integer 225
shared_server_sessions integer
SQL> show parameters processes;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
aq_tm_processes integer 0
db_writer_processes integer 1
gcs_server_processes integer 0
job_queue_processes integer 3
log_archive_max_processes integer 2
processes integer 200
SQL> alter system set processes=600 scope=both;
SQL>
SQL> alter system set processes=600 scope=both;
alter system set processes=600 scope=both
ORA-02095: specified initialization parameter cannot be modified
SQL> alter system set sessions=600 scope=both;
alter system set sessions=600 scope=both
ORA-02095: specified initialization parameter cannot be modified
SQL>
SQL> alter system set processes=600 scope=spfile;
System altered
SQL> show parameters processes;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
aq_tm_processes integer 0
db_writer_processes integer 1
gcs_server_processes integer 0
job_queue_processes integer 3
log_archive_max_processes integer 2
processes integer 200
SQL> alter system set processes=600 scope=memory;
alter system set processes=600 scope=memory
ORA-02095: specified initialization parameter cannot be modified
--重启数据库之后生效:
SQL> show parameters processes;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
aq_tm_processes integer 0
db_writer_processes integer 1
gcs_server_processes integer 0
job_queue_processes integer 3
log_archive_max_processes integer 2
processes integer 600
SQL> show parameter session
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
java_max_sessionspace_size integer 0
java_soft_sessionspace_limit integer 0
license_max_sessions integer 0
license_sessions_warning integer 0
logmnr_max_persistent_sessions integer 1
session_cached_cursors integer 0
session_max_open_files integer 10
sessions integer 665
shared_server_sessions integer
--4、修改Oracle process 和 session 的方法
--备份spfile
/*通过SQLPlus修改
Oracle的sessions和processes的关系是 sessions=1.1*processes + 5
使用sys,以sysdba权限登录*/
SQL> show parameter processes;
NAME TYPE VALUE
------------------------------------ ----------- ---------------------------------------
aq_tm_processes integer 1
db_writer_processes integer 1
job_queue_processes integer 10
log_archive_max_processes integer 1
processes integer 150
SQL> alter system set processes=400 scope = spfile;
--系统已更改。
SQL> show parameter processes;
NAME TYPE VALUE
------------------------------------ ----------- -----------------------------------------
aq_tm_processes integer 1
db_writer_processes integer 1
job_queue_processes integer 10
log_archive_max_processes integer 1
processes integer 150
SQL> create pfile from spfile;
--文件已创建。
--重启数据库,OK!
--注:sessions是个派生值,由processes的值决定,公式sessions=1.1*process + 5 --一个process可以有0个,1个或多个session,下面重点说明
--Oracle中系统process与session的关系
/*
在实际的应用中,
shared server中的process与oracle数据库中的session并不是一一对应的,
shared server中的process(一个)对应着oracle中的一个或者一个以上的session。
*/
/*
在dedicated server机器上的测试如下:
数据库的session和操作系统process是对应的。
这表示一个session对应一个process,但是一个process未必对应一个session。
大家可以通过指令查看
select spid from v$process where not exists ( select 1 from v$session where paddr = addr);
或下述方法。
*/
sql> select count(*) from v$process;
count(*)
----------
53
sql> select count(*) from v$session;
count(*)
----------
50
/*
oracle10g中只要指定processes,sessions就会自动计算出,
所以不需要指定sessions也可,除非对sessions有特殊要求,
要求其比oracle自动计算出的sessions要大,那么就需要手动指定sessions了
*/
SQL>alter system set shared_servers=10; 将shared_servers的数量设置为10
--5、数据库连接数目
/*
其中一个数据库连接需要一个session,它的值由processes决定,session与processes通常有以下关系:
session = 1.1 * processes + 5
不过这也不是绝对的,还要受到CPU和内存等硬件条件的限制。
另外processes和session不可以通过alter system语句直接修改,
只可以修改服务器参数文件来更改(Server Parameter File)。
如果存在一个server parameter file,
通过alter system语句所作的更改将会被持久化到文件中。
*/
--首先以Oracle用户登录# su - oracle
--启动数据库
$ /oracle/oracle/app/product/101/bin/dbstart:
--关闭数据库
$ /oracle/oracle/app/product/101/bin/dbshut:
--数据库配置助理,进行数据库安装、删除和修改
$ /oracle/oracle/app/product/101/bin/dbca:
--数据库网络服务配置管理
$ /oracle/oracle/app/product/101/bin/netca:
--数据库网络服务和监听配置助理
$ /oracle/oracle/app/product/101/bin/netmgr:
--可运行SQL,进行数据库操作,并可起停数据库
$ /oracle/oracle/app/product/101/bin/sqlplus:
/*
运行sqlplus命令,输入sys用户和口令登陆以后,运行如下命名:
--立即关闭数据库
SQL〉shutdown immediate
--启动数据库
SQL〉startup
*/
--启动数据库监听
$ /oracle/oracle/app/product/101/bin/lsnrctl start:
--关闭数据库监听
$ /oracle/oracle/app/product/101/bin/lsnrctl stop:
--察看数据库监听运行状态
$ /oracle/oracle/app/product/101/bin/lsnrctl status:
--Oracle数据库命令速查
--1、日志管理
--1.1.强制日志切换(forcing log switches)
sql> alter system switch logfile;
--1.2.强制执行检查点(forcing checkpoints)
sql> alter system checkpoint;
--1.3.增加一个重做日志组(adding online redo log groups)
sql> alter database add logfile [group 4]sql> ('/disk3/log4a.rdo','/disk4/log4b.rdo') size 1m;
--1.4.增加一个重做日志文件(adding online redo log members)
sql> alter database add logfile member
sql> '/disk3/log1b.rdo' to group 1,
sql> '/disk4/log2b.rdo' to group 2;
--1.5.改变重做日志文件名(changes the name of the online redo logfile)
sql> alter database rename file 'c:/oracle/oradata/oradb/redo01.log'
sql> to 'c:/oracle/oradata/redo01.log';
--1.6.删除重做日志组(drop online redo log groups)
sql> alter database drop logfile group 3;
--1.7.删除重做日志文件(drop online redo log members)
sql> alter database drop logfile member 'c:/oracle/oradata/redo01.log';
--1.8.清空重做日志文件(clearing online redo log files)
sql> alter database clear [unarchived] logfile 'c:/oracle/log2a.rdo';
--1.9.使用logminer分析重做日志文件(using logminer analyzing redo logfiles)
/*
a. in the init.ora specify utl_file_dir = ' '
b. sql> execute dbms_logmnr_d.build('oradb.ora','c:\oracle\oradb\log');
c. sql> execute dbms_logmnr_add_logfile('c:\oracle\oradata\oradb\redo01.log',
sql> dbms_logmnr.new);
d. sql> execute dbms_logmnr.add_logfile('c:\oracle\oradata\oradb\redo02.log',
sql> dbms_logmnr.addfile);
e. sql> execute dbms_logmnr.start_logmnr(dictfilename=>'c:\oracle\oradb\log\oradb.ora');
f. sql> select * from v$logmnr_contents(v$logmnr_dictionary,v$logmnr_parameters
sql> v$logmnr_logs);
g. sql> execute dbms_logmnr.end_logmnr;
*/
--2、表空间管理
--2.1.创造表空间(create tablespaces)
sql> create tablespace ts_name datafile 'c:\oracle\oradata\file1.dbf' size 100m ,
sql>'c:\oracle\oradata\file2.dbf' size 100m minimum extent 550k [logging/nologging]sql> default storage (initial 500k next 500k maxextents 500 pctinccease 0)
sql> [online/offline] [permanent/temporary] [extent_management_clause]
--2.2.创建本地管理的表空间(locally managed tablespace)
sql> create tablespace user_data datafile 'c:\oracle\oradata\user_data01.dbf'
sql> size 500m extent management local uniform size 10m;
--2.3.创建临时表空间(temporary tablespace)
sql> create temporary tablespace temp tempfile 'c:\oracle\oradata\temp01.dbf'
sql> size 500m extent management local uniform size 10m;
--2.4.改变表空间的存储参数(change the storage setting)
sql> alter tablespace app_data minimum extent 2m;
sql> alter tablespace app_data default storage(initial 2m next 2m maxextents 999);
--2.5.使表空间离线或连线(taking tablespace offline or online)
sql> alter tablespace app_data offline;
sql> alter tablespace app_data online;
--2.6.设置表空间为只读/可写模式(read_only tablespace)
sql> alter tablespace app_data read only|write;
--2.7.删除表空间(droping tablespace)
sql> drop tablespace app_data including contents;
--2.8.允许数据文件自动扩展(enableing automatic extension of data files)
sql> alter tablespace app_data add datafile 'c:\oracle\oradata\app_data01.dbf' size 200m
sql> autoextend on next 10m maxsize 500m;
--2.9.手工改变数据文件的大小(change the size fo data files manually)
sql> alter database datafile 'c:\oracle\oradata\app_data.dbf' resize 200m;
--2.10.改名表空间中的数据文件(Moving data files: alter tablespace)
sql> alter tablespace app_data rename datafile 'c:\oracle\oradata\app_data.dbf
sql> to 'c:\oracle\app_data.dbf';
--2.11.改变数据库中的数据文件(moving data files:alter database)
sql> alter database rename file 'c:\oracle\oradata\app_data.dbf' to 'c:\oracle\app_data.dbf';
--3、表
--3.1.创建表(create a table)
sql> create table table_name (column datatype,column datatype]....)
sql> tablespace tablespace_name [pctfree integer] [pctused integer]
sql> [initrans integer] [maxtrans integer]sql> storage(initial 200k next 200k pctincrease 0 maxextents 50)
sql> [logging|nologging] [cache|nocache]
--3.2.复制一个已存在的表(copy an existing table)
sql> create table table_name [logging|nologging] as subquery
--3.3.创建一个临时表(create temporary table)
sql> create global temporary table xay_temp as select * from xay;
on commit preserve rows/on commit delete rows
--3.4.pctfree和pctused参数计算公式
pctfree = (average row size - initial row size) *100 /average row size
pctused = 100-pctfree- (average row size*100/available data space)
/*
这是标准的计算公式。
pctfree:指定表内每个数据块中空间的百分比。 pctfree 的值必须介于 0 和 99 之间。如果值为零,表示可以通过插入新行来填充整个块。缺省值为 10。此值表示每个块中保留着 10% 的空间,用于更新现有的行以及插入新行,每个块最多可填充到 90%。
pctused:指定为表内每个数据块维护的已用空间的最小百分比。如果一个块的已用空间低于 pctused,则可在该块中插入行。pctused 的值为介于 0 和 99 之间的整数,缺省值为 40。
结合 pctfree 和 pctused 就可以确定将新行插入到现有数据块中,还是插入到新块中。这两个参数值的和必须小于或等于 100。使用这两个参数可以更有效地利用表内的空间
*/
--设置 pctfree 和 pctused
/*
设置 pctfree
pctfree 值越高,可为数据库块内的更新提供的空间就越大。如果表存在下面两种情况,则应设置一个更高的值:
? 某些列最初为 null,后来更新为某个值
? 某些列由于更新,大小可能增加
pctfree 的值越高,块密度就越低,即每个块容纳的行数就越少。
上面的公式确保块中有足够的空闲空间供行增长使用。
设置 pctused
设置 pctused 以确保只有在具备足够空间来容纳一个平均大小的行时才将块返回到空闲列表中。如果空闲列表中的某个块没有足够的空间来插入一行,oracle 服务器将查找空闲列表中的下一个块。直到找到具备足够空间的块或者到达列表的末尾,这种线性扫描才会结束。使用给定的公式可以增加找到具有所需空闲空间的块的概率,从而缩短扫描空闲列表的时间。
注:可以使用 analyze table 命令估算平均行大小的值。
注:oracle9i “自动段空间管理” 功能可替代 pctused、freelists 和 freelist groups。
*/
--3.5.改变存储和块利用率参数(change storage and block utilization parameter)
sql> alter table table_name pctfree=30 pctused=50 storage(next 500k minextents 2 maxextents 100);
--3.6.手工分配区间(extents)(manually allocating extents)
sql> alter table table_name allocate extent(size 500k datafile 'c:/oracle/data.dbf');
--3.7.改变表的所属表空间(move tablespace)
sql> alter table employee move tablespace users;
--3.8.释放表中未用空间(deallocate of unused space)
sql> alter table table_name deallocate unused [keep integer]
--3.9.截断表(truncate)(truncate a table)
sql> truncate table table_name;
/*
截断一个表将删除表中所有行,从而释放已使用的空间。
对应的索引将被截断。
(注:truncate table不是DML语句,是DDL语句
另外,truncate 与delete的区别是,delelte不释放空间,truncate释放空间。)
*/
--3.10.删除表(drop a table)
sql> drop table table_name [cascade constraints];
--3.11.删除列(drop a column)
sql> alter table table_name drop column comments cascade constraints checkpoint 1000;
alter table table_name drop columns continue;
--3.12.标识某一列为未使用(unused)(mark a column as unused)
sql> alter table table_name set unused column comments cascade constraints;
alter table table_name drop unused columns checkpoint 1000;
alter table orders drop columns continue checkpoint 1000
data_dictionary : dba_unused_col_tabs
/*
除将列从表中删除以外,还可以先将列标记为 “未使用”,以后再删除。因为没有删除数据,所以此操作不回收磁盘空间,因而具有速度比较快的优点。被标为 “未使用” 的列可在以后系统活动较少时从表中删除。
未使用的列就像不属于表一样。查询时看不到未使用列中的数据。此外,在执行 DESCRIBE 命令时,也不会显示这些列的名称和数据类型。用户可以添加与未使用的列同名的新列。
如果想删除同一表中的两列,则可先将列设置为 “未使用” 然后再删除。在删除两列时,表中的所有行都会更新两次;但如果将这些列设置为 “未使用” 然后再删除,则所有的行仅更新一次。
*/
--4、索引
--4.1.创建一个基于函数的索引(creating function-based indexes)
sql> create index summit.item_quantity on summit.item(quantity-quantity_shipped);
/*
基于函数的索引(Function-based indexes):
如果在表中要建立索引的一列或多列上使用了函数或表达式,则创建的是基于函数的索引。基于函数的索引预先计算函数或表达式的值,并将结果存储在索引中。可以将基于函数的索引创建为 B 树或位图索引。
*/
--4.2.创建一个B树索引(create a B-tree index)
sql> create [unique] index index_name on table_name(column,.. asc/desc) tablespace
sql> tablespace_name [pctfree integer] [initrans integer] [maxtrans integer]
sql> [logging | nologging] [nosort] storage(initial 200k next 200k pctincrease 0 maxextents 50);
--B树:平衡二叉树,oracle中用的最多的索引模式,适用于取值唯一性高的情况。只有两层,非叶级、叶级(指针所在级)
--4.3.索引中pctfree参数计算公式
pctfree(index)=(maximum number of rows-initial number of rows)*100/maximum number of rows
--4.4.创建一个反向键索引(creating reverse key indexes)
sql> create unique index xay_id on xay(a) reverse pctfree 30 storage(initial 200k next 200k pctincrease 0 maxextents 50) tablespace indx;
--4.5.创建位图索引(create bitmap index)
sql> create bitmap index xay_id on xay(a) pctfree 30 storage( initial 200k next 200k pctincrease 0 maxextents 50) tablespace indx;
/*
在下列情况中,位图索引比 B 树索引更有利:
当表包含数百万行且键列的基数很低(即,该列中重复的值很多)时。例如,对于包含护照记录的表的性别列和婚姻状况列而言,位图索引比 B 树索引更适合
当查询经常使用涉及 OR 运算符的多个 WHERE 条件组合时
当键列上存在只读或很少的更新操作时
(位图索引适用于取值的唯一性很低的情况)
*/
--4.6.改变索引的存储参数(change storage parameter of index)
sql> alter index xay_id storage (next 400k maxextents 100);
--4.7.为索引分配空间(allocating index space)
sql> alter index xay_id allocate extent(size 200k datafile 'c:/oracle/index.dbf');8.alter index xay_id deallocate unused;
/*
手动分配索引空间:
在表上进行频繁的插入操作前,可能需要向索引添加区。添加区可防止索引动态扩展并导致性能降低。
(其中指定的数据文件一定是索引所在表空间的数据文件)
*/
--5、约束(constraints)
--5.1.将约束定义为立即(immediate)或延迟(deferred)(define constraints as immediate or deferred)
sql> alter session set constraint[s] = immediate/deferred/default;
set constraint[s] constraint_name/all immediate/deferred;
/*
set constraints 语句用于将特定事务处理的约束设置为 deferred 或 immediate。可以使用此语句设置约束名称列表或约束的模式。set constraints 模式将一直持续到事务处理完成或者另一个 set constraints 语句重置模式。set constraints 语句不允许在触发器内部使用。
alter session 语句还包含将约束设置为 immediate 或 deferred 的子句 set constraints。此命令缺省为设置所有 (all) 可延迟的约束(不能指定约束名称列表)。alter session set constraints 语句仅适用于当前的会话。
*/
--5.2.删除表或表空间时连带删除其上的外键(约束)
sql> drop table table_name cascade constraints
sql> drop tablespace tablespace_name including contents cascade constraints
--在删除父表之前,必须先删除外键。可以使用以下一条语句同时执行这两个操作:
drop table table cascade constraints
--在未删除或禁用外键之前无法截断(truncated)父表。
--在删除包含父表的表空间之前,必须先删除外键。可使用下列命令完成该操作:
drop tablespace tablespace including contents
cascade constraints
/*
如果从父表中删除行时没有使用 DELETE CASCADE 选项,Oracle 服务器必须确保子表中的行不包含相应的外键。同样,仅当子行中不包含旧键值时,才允许更新父键。如果子表的外键上没有索引,则 Oracle 服务器锁定子表并禁止更改以确保引用完整性。如果表上有索引,则可通过锁定索引项并避免子表上有更具限制性的锁来维护引用完整性。如果必须从不同的事务处理同时更新两个表,则在外键列上创建索引。
*/
--5.3.在创建表时定义约束(define constraints while create a table)
sql> create table xay(id number(7) constraint xay_id primary key deferrable
sql> using index storage(initial 100k next 100k) tablespace indx);
primary key/unique/references table(column)/check
--5.4.启用当前禁用的约束(enable constraints)
sql> alter table xay enable novalidate constraint xay_id;
--启用 novalidate:
/*
对于当前已有索引的 primary key 和 unique 约束,启用 novalidate 约束比启用 validate 约束要快得多,这是因为,如果约束是可延迟的,则不检查现有数据是否违反约束。如果使用该选项启用约束,则不要求锁定表。这种方法适合表上有许多 dml 活动的情况,如在 oltp 环境中。
但是,如果需要创建索引,使用这种启用约束的方法并不能比 enable validate 带来更多的好处,因为 oracle 服务器在建立索引时锁定表。
*/
--5.5.启用约束(enable constraints)
sql> alter table xay enable validate constraint xay_id;
--6、加载(load)数据
--6.1.使用insert语句从另一张表中“直接加载”数据到新表(loading data using direct_load insert)
sql> insert /*+append */ into emp nologging
sql> select * from emp_old;
--6.2.使用insert方式的“并行直接加载”数据(parallel direct-load insert)
sql> alter session enable parallel dml;
sql> insert /*+parallel(emp,2) */ into emp nologging
sql> select * from emp_old;
--6.3.使用sql*loader加载数据(using sql*loader)
sql> sqlldr scott/tiger \
sql> control = ulcase6.ctl \
sql> log = ulcase6.log direct=true
--7.重整数据(reorganizing data)
--7.1.使用export倒出数据(using export)
$ exp scott/tiger tables(dept,emp) file=c:\emp.dmp log=exp.log compress=n direct=y
--7.2.使用import倒入数据(using import)
$ imp scott/tiger tables(dept,emp) file=emp.dmp log=imp.log ignore=y
--7.3.以移动表空间(transporting)方式导入导出一个表(transporting a tablespace)
sql>alter tablespace sales_ts read only;
$ exp sys/.. file=xay.dmp transport_tablespace=y tablespace=sales_ts
triggers=n constraints=n
$ copy datafile
$ imp sys/.. file=xay.dmp transport_tablespace=y datafiles=(/disk1/sles01.dbf,/disk2
/sles02.dbf)
sql> alter tablespace sales_ts read write;
--7.4.checking transport set
sql> DBMS_tts.transport_set_check(ts_list =>'sales_ts' ..,incl_constraints=>true);
--在表transport_set_violations 中查看
sql> dbms_tts.isselfcontained 为true 是,表示自包含
--8.管理口令及相关资源(managing password security and resources)
--8.1.修改用户帐号加/解锁及口令(controlling account lock and password)
sql> alter user juncky identified by oracle account unlock;
--8.2.user_provided password function
sql> function_name(userid in varchar2(30),password in varchar2(30),
old_password in varchar2(30)) return boolean
--8.3.创建概要文件:设置口令参数(create a profile : password setting)
sql> create profile grace_5 limit failed_login_attempts 3
sql> password_lock_time unlimited password_life_time 30
sql>password_reuse_time 30 password_verify_function verify_function
sql> password_grace_time 5;
--8.4.修改概要文件(altering a profile)
sql> alter profile default limit
sql> failed_login_attempts 3
sql> password_life_time 60;
--8.5.删除概要文件(drop a profile)
sql> drop profile grace_5 [cascade];
--8.6.创建概要文件:设置资源限额(create a profile : resource limit)
sql> create profile developer_prof limit sessions_per_user 2
sql> cpu_per_session 10000 idle_time 60 connect_time 4--80;
--8.7.view => resource_cost : alter resource cost
dba_Users,dba_profiles
--8.8.允许资源限额(enable resource limits)
sql> alter system set resource_limit=true;
--9.管理用户(Managing users)
--9.1.创建用户(数据库认证方式)(create a user: database authentication)
sql> create user juncky identified by oracle default tablespace users temporary tablespace temp quota 10m/unlimited on data password expire [account lock|unlock] [profile profilename|default];
--9.2.修改用户的表空间限额(change user quota on tablespace)
sql> alter user juncky quota 0 on users;
--9.3.删除用户(drop a user)
sql> drop user juncky [cascade];
--9.4.监控用户的视图(monitor user)
view: dba_users , dba_ts_quotas
----10.管理权限(managing privileges)
--10.1.系统权限视图(system privileges:)
view => system_privilege_map ,dba_sys_privs,session_privs
--10.2.授权系统权限(grant system privilege)
sql> grant create session,create table to managers;
sql> grant create session to scott with admin option;
with admin option can grant or revoke privilege from any user or role;
--10.3.sysdba和sysoper的权限(sysdba and sysoper privileges:)
sysoper: startup,shutdown,alter database open|mount,alter database backup controlfile,alter tablespace begin/end backup,recover database,alter database archivelog,restricted session
sysdba:sysoper privileges with admin option,create database,recover database until
--10.4.口令文件成员视图(password file members:)
view:=> v$pwfile_users
--10.5.o7_dictionary_accessibility =true
restriction access to view or tables in other schema
--10.6.撤销系统权限(revoke system privilege)
sql> revoke create table from karen;
sql> revoke create session from scott;
--10.7.授权对象权限(grant object privilege)
sql> grant execute on dbms_pipe to public;
sql> grant update(first_name,salary) on employee to karen with grant option;
--10.8.显示对象权限的视图(display object privilege ):
view => dba_tab_privs, dba_col_privs
--10.9.撤销用户的对象权限(revoke object privilege)
sql> revoke execute on dbms_pipe from scott [cascade constraints];
--10.10.审计记录视图(audit record view) :
=> sys. aud$
--10.11.保护审计线索(protecting the audit trail)
sql> audit delete on sys.aud$ by access;
/*
保护审计线索:
应保护审计线索,以防添加、修改或删除审计信息。发出以下命令:
sql> audit delete on sys.aud$ by access;
可防止审计线索未经授权即被删除;只有 dba 才拥有 delete_catalog_role 角色。
*/
--10.12.语句审计(statement auditing)
sql> audit user;
--语句审计:该种审计对 sql 语句进行选择性审计,而并不审计语句针对的特定方案对象。例如,audit table 跟踪多个 ddl 语句,而与这些语句针对的表无关。可以设置语句审计,以便对数据库中的所选用户或每个用户进行审计。
--10.13.权限审计(privilege auditing)
sql> audit select any table by summit by access;
/*
权限审计:
该种审计对执行操作应具有的相应系统权限进行选择性审计,如 audit create any trigger。可以设置权限审计对数据库中的所选用户或每个用户进行审计。
*/
--10.14.方案对象审计(schema object auditing)
sql> audit lock on summit.employee by access whenever successful;
/*方案对象审计:
该种审计对特定方案对象上的特定语句进行选择性审计,如 audit select on hr.employees。方案对象审计始终适用于所有数据库用户。*/
--11.审计选项视图(view audit option) :
view=> all_def_audit_opts,dba_stmt_audit_opts,dba_priv_audit_opts,dba_obj_audit_opts
--12.审计结果视图(view audit result):
view=> dba_audit_trail,dba_audit_exists,dba_audit_object,dba_audit_session,dba_audit_statement
--13.管理角色(manager role)
--13.1.创建角色(create roles)
sql> create role sales_clerk;
sql> create role hr_clerk identified by bonus;
sql> create role hr_manager identified externally;
--13.2.修改角色(modify role)
sql> alter role sales_clerk identified by commission;
sql> alter role hr_clerk identified externally;
sql>alter role hr_manager not identified;
--13.3.分配角色给用户(assigning roles)
sql> grant sales_clerk to scott;
sql> grant hr_clerk to hr_manager;
sql> grant hr_manager to scott with admin option;
--13.4.建立缺省角色(establish default role)
sql> alter user scott default role hr_clerk,sales_clerk;
sql> alter user scott default role all;
sql> alter user scott default role all except hr_clerk;
sql> alter user scott default role none;
--13.5.允许和禁止角色(enable and disable roles)
sql> set role hr_clerk;
sql> set role sales_clerk identified by commission;
sql> set role all except sales_clerk;
sql> set role none;
--13.6.撤销用户的角色(remove role from user)
sql> revoke sales_clerk from scott;
sql> revoke hr_manager from public;
--13.7.删除角色(remove role)
sql> drop role hr_manager;
--13.8.显示角色信息的视图(display role information)
view: =>dba_roles,dba_role_privs,role_role_privs,dba_sys_privs,role_sys_privs,role_tab_privs,session_roles
--14.备份和恢复(BACKUP and RECOVERY)
--14.1.备份恢复用相关视图
v$sga,v$instance,v$process,v$bgprocess,v$database,v$datafile,v$sgastat
--14.2.为Rman设置初始化参数
Rman need set dbwr_IO_slaves or backup_tape_IO_slaves and large_pool_size
--14.3.监控并行回滚的视图(Monitoring Parallel Rollback)
> v$fast_start_servers , v$fast_start_transactions
--14.4.执行一个冷备份(perform a closed database backup (noarchivelog))
> shutdown immediate
> cp files /backup/
> startup
--14.5.改变数据文件的位置(restore to a different location)
> connect system/manager as sysdba
> startup mount
> alter database rename file '/disk1/../user.dbf' to '/disk2/../user.dbf';
> alter database open;
--14.6.恢复命令(recover)语法 (recover syntax)
--recover a mounted database
>recover database;
>recover datafile '/disk1/data/df2.dbf';
>alter database recover database;
--recover an opened database
>recover tablespace user_data;
>recover datafile 2;
>alter database recover datafile 2;
--14.7.设置自动应用重做日志文件(how to apply redo log files automatically)
>set autorecovery on
>recover automatic datafile 4;
--14.8.完全恢复(complete recovery:)
--method 1(mounted databae)
>copy c:\backup\user.dbf c:\oradata\user.dbf
>startup mount
>recover datafile 'c:\oradata\user.dbf;
>alter database open;
--method 2(opened database,initially opened,not system or rollback datafile)
>copy c:\backup\user.dbf c:\oradata\user.dbf (alter tablespace offline)
>recover datafile 'c:\oradata\user.dbf' or
>recover tablespace user_data;
>alter database datafile 'c:\oradata\user.dbf' online or
>alter tablespace user_data online;
--method 3(opened database,initially closed not system or rollback datafile)
>startup mount
>alter database datafile 'c:\oradata\user.dbf' offline;
>alter database open
>copy c:\backup\user.dbf d:\oradata\user.dbf
>alter database rename file 'c:\oradata\user.dbf' to 'd:\oradata\user.dbf'
>recover datafile 'e:\oradata\user.dbf' or recover tablespace user_data;
>alter tablespace user_data online;
--method 4(loss of data file with no backup and have all archive log)
>alter tablespace user_data offline immediate;
>alter database create datafile 'd:\oradata\user.dbf' as 'c:\oradata\user.dbf''
>recover tablespace user_data;
>alter tablespace user_data online
--14.9.对一个打开的数据库进行备份(perform an open database backup)
> alter tablespace user_data begin backup;
> copy files /backup/
> alter database datafile '/c:/../data.dbf' end backup;
> alter system switch logfile;
--14.10.备份一个控制文件(backup a control file)
> alter database backup controlfile to 'control1.bkp';
> alter database backup controlfile to trace;
--14.11.非归档模式下的恢复(recovery (noarchivelog mode))
> shutdown abort
> cp files
> startup
--14.12.备份模式下的文件恢复(recovery of file in backup mode)
>alter database datafile 2 end backup;
--14.13.清空重做日志文件(clearing redo log file)
>alter database clear unarchived logfile group 1;
>alter database clear unarchived logfile group 1 unrecoverable datafile;
--14.14.重做日志的恢复(删除与重建)(redo log recovery)
>alter database add logfile group 3 'c:\oradata\redo03.log' size 1000k;
>alter database drop logfile group 1;
>alter database open;
or >cp c:\oradata\redo02.log' c:\oradata\redo01.log
>alter database clear logfile 'c:\oradata\log01.log';
--oracle数据库手边命令
--1、得到数据库名和创建日期
select name, created, log_mode, open_mode from v$database;
--2、oracle数据库的计算机的主机名,oracle数据库的实例名及oracle数据库管理系统的版本信息
select host_name, instance_name, version fromv$instance;
--3、为了知道oracle数据库版本的一些特殊信息
select * from v$version;
--4、获取控制文件名字
select * from v$controlfile;
--5、得到oracle数据库的重做日志配置信息
select group#, members, bytes, status, archived from v$log;
select group#,member from v$logfile;
--6、获取oracle的每个重做日志(成员)文件所存放的具体位置
select * from v$logfile;
--7、知道oracle数据库的备份和恢复策略和归档文件的具体位置
archive log list
--8、知道oracle数据库中到底有多少表空间以及每个表空间的状态
select tablespace_name, block_size, status, contents, logging from dba_tablespaces;
select tablespace_name, status from dba_tablespaces;
--9、知道每个表空间存在哪个磁盘上以及文件的名字等信息
select file_id, file_name, tablespace_name, status, bytes from dba_data_files;
select file_name, tablespace_name from dba_data_files;
--10、知道oracle数据库系统上到底有多少用户和都是什么时候创建的
select username,created from dba_users;
select username, default_tablespace from dba_users;
--11、从控制文件中取出信息涉及到以下一些相关的命令
select * from v$archived
select * from v$archived_log
select * from v$backup
select * from v$database
select * from v$datafile
select * from v$log
select * from v$logfile
select * from v$loghist
select * from v$tablespace
select * from v$tempfile
--12、控制文件由两大部份组成:可重用的部份和不可重用的部分。
/*
可重用的部分的大小可用control_file_record_keep_time参数来控制,
该参数的默认值为7天,即可重用的部份的内容保留7天,一周之后这部份的内容可能被覆盖。
可重用的部份是供恢复管理器来使用的,这部份的内容可以自动扩展。
oracle数据库管理员可以使用creat database或creat controlfile语句中的下列关键字(参数)
来间接影响不可重用的部份的大小。
*/
maxdatafiles
maxinstances
maxlogfiles
maxloghistory
maxlogmembers
--13、查看控制文件的配置
select type, record_size, records_total, records_used from v$controlfile_record_section;
--14、如果您的显示被分成了两部分,您需要使用类似于set pagesize 100的sql*plus命令先格式化输出。
--有关的格式化输出命令有以下这些:
record_size: --为每个记录的字节数。
records_total:--为该段所分配的记录个数。
records_used:--为该段所使用的记录个数。
--15、知道控制文件中的所有数据文件(datafile),表空间(tablespace),和重做日志(redo log)所使用的记录情况
select type, record_size, records_total, records_used
from v$controlfile_record_section
where type in ( 'datafile', 'tablespace', 'redo log');
--16、获取控制文件名字
select value from v$parameter where name ='control_files';
--或者:
select * from v$controlfile
--17、如何在一个已经安装的oracle数据库中添加或移动控制文件呢?
/*
以下是在一个已经安装的oracle数据库中添加或移动控制文件的具体步骤:
a、利用数据字典v$controlfile来获取现有控制文件名字。
b、正常关闭oracle数据库。
c、将新的控制文件名添加到参数文件的control_files参数中。
d、使用操作系统的复制命令将现有控制文件复制到指定位置。
e、重新启动oracle数据库。
f、利用数据字典v$controlfile来验证新的控制文件名字是否正确。
g、如果有误重做上述操作,如果无误删除无用的旧控制文件。
注:如果您使用了服务器初始化参数文件(spfile),
您不能关闭oracle数据库而且应该在第3步使用alter system set control_files的oracle命令来改变控制文件的位置。
*/
sql> alter system set control_files =
'd:\disk3\control01.ctl',
'd:\disk6\control02.ctl',
'd:\disk9\control03.ctl' scope=spfile;
--18、控制文件
/*
由于控制文件是一个极其种要的文件,
除了以上所说的将控制文件的多个副本存在不同的硬盘上的保护措施外,
在数据库的结构变化之后,您应立即对控制文件进行备份。
可以用oracle命令来对控制文件进行备份。
*/
alter database backup controlfile to 'd:\backup\control.bak';
--19、您也可将备份到一个追踪文件中。
--该追踪文件包含有重建控制文件所需的sql语句。
alter database backup controlfile to trace;
--20、正常关闭oracle命令
shutdown immeditae
Oracle数据库命令集
--1、sqlplus启动方式:
--dos下运行sqlplus 用户名/密码 as sysdba
c:>sqlplus sys/password as sydba(系统帐户)
--或者:
c:>sqlplus scott/password
--2、用户连接(切换)操作:
sql>conn scott/password
--注:conn与connect使用方法一样
--3、手动解锁:
sql>alter user scott account unlock;(将scott帐户解锁)
--4、查看用户(两种方式):
sql>select user form dual;
sql>show user;
--5、sql帮助:
sql>help index;
--6、数据库卸载和加载
sql>shutdown [normal][immedlate][abort][transactional];
sql>startup;
--7、查询select操作:
sql>select *from dept;
sql>select dname,loc from dept;
sql>select *from emp where deptno=20;
--注:在sql中,字符串使用单引号。
--8、字段别名的定义:
sql>select hiredate as 雇用日期 from emp
as可以省略,但是推荐使用。
--9、字符串连接
sql>selcet dname||loc from dept;
--10、提取表中的前n个记录:
sql>select *from emp where rownum<=n;
--11、null的使用:
sql>select ename,job from emp where comm is[not] null;
注:null参与数学表达式计算时,结果一定为null。
--12、like关键字(字符串匹配):
sql>select dname from dept where dname like '_s%';
--注:_代表单个字符,%代表多个字符。
--13、in关键字:
sql>select dname,dpart,log from dept where deptno in(10,20);
--注:只选择输出deptno值为10或20的记录。类似于:where deptno=10 or deptno=20;
--14、between and关键字:
sql>select * from dept where deptno between 10 and 30;
--15、set关键字:
sql>set pagesize 10;
sql>set linesize 100;
--16、连接查询:
--求解sal大于平均值的记录
sql>select * from emp
where sal>(select avg(sal) from emp);
--17、联合查询:字段个数和类型必须保持一致,合并为一个查询结果。
sql>select empno,ename from emp
union[all]
select deptno,dname from dept;
--all:代表可以有重复记录。
--18、内连接查询。内连接查询分为2中:
--一是在form后直接加表名,中间用逗号分隔。
sql>select * from emp e,dept d (e d为表的别名)
where e.deptno=d.deptno;
--二是使用join关键字,条件使用on
sql>select * from emp join dept
on emp.deptno=dept.deptno;
--19、自连接查询:将一个表起不同的别名,使其在逻辑上成为两张表。
sql>select * from emp a,emp b
where a.mgr=b.empno;
--20、外连接查询:
/*
左外连接查询:left join 左表全部显示
右外连接查询:right join右表全部显示
全外连接查询:full join 左右表均全部显示
以左外连接为例:
*/
sql>select * from dept
left join emp
on dept.deptno=emp.deptno;
--左表(dept)信息全部显示,右表(emp)中不符合条件的记录为null。
--21、集合函数(数学表达式):
sql>select avg(sal) from emp;
sql>select count([distinct]sal) from emp;
--distinct表示不计算重复数据。
--22、插入记录:
sql>insert into tablename (字段列表) values(属性类表);
sql>insert into emp(eno,ename,dept) values(1,'java',20);
--23、修改(更新)记录:
sql>update emp set deptno=80
where deptno=81;
--24、删除记录:
sql>delete from tablename where 条件
sql>delete from emp where deptno=80;
--25、创建视图:注意权限,本操作是在sys帐户下进行的。
sql>create view view_name(ename,dname)
as
select emp.ename,dept.dname
from scott.emp,scott.dept
with read only;
sql>select * from view_name;
--26、同义词
create synonym 同义词名称 for 原对象
sql>create synonym empbak for scott.emp;
sql>select * from empbak;
--27、修改对象(表、视图等)结构alter:
sql>alter table 表名 add("book_id"varchar2(10));//添加字段,注意双引号
sql>alter table 表名 modify("book_id",not null);
--28、修改表的操作
sql>rename 原表名 to 新表名//修改表名
sql>select * from tab;//查找当前用户表信息
sql>desc 表名//查看表结构
sql>drop table 表名//删除表
sql>truncate table 表名//删除表中数据,保留表结构
--29、事务处理
sql>commit 成功提交事务
sql>rollback 返回到事务未开始的状态
sql>savepoint a 创建事务的保存点
sql>rollback to [savepoint] a 返回保存点
--30、exists关键字
sql>select * from dept where exists (select deptno from emp);
--31、从另外一个表中拷贝记录
sql>insert into emp(empno,job)
select dname from dept where deptno=50;
sql>insert into (select deptno,dname from dept)
values (50,'java');
--32、更新(2个表操作)表记录:
sql>update emp set ename=(select dname from dept where deptno=50 ),
job=(select loc from dept where deptno=50 )
where ename like 's%'
--33、删除(2个表操作)操作:
sql>delete from emp where empno=
(select deptno from dept where deptno=50)
--34、合并操作merge into:
sql>merge into 表名
using 表名
on(条件)
when matched then (匹配)
update set ....
when not matched then
insert into....
--34、any/some操作,代表满足any后面的任何一个条件即可:
sql>select * from emp
where sal<=any(2500,6000,10000);
--35、all操作,代表满足all后面的所有条件:
sql>select * from emp
where sal<=all(2500,6000,10000);
--37、list操作:列出缓冲区的内容,可简写l,后接整型数字或为空
sql>list(n)
--38、/操作:执行缓冲区sql命令或pl/sql块
--39、change操作:修改缓冲区里的信息,可简写c
sql>c/fron/from
将fron改写为from
--40、del操作:删除指定行缓冲区命令
sql>del 2 3 删除第2行、第3行的信息。
--41、在缓冲区中追加信息(追加到末尾)
sql>append where select;
--42、save命令,保存缓冲区内容到指定的文件中:
sql>save c:\select.sql;
--43、get命名(与save对应)
sql>get c:\select.sql;
--44、@命令(与get相似,get是加载语句,然后执行,而@是加载和执行同时进行)
sql>@ c:\select.sql;
--45、edit命令,载入windows操作系统的可编辑窗口,简写ed:
sql>edit