一、使用dblink,从MS Sql server客户端访问Oracle服务器
1、创建数据源:ds_zhaozhenlong
在windows的ODBC数据源管理器中,‘Oracle in oracle92’或者其他oracle数据源,测试连接是否成功。
2、在MS Sql server的企业管理其中,服务器对象/连接服务器,新建连接服务器,访问接口为‘Microsoft OLE DB Provider for Oracle’,
或者其他数据提供者,
如:连接服务器:‘link_zhaozhenlong_oracle’;
访问接口 :‘Microsoft OLE DB Provider for Oracle’;
产品名称 :‘zhaozhenlong’;
数据源 :‘ds_zhaozhenlong’;--第一步中创建的名称
访问接口字符串:‘User ID=cs;Password=cs’;--登录oracle的用户名和密码
或者在查询分析器中执行:
EXEC master.dbo.sp_addlinkedserver @server = N'link_zhaozhenlong_oracle',
@srvproduct=N'orademo', @provider=N'MSDAORA', @datasrc=N'orademo',
@provstr=N'User ID=cs;Password=cs'
其中@srvproduct、@datasrc写实例名;@provstr为oracle的用户名和密码
3、测试:
select * from link_zhaozhenlong_oracle..CS.TB_ZHAOZHENLONG
--查询db link为link_zhaozhenlong_oracle下的cs用户的表的数据,
--用户名称和表名要大写
二、oracle触发器的简单使用
2006年12月31日 星期日 下午 06:03--逐行触发
--保存历史数据
CREATE OR REPLACE TRIGGER HR.update_job_history
AFTER UPDATE OF job_id, department_id ON employees
FOR EACH ROW
BEGIN
add_job_history(:old.employee_id, :old.hire_date, sysdate,
:old.job_id, :old.department_id);
END;
--给新数据某一列赋值
CREATE OR REPLACE TRIGGER HR.insert_job_history
BEFORE INSERT ON employees FOR EACH ROW
BEGIN
:NEW.hire_date := sysdate;
END;
--整个表触发
create or replace trigger tr_zhaozhenlong
after delete or insert
on t_zhaozhenlong_d
--for each row
declare v_pk varchar2(20);
begin
select c1 into v_pk from t_zhaozhenlong_d where rownum<=1 order by rownum;
update t_zhaozhenlong_m set c2 = (select count(1) from t_zhaozhenlong_d where c1 = v_pk)
where c1 = v_pk;
if update( t_zhaozhenlong_d.c5)
begin
update t_zhaozhenlong_d set c6 = c5 where c1 = v_pk;
end;
end;
三、oracle 特有对象的用法 —— bulk collect
declare
type mytb is table of gas.short_name%type;
mytb1 mytb;
begin
select short_name bulk collect into mytb1 from gas where rownum <= 100;
end;
四、数据库实例、数据库与用户
1、在oracle中,新建一个数据库就是一个实例,每个数据库对应于一个服务,要使用该数据库,必须启动对应的服务;在sqlserver中,一个实例对应于一个服务,要在该实例下创建数据库对象,必须启动该实例对应的服务。因此,oracle的一个数据对应于sqlserver中的一个实例。
2、在oracle中,一个数据库中可以创建多个用户,每个数据库对象(如:表、存储过程等)归属一个用户,每个用户下数据库对象是不能同名的;在sqlserver中,每个数据库对象归属于一个数据库,每个数据库中数据库对象是不能同名的。即,oracle的一个用户对应与sqlserver的一个数据库。
五、移动oracle数据库文件的位置
1、在开始-运行的命令行:
sqlplus sys/xxb@orademo as sysdba
2、select file_name from sys.dba_data_files;
数据文件:
C:/ORACLE/ORADATA/ORADEMO/SYSTEM01.DBF
C:/ORACLE/ORADATA/ORADEMO/UNDOTBS01.DBF
C:/ORACLE/ORADATA/ORADEMO/CWMLITE01.DBF
C:/ORACLE/ORADATA/ORADEMO/DRSYS01.DBF
C:/ORACLE/ORADATA/ORADEMO/EXAMPLE01.DBF
C:/ORACLE/ORADATA/ORADEMO/INDX01.DBF
C:/ORACLE/ORADATA/ORADEMO/ODM01.DBF
C:/ORACLE/ORADATA/ORADEMO/TOOLS01.DBF
C:/ORACLE/ORADATA/ORADEMO/USERS01.DBF
C:/ORACLE/ORADATA/ORADEMO/XDB01.DBF
3、shutdown immediate;
4、拷贝上面2中的原文件到新位置
5、将数据库起到mount状态
在开始-运行的命令行:sqlplus /nolog
connect sys/xxc@orademo as sysdba;
startup mount;
6、rename第2步中所有文件,重复下面的语句:
alter database rename file 'C:/ORACLE/ORADATA/ORADEMO/SYSTEM01.DBF' to 'D:/ORACLE/ORADATA/ORADEMO/SYSTEM01.DBF';
说明:原来的位置为'C:/ORACLE/ORADATA/ORADEMO/,新文件被拷贝到'D:/ORACLE/ORADATA/ORADEMO/
7、打开数据库:
alter database open
《特别说明》:在第6步中,你要rename的文件一定要是新文件,如果在移动的过程重,你open过数据库,那你在第4步中拷贝的文件已经不是最新的了,所以,在rename的过程中不要打开数据库,要么,如果你打开过,那未rename的文件一定要重新拷贝一个新的
六、如何取得一个select语句输出结果的列数?
问题:如何得到‘select * from xx,yy’ 的列数
分析:从数据上,很显然是xx,yy两个表的一个笛卡尔积,从列数上,是两个表列的和
解决方案: 在oracle中:
1 create table zzzz as select * from xx,yy;
2 select count(*) from user_tab_columns where lower(table_name) = 'zzzz';
3 drop table zzzz;
这样,在第二条语句中就可以得到列数。
值得说明的是,xx,yy表中不能有重复的列名。
七、oracle 数据导入导出
drop user zhaozhenlong cascade;
CREATE USER zhaozhenlong PROFILE "DEFAULT"
IDENTIFIED BY zhaozhenlong DEFAULT TABLESPACE zzlts
QUOTA UNLIMITED
ON zzlts
ACCOUNT UNLOCK;
--说明:创建用户后,密码和用户名相同,请及时更改密码
--以DBA身份登录(当然,分配权限时一定要谨慎,这里只是测试数据的导入导出)
GRANT SYSDBA TO zhaozhenlong;
GRANT SYSOPER TO zhaozhenlong;
GRANT "DBA" TO zhaozhenlong;
--山东零管数据导入
--导入命令imp 要导入到某用户/要导入到某用户密码@数据库连接名称 file=要导入的文件位置及名称 此导出文件DMP时导出时的用户
imp zhaozhenlong/zhaozhenlong@zhaozhenlongdb file=//192.168.0.1/DatabaseBackup/zhaozhenlong01.DMP fromuser=zzl
--导出使用exp
八、oracle数据库字符集问题(数据抽取转换和修改db字符集)
情况一:数据抽取时,转换字符集:
A数据库是是US7ASCII 字符集,B是ZHS16GBK字符集,将A数据库的数据同步到B,可以使用:
utl_raw.cast_to_raw(列名)和utl_raw.cast_to_varchar2()来解决字符集不同的问题,如:
select gas_id,utl_raw.cast_to_raw(gas_id),utl_raw.cast_to_varchar2(utl_raw.cast_to_raw(gas_id)) from gas
情况二:修改db字符集:
方法1.在注册表中修改oracle 9字符集______________________
在注册表中ORACLE/HOME0/NLS_LANG=
原来为:AMERICAN_AMERICA.WE8ISO8859P1
修改为:SIMPLIFIED CHINESE_CHINA.ZHS16GBK
方法2.登录oracle 修改字符集______________________
以sysdba身份登陆,修改props$表中NLS_CHARACTERSET=ZHS16GBK或自己需要的字符集,然后重新启动Oracle。
方法3.登录oracle,修改字符集______________________
问题描述:
varchar2(4000) abc;
intert into table_name(abc) values('这里有1500个汉字……');
报错:插入字符过长!经过测试,发现一个汉字占3个字节,所以报错! 问题所在:
使用的字符集是UTF8,就有可能出现这个错误!
使用命令查看:
SQL> select * from v$nls_parameters where
parameter='NLS_CHARACTERSET';
PARAMETER
--------------------------------------------------------------------------------
VALUE
--------------------------------------------------------------------------------
NLS_CHARACTERSET
AL32UTF8
解决方法:
建议使用ZHS16GBK字符集!
操作:
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP MOUNT;
SQL> ALTER SYSTEM ENABLE RESTRICTED SESSION;
SQL> ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
SQL> ALTER DATABASE OPEN;
SQL> ALTER DATABASE CHARACTER SET AL32UTF8/ZHS16GBK;
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP;
九、在sql server使用dblink
USE RetailManager_hb
IF EXISTS(
SELECT * FROM SYSOBJECTS WHERE ID = OBJECT_ID('dbo.#ZYHZDB_XC') AND OBJECTPROPERTY(ID,'IsTable') = 1
)
DROP TABLE dbo.#ZYHZDB_XC
IF NOT EXISTS(
SELECT * FROM master.dbo.sysservers WHERE SRVNAME = '192.168.0.2'
)
EXEC sp_addlinkedserver '192.168.0.2',N'SQL Server'
go
EXEC sp_addlinkedsrvlogin '192.168.0.2', 'false', NULL, 'sa', ''
go
USE RetailManager_hb
GO
----------------ZYHZDB_XC---------------------------------
SELECT O.NAME 表名,C.NAME AS 列名,T.NAME AS 类型,C.LENGTH AS 长度,C.PREC 精度,C.SCALE AS 小数位数 ,
可否为空=
CASE C.ISNULLABLE
WHEN 0
THEN 'YES'
ELSE 'NO'
END,P.VALUE AS 显示标签
INTO #ZYHZDB_XC
FROM [192.168.0.2].ZYHZDB_XC.[dbo].SYSCOLUMNS C,
[192.168.0.2].ZYHZDB_XC.[dbo].SYSOBJECTS O ,
[192.168.0.2].ZYHZDB_XC.[dbo].SYSTYPES T ,
[192.168.0.2].ZYHZDB_XC.[dbo].SYSPROPERTIES P
WHERE T.USERTYPE=C.USERTYPE AND
O.ID=C.ID AND (O.TYPE='U')
AND O.NAME NOT IN ('SYSCONSTRAINTS','SYSSEGMENTS') AND
O.ID*=P.ID AND
P.SMALLID=*C.COLORDER
ORDER BY O.NAME,C.NAME
------------------RetailManager_hb------------------------------------
SELECT O.NAME 表名,C.NAME AS 列名,T.NAME AS 类型,C.LENGTH AS 长度,C.PREC 精度,C.SCALE AS 小数位数 ,
可否为空=
CASE C.ISNULLABLE
WHEN 0
THEN 'YES'
ELSE 'NO'
END,P.VALUE AS 显示标签
INTO #RetailManager_hb
FROM [192.168.0.2].RetailManager_hb.[dbo].SYSCOLUMNS C,
[192.168.0.2].RetailManager_hb.[dbo].SYSOBJECTS O ,
[192.168.0.2].RetailManager_hb.[dbo].SYSTYPES T ,
[192.168.0.2].RetailManager_hb.[dbo].SYSPROPERTIES P
WHERE T.USERTYPE=C.USERTYPE AND
O.ID=C.ID AND (O.TYPE='U')
AND O.NAME NOT IN ('SYSCONSTRAINTS','SYSSEGMENTS') AND
O.ID*=P.ID AND
P.SMALLID=*C.COLORDER
ORDER BY O.NAME,C.NAME
---------------ER---RetailManager_hb------------------------------------
SELECT O.NAME 表名,C.NAME AS 列名,T.NAME AS 类型,C.LENGTH AS 长度,C.PREC 精度,C.SCALE AS 小数位数 ,
可否为空=
CASE C.ISNULLABLE
WHEN 0
THEN 'YES'
ELSE 'NO'
END,P.VALUE AS 显示标签
INTO #ER20060109
FROM RetailManager_hb.[dbo].SYSCOLUMNS C,
RetailManager_hb.[dbo].SYSOBJECTS O ,
RetailManager_hb.[dbo].SYSTYPES T ,
RetailManager_hb.[dbo].SYSPROPERTIES P
WHERE T.USERTYPE=C.USERTYPE AND
O.ID=C.ID AND (O.TYPE='U')
AND O.NAME NOT IN ('SYSCONSTRAINTS','SYSSEGMENTS') AND
O.ID*=P.ID AND
P.SMALLID=*C.COLORDER
ORDER BY O.NAME,C.NAME
select * from #ER20060109
select * from #ZYHZDB_XC
select * from #RetailManager_hb
十、在oracle中,使用sqlldr将文件中的数据导入到数据库2
1、创建数据文件:
如,在D:/创建 zhaozhenlong.txt 文件,文件内容为:
11,12,13
21,22,23
31,32,33
2、创建控制文件:
如,在D:/创建 zhaozhenlong.ctl 文件,文件内容为:
load data
infile 'd:/zhaozhenlong.txt'
append into table zhaozhenlong
fields terminated by ','
(c1,c2,c3)
3、在数据库中创建表:
create table zhaozhenlong(c1 varchar(20),c2 varchar(20),c3 varchar2(20));
4、在‘开始’/‘运行’中,执行:
sqlldr userid=cs/cs@orademo control=d:/zhaozhenlong.ctl
5、查询数据库:
select * from zhaozhenlong
结果为:
C1 C2 C3
1 11 12 13
2 21 22 23
3 31 32 33
十一、racle游标
create or replace procedure pr_zhaozhenlong_cursor
is
cursor cur_zhaozhenlong is
select rpt_date,dept_id,item--,sum((qty-10)*0.4) as myqty
from tb_zhaozhenlong
where rpt_date between to_date('2007-01-01','YYYY-MM-DD') and to_date('2007-01-15','YYYY-MM-DD')
and (item like 'S%'--首字母S
or item like '__S%'--第三个字母S
or item like '%a_%' escape 'a'--包含"_",其中 escape后的a为转义符
)
order by dept_id,rpt_date,item;--, myqty desc; --根据别名排序
--存放fetck...into的结果(单条数据)
v_rptdate date;
v_deptid varchar(20);
v_item varchar(20);
begin
insert into tb_temp_zhaozhenlong(dept_id,qty)
select dept_id,sum(qty) from tb_zhaozhenlong where rpt_date between to_date('2007-01-01','YYYY-MM-DD') and to_date('2007-01-15','YYYY-MM-DD') group by dept_id;
--使用游标
open cur_zhaozhenlong;
if not cur_zhaozhenlong%isopen then
open cur_zhaozhenlong;
end if;
loop
fetch cur_zhaozhenlong into v_rptdate,v_deptid,v_item;
/*
if cur_zhaozhenlong%found then
update tb_temp_zhaozhenlong set memo = memo + v_item where dept_id = v_deptid;
else
exit;
end if;
*/
--或者
update tb_temp_zhaozhenlong set memo = memo + v_item where dept_id = v_deptid;
exit when cur_zhaozhenlong%notfound;
end loop;
open cur_errormess;
loop
fetch cur_errormess
into str_errormess0;
exit when cur_errormess%notfound;
str_errormess := str_errormess || '/n ' || str_errormess0;
exit when length(str_errormess)>=4000;
end loop;
close cur_errormess;
str_errormess :=str_errormess ||'/n已经存在数据,需要重新提取!';
end;
/
十二、oracle的类型(记录变量)
create or replace procedure pr_zhaozhenlong_type
is
--记录,相当于结构
type myrecodetype is record(myid tb_zhaozhenlong."id"%type,myname tb_zhaozhenlong.item%type);--注意 :在声明变量、查询数据时,关键字做列名要用双引号括起来
myrecode myrecodetype;
--表
type mytabletype is table of tb_zhaozhenlong.item%type index by binary_integer;
mytable mytabletype;
--嵌套表
--create or replace type myobjecttype as object(dept_name varchar2(20),dept_add varchar2(100));
/*
create or replace type myobject is table of myobjecttype;
create table mydept(dept_no varchar2(10),dept_1 myobject) nested table dept_1 store as dept_1;
*/
--varray
/*
create type myvarray is varray(10) of myobjecttype;
create table mydept_zzl(id varchar2(10),works myvarray);
*/
v_item varchar2(20);
v_item1 tb_zhaozhenlong.item%type;
v_item2 v_item%type;
--存放fetck ... bulk collect into 提取的所有数据(结果集)
--type tb_type is table of
begin
--记录
select "id",dept_id into myrecode from tb_zhaozhenlong where "id" = '1';--&identity;
--dbms_output.put_line(myrecode.myname);
--表
select item into mytable(0) from tb_zhaozhenlong where "id" = '1';--&identity;
mytable(-1) :='negative';
mytable(1) :='negative';
dbms_output.put_line(mytable(-1));
dbms_output.put_line(mytable(1));
dbms_output.put_line(mytable(1));
dbms_output.put_line(mytable(1));--这样访问是错误的,因为没有此元素
end;
/
十三、对视图的增、删、改、查
如果符合视图 及物理表的约束条件,就可以对视图进行增删改查操作
drop view view_zhaozhenlong1
create view view_zhaozhenlong1 as select * from tb_zhaozhenlong with check option;
insert into view_zhaozhenlong1(DEPT_ID,ITEM,RPT_DATE) values('zhao','zhen',sysdate);
--如果有where条件,并且指定了 with check option属性,那么插入的数据必须符合视图的where条件
drop view view_zhaozhenlong2
create view view_zhaozhenlong2 as select * from tb_zhaozhenlong where dept_id = 'f' with check option;
insert into view_zhaozhenlong2(DEPT_ID,ITEM,RPT_DATE) values('zhao','zhen',sysdate);
insert into view_zhaozhenlong2(DEPT_ID,ITEM,RPT_DATE) values('f','zhen',sysdate);
drop view view_zhaozhenlong3
create view view_zhaozhenlong3 as select * from tb_zhaozhenlong where dept_id = 'f';
insert into view_zhaozhenlong3(DEPT_ID,ITEM,RPT_DATE) values('zhao','zhen',sysdate);
待整理:
物化视图
create materialized view mv_name
build immediate
on commit
as
select * from username.table@link_name;
我单独执行
select * from username.table@link_name;可以查的到,但是执行以上建视图就提示没权限select ?不知道还需要啥权限...
十四、oracl动态sql语句,调用包或执行dml语句
declare
type refcursor is ref cursor;
rc_zhaozhenlong refcursor;
begin
--给动态语句传值(USING 子句)
--执行 dml语句
execute immediate 'insert into tb_zhaozhenlong(rpt_date,dept_id,item) values(:1,:2,:3)' using sysdate,'zhao','zhenlong';
commit;
--不能执行带ref cursor参数的包
--因此,通过pr_zhaozhenlong,将数据插入到临时表,再从临时表取数据
execute immediate 'begin pa_zhaozhenlong.pr_zhaozhenlong(:1,:2,:3,:4); end;'
using in sysdate,in sysdate,in 'zhaozhenlong',out rc_zhaozhenlong;
--调用包
execute immediate 'begin pa_zhaozhenlong.pr_zhaozhenlong1(:1,:2,:3); end;'
using in sysdate,in sysdate,in 'zhaozhenlong';
--调用无参存储过程
execute immediate 'begin pr_zhaozhenlong_loop; end;';
end;
动态执行ddl语句,参看《在oracle存储过程中执行动态sql》http://hi.baidu.com/zhao_e893/blog/item/53a658edd98e03d4b21cb175.html
十五、oracle的例外处理
create or replace procedure pr_zhaozhenlong_exception
is
i int;
ex_zhaozhenlong exception;
pragma exception_init(ex_zhaozhenlong,-2291);
ex_no_name exception;
begin
------------------------------------------------------------
--错误处理
update tb_zhaozhenlong set qty = i where item = '1' ;
if sql%notfound then
raise ex_no_name;
end if;
--2、判断DML语句是否执行成功
--insert into mytable values(2,'bbbbb','b');
--执行成功
if sql%found then
dbms_output.put_line('True');
--未执行成功
elsif sql%notfound then
--else if sql%notfound then
--注意esle if 与elsif的区别:如果时前者,则必须在结尾写end if;否则,用end if
dbms_output.put_line('True');
elsif null then
dbms_output.put_line('注意在condition中使用null,等同于false');
elsif i>1000 then
goto end_dml;
elsif i between 1 and 10 then
dbms_output.put_line('注意 if 与between 的用法');
else
null; --null语句不会执行任何操作
end if;
--end if;
commit;
--影响的行数
<<end_dml>>
dbms_output.put_line(sql%rowcount);
/*
--4、case
--为了避免case_not_found的例外,应该带else
case
when p_name = 'zhao' then
update mytable set myname = 'zhen' where "id" = '1';
end case;
open rc_zhaozhenlong for
select case myname when 'zhao' then '1' when 'zhen' then '2' else '3' end case ,
case when myname = 'zhaozhenlong' then '4' else '5' end as myname1
from mytable;
*/
--在应用程序中自定义错误信息
select round(qty) into i from tb_zhaozhenlong where "id" = 1;
if i is null then
raise_application_error(-2001,'无销售量');
end if;
exception
when ex_zhaozhenlong then
dbms_output.put_line('该数量不存在');
when ex_no_name then
dbms_output.put_line('该名称不存在');
when too_many_rows or no_data_found then
dbms_output.put_line('too_many_rows');
when others then
dbms_output.put_line('错误号:' ||sqlcode); --返回错误信息号,和错误信息
dbms_output.put_line('错误信息:' ||sqlerrm);
end pr_zhaozhenlong_exception;
/
十六、oracle语句跟踪
--1、打开sqlplus
sqlplus /nolog
--2、以sys的dba身份登录
connect sys@orademo as sysdba;
--3、产生plustrace角色
@oracle/ora92/sqlplus/admin/plustrce.sql
--4、给某普通用户授角色
grant plustrace to cs;
--5、以此普通用户登录
connect cs
--6、创建跟踪表plan_table
@/oracle/ora92/rdbms/admin/utlxplan.sql
--打开时间显示
set time on;
打开自动分析统计,不显示SQL语句的运行结果
set autotrace on;
select * from tb_zhaozhenlong;
结果为:
08:53:45 SQL> select * from tb_zhaozhenlong;
60 rows selected.
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT Optimizer=CHOOSE
1 0 TABLE ACCESS (FULL) OF 'TB_ZHAOZHENLONG'
Statistics
----------------------------------------------------------
0 recursive calls
0 db block gets
11 consistent gets
0 physical reads
0 redo size
2763 bytes sent via SQL*Net to client
536 bytes received via SQL*Net from client
5 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
60 rows processed
08:53:52 SQL>
关闭自动分析统计
set autotrace off;
set time off;
_______________________________________________________________________
补充:
其它参数说明:
SET AUTOTRACE OFF | ON EXPLAIN | ON STATISTICS | ON | TRACEONLY | TRACE EXPLAIN
SET AUTOTRACE OFF ---------------- 不生成AUTOTRACE 报告,这是缺省模式
SET AUTOTRACE ON EXPLAIN ------ AUTOTRACE只显示优化器执行路径报告
SET AUTOTRACE ON STATISTICS -- 只显示执行统计信息
SET AUTOTRACE ON ----------------- 包含执行计划和统计信息
SET AUTOTRACE TRACEONLY ------ 同set autotrace on,但是不显示查询输出
查看IO数:
SELECT * FROM v$filestat ;
explain plan for select * from dual;
十七、当你误删了Oracle数据时,恢复数据
--查看当前数据语句
select * from tb_zhaozhenlong1;
--
drop table tb_zhaozhenlong1;
create table tb_zhaozhenlong1 as select * from tb_zhaozhenlong --2007-01-02 19:23:00没有时间戳
update tb_zhaozhenlong1 set "id" = rownum;
commit;--2007-01-02 19:26:00没有时间戳
--2007-01-02 19:28:00
delete from tb_zhaozhenlong1;--2007-01-02 19:29:00
commit;
insert into tb_zhaozhenlong1
select * from tb_zhaozhenlong1 as of timestamp to_timestamp('2007-01-02 19:28:00','YYYY-MM-DD HH24:MI:SS');
commit;--2007-01-02 19:33:00
--查看历史数据语句
select * from tb_zhaozhenlong1 as of timestamp to_timestamp('2007-01-02 19:50:00','YYYY-MM-DD HH24:MI:SS');
--查询2007-01-02 19:28:00到2007-01-02 19:33:00,看到2007-01-02 19:26:00到2007-01-02 19:29:00期间的数据,不包括2007-01-02 19:29:00
--查询2007-01-02 19:33:00到2007-01-02 19:38:00,看到2007-01-02 19:29:00到2007-01-02 19:33:00期间的数据,不包括2007-01-02 19:29:00
--查询2007-01-02 19:39:00到 现在 ,看到2007-01-02 19:33:00到2007-01-02 19:33:00期间的数据
十八、修改了服务器名称, 导致oracle监听服务(OracleOraHome92TNSListener)不能启动
1 问题:如果在安装了oracle之后,修改了oracle数据库服务器的名称,导致其监听服务不能启动。
2 处理方法:
修改oracle的监听初始化文件listener.ora(文件位置:ora92/network/admin),将其LISTENER中的HOST改成你修改后的数据库服务
器的名称。如:
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
)
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = MI)(PORT = 1521))
)
)
)
二九、当丢失了REDO01.LOG,REDO02.LOG...文件之后(丢失日志文件)打开数据库失败的解决方法
--说明:对正在使用的数据库,一定要谨慎
sqlplus /nolog
SQL> connect sys/xxb@demo as sysdba;
SQL> recover database until cancel;
Media recovery complete.
SQL> alter database open;
alter database open
*
ERROR at line 1:
ORA-01589: must use RESETLOGS or NORESETLOGS option for database open
--重新设置日志文件
SQL> alter database open resetlogs;
Database altered.
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup;
ORACLE instance started.
Total System Global Area 126950220 bytes
Fixed Size 453452 bytes
Variable Size 109051904 bytes
Database Buffers 16777216 bytes
Redo Buffers 667648 bytes
Database mounted.
Database opened.
--完成,退出
SQL>exit;
二十、在Oracle命令提示符,执行sql文件中脚本
sqlplus /nolog;
connect xc1118/xc1118@sdlgdb;
@ d:/createtable.sql;
@ ?/admin/sample/droptable.sql;
select count(1) from xxx;