alter system switch logfile;执行一次,就只切换一个日志租,比如当前是group1,那么执行一次,就切换到group2
alter system archive log current;必须置数据库于归档模式下
ative状态的redolog 是可能把数据写进磁盘了,也可能没写进,所以这时候要删除这个组的重做联机日志时候就最好执行一下如下的命令:
alter system switch logfile;
alter system checkpoint;
alter system switch logfile;执行一次,就只切换一个日志租,比如当前是group1,那么执行一次,就切换到group2
alter system archive log current;必须置数据库于归档模式下
ative状态的redolog 是可能把数据写进磁盘了,也可能没写进,所以这时候要删除这个组的重做联机日志时候就最好执行一下如下的命令:
alter system switch logfile;
alter system checkpoint;
今天公司搬迁到天苑大厦,昨天就把自己的东西打包好了,可是没想到还是挺累的。 大早跑去交通厅听报告,然后被告知交审计计划书…… 中午回来剪了个头发,然后到了新公司,搬家公司陆陆续续把东西搬来了…… 几十个服务器……太重了,还好不用我抬 不过公司的女人们也没放过我……谁叫我是男人……苦命
在oracle中,将一个非分区表转换为分区表 (split partition 和exchange partition)
将一个非分区表转换为分区表
思路:
HZMH_Bak_SALE是(数据量上百万条,列比较多)一个非分区表,此时创建一个与HZMH_Bak_SALE同结构的分区表luda_partition,维护数据,
删除HZMH_Bak_SALE表,将luda_partition更名为ludatou_pat,删除luda_partition
步骤:
查询非分区表数据
select to_char(DATE, ‘yyyymm’), count(*) from HZMH_Bak_SALE group by to_char(DATE, ‘yyyymm’) order by to_char(DATE, ‘yyyymm’);
创建分区表(结构和非分区表HZMH_Bak_SALE相同)
create table luda_partition
(
PIG_ID VARCHAR2(12) not null,
DATE DATE not null,
NUM_NO VARCHAR2(12),
……
)
tablespace ludatou
partition by range(DATE)(
partition rest values less than (maxvalue))
交换数据(数据从非分区表到分区表)
alter table luda_partition exchange partition rest with table HZMH_Bak_SALE;
查询分区表数据
select to_char(DATE, ‘mm-yyyy’), count(*) from HZMH_Bak_SALE group by to_char(DATE, ‘mm-yyyy’);
–辅助脚本
select ‘alter table luda_partition split partition rest at (to_date(”’
|| to_char(DATE, ‘yyyymm’) ||”’,”yyyymm”)) into (partition p’
|| to_char(DATE, ‘yyyymm’)
|| ‘, partition rest);’
from luda_partition
group by to_char(DATE, ‘yyyymm’)
order by to_char(DATE, ‘yyyymm’)
–5、对rest分区进行拆分
alter table luda_partition split partition rest at (to_date(‘201008′,’yyyymm’)) into (partition p201008, partition rest);
alter table luda_partition split partition rest at (to_date(‘201009′,’yyyymm’)) into (partition p201009, partition rest);
alter table luda_partition split partition rest at (to_date(‘201010′,’yyyymm’)) into (partition p201010, partition rest);
alter table luda_partition split partition rest at (to_date(‘201011′,’yyyymm’)) into (partition p201011, partition rest);
alter table luda_partition split partition rest at (to_date(‘201012′,’yyyymm’)) into (partition p201012, partition rest);
–6、删除非分区表
drop table HZMH_Bak_SALE
–7、将分区表重命名为原非分区表名
alter table luda_partition rename to HZMH_Bak_SALE
–8、删除中间处理过程的分区表
drop table luda_partition
如果已存在分区表,要将未分区表(与已分区表结构完全相同)加入到分区中:
alter table HZMH_Bak_SALE exchange partition p201008 with table luda_test;
alter table HZMH_Bak_SALE exchange partition p201009 with table luda_test_t;
如果luda_test_t不符合分区规则,需要指定without validation 来禁止检查
alter table HZMH_Bak_SALE exchange partition p201009 with table luda_test_t without validation;
如果luda_test表中的数据是符合分区规则的,那指定without validation 之后,不会对luda_test进行全表扫描,
则会缩短exchange时间
参考手册:
Administrator Guide
os认证和口令文件认证
1、os认证和口令文件认证其实质是对oracle数据库采取何种管理方式,是本地管理还是通过一台管理服务器统一管理。
本地管理采用的就是os认证方式,统一管理采用的就是口令文件认证方式
2、两种认证的实现
oracle数据库通过sqlnet.ora文件中的参数SQLNET.AUTHENTICATION_SERVICES,PFILE(或SPFILE)文件中的参数
REMOTE_LOGIN_PASSWORDFILE和口令文件PWDsid.ora三者协同作用实现身份认证。
SQLNET.AUTHENTICATION_SERVICES=(NTS)|(NONE)
SQLNET.AUTHENTICATION_SERVICES=(NTS): 操作系统认证方式,不使用口令文件
SQLNET.AUTHENTICATION_SERVICES=(NONE):口令文件认证方式
REMOTE_LOGIN_PASSWORDFILE=(‘NONE’)|(‘EXCLUSIVE’)|(‘SHARED’)
REMOTE_LOGIN_PASSWORDFILE=(‘NONE’):不使用口令文件,操作系统认证
REMOTE_LOGIN_PASSWORDFILE=(‘EXCLUSIVE’):口令文件认证方式,但只有一个数据库实例可以使用此文件,
系统允许将SYSOPER/SYSDBA授予除INTERNAL/SYS以外的其他用户,且以具有这类身份的其他用户登录是有效的
REMOTE_LOGIN_PASSWORDFILE=(‘SHARED’):口令文件认证方式,可有多个数据库实例使用此文件,但是此设置下
只有INTERNAL/SYS帐号能被识别,即使文件中存有其他用户的信息,也不允许他们以SYSOPER/SYSDBA登录
1)SQLNET.AUTHENTICATION_SERVICES=(NTS)同时REMOTE_LOGIN_PASSWORDFILE=(‘NONE’),此时为操作系统
认证方式。
当以oracle_dba组下的用户登录进入本地windows2000后进行下边的操作:
sqlplus /nolog
sql>conn /as sysdba
或
sqlplus /nolog
sql>conn 任意用户名/密码 as sysdba
均可以sysdba身份登录成功,进行数据库方面的操作
当以远程进行登录时,执行
sqlplus /nolog
sql>conn /as sysdba
或
sqlplus /nolog
sql>conn sys/密码 as sysdba
均显示
“ERROR:
ORA-01031: insufficient privileges
”
也就是不允许以sysdba身份远程登录系统,这也是os认证之所以也称为本地认证方式的原因
2)SQLNET.AUTHENTICATION_SERVICES=(NONE)同时REMOTE_LOGIN_PASSWORDFILE=(‘EXCLUSIVE’)或(‘SHARED’),配合口令文件
PWDsid.ora,此时为口令文件认证方式
当在本地以oracle_dba组下的用户登录进入windows2000后进行下边的操作:
sqlplus /nolog
sql>conn /as sysdba
显示
“ERROR:
ORA-01031: insufficient privileges
”
实质上是要求提供拥有sysdba身份的用户名和密码
在本地或远程进行下边的操作
sqlplus “sys/密码@服务名 as sysdba”
可进入系统
也就是说口令文件认证方式允许用户从本地或远程以sysdba身份登录,但必须提供口令字
3)SQLNET.AUTHENTICATION_SERVICES=(NTS)同时REMOTE_LOGIN_PASSWORDFILE=(‘EXCLUSIVE’)或(‘SHARED’),配合口令文件
PWDsid.ora,此时操作系统认证和口令文件认证同时起作用
当在本地以oracle_dba组下的用户登录进入windows2000后进行下边的操作:
sqlplus /nolog
sql>conn /as sysdba
可进入系统
当在远程执行
sqlplus “sys/密码@服务名 as sysdba”
同样可正常登录到数据库系统上
上边的参数配置容易令人迷惑、混淆,造成假象。我推测网上有些朋友所以对身份认证产生费解可能就是因为这么
配置参数的!
三、其他
从前边的讨论可以知道,我们能够对sys以外的用户赋予sysdba身份,具体方法就是
SQLNET.AUTHENTICATION_SERVICES=(NONE)
REMOTE_LOGIN_PASSWORDFILE=(‘EXCLUSIVE’)
口令文件PWDsid.ora
SQL>grant sysdba to 用户名
这样,其他具有sysdba身份的用户就加入到PWDsid.ora中,并可以被PWDsid.ora识别,我们可以用这个被赋予sysdba身份的用户登录并进行类似sys用户下所能执行的操作
NONE
Oracle ignores any password file. Therefore, privileged users must be authenticated by the operating system.
SHARED
More than one database can use a password file. However, the only user recognized by the password file is SYS.
EXCLUSIVE
The password file can be used by only one database and the password file can contain names other than SYS
关于CBO和系统收集信息的操作
使用analyze 收集统计信息
Analyze Statement
The ANALYZE statement can be used to gather statistics for a specific table, index or cluster. The statistics can be computed exactly, or estimated based on a specific number of rows, or a percentage of rows:
ANALYZE TABLE employees COMPUTE STATISTICS;
ANALYZE INDEX employees_pk COMPUTE STATISTICS;
ANALYZE TABLE employees ESTIMATE STATISTICS SAMPLE 100 ROWS;
ANALYZE TABLE employees ESTIMATE STATISTICS SAMPLE 15 PERCENT;DBMS_UTILITY
使用DBMS_UTILITY收集对象或者数据库的统计信息
EXEC DBMS_UTILITY.analyze_schema(‘SCOTT’,’COMPUTE’);
EXEC DBMS_UTILITY.analyze_schema(‘SCOTT’,’ESTIMATE’, estimate_rows => 100);
EXEC DBMS_UTILITY.analyze_schema(‘SCOTT’,’ESTIMATE’, estimate_percent => 15);
EXEC DBMS_UTILITY.analyze_database(‘COMPUTE’);
EXEC DBMS_UTILITY.analyze_database(‘ESTIMATE’, estimate_rows => 100);
EXEC DBMS_UTILITY.analyze_database(‘ESTIMATE’, estimate_percent => 15);DBMS_STATS
使用DBMS_STATS收集对象或者数据库的统计信息
The DBMS_STATS package was introduced in Oracle 8i and is Oracles preferred method of gathering object statistics. Oracle list a number of benefits to using it including parallel execution,
long term storage of statistics and transfer of statistics between servers. Once again, it follows a similar format to the other methods:
EXEC DBMS_STATS.gather_database_stats;
EXEC DBMS_STATS.gather_database_stats(estimate_percent => 15);
EXEC DBMS_STATS.gather_schema_stats(‘SCOTT’);
EXEC DBMS_STATS.gather_schema_stats(‘SCOTT’, estimate_percent => 15);
EXEC DBMS_STATS.gather_table_stats(‘SCOTT’, ‘EMPLOYEES’);
EXEC DBMS_STATS.gather_table_stats(‘SCOTT’, ‘EMPLOYEES’, estimate_percent => 15);
EXEC DBMS_STATS.gather_index_stats(‘SCOTT’, ‘EMPLOYEES_PK’);
EXEC DBMS_STATS.gather_index_stats(‘SCOTT’, ‘EMPLOYEES_PK’, estimate_percent => 15);This package also gives you the ability to delete statistics:
EXEC DBMS_STATS.delete_database_stats;
EXEC DBMS_STATS.delete_schema_stats(‘SCOTT’);
EXEC DBMS_STATS.delete_table_stats(‘SCOTT’, ‘EMPLOYEES’);
EXEC DBMS_STATS.delete_index_stats(‘SCOTT’, ‘EMPLOYEES_PK’);Scheduling Stats
经过2016到2018,修复了一些bug. 现在从新开放下载 […]