首页
留言
关于
友链
更多
足迹
Search
1
SpringMVC+Spring+MyBatis整合完整版Web实例(附数据)
2,910 阅读
2
关于在Flutter实现Google地图的方法
1,879 阅读
3
druid报异常 “sql injection violation, part alway true condition not allow”的解决方案
1,375 阅读
4
git删除remote
1,336 阅读
5
MyBatis的TooManyResultsException异常的解决办法
1,149 阅读
发现
技术
生活
户外
登录
Search
标签搜索
Git
JavaScript
Flutter
Oracle
Git学习
Java
MySQL
SQL Server
秦岭户外
IntelliJ IDEA
Spring Boot
Flutter 2.0
对称加密算法
Google地图
Maven
ES6
linux
Tomcat
Redis
Spring
Bai Keyang
累计撰写
288
篇文章
累计收到
277
条评论
首页
栏目
发现
技术
生活
户外
页面
留言
关于
友链
足迹
搜索到
9
篇与
Oracle
的结果
2018-07-18
Oracle表空间大小及占用情况查询
查询Oracle表空间使用情况:SELECT -- '表空间名称' a.tablespace_name as "Table Space Name", -- 表空间总大小(byte) total as "Total(byte)", -- 表空间剩余大小(byte) free as "Lave(byte)", -- 表空间已使用大小(byte) (total - free) as "Use(byte)", -- 表空间总大小(G) total / (1024 * 1024 * 1024) as "Total(G)" , -- 表空间剩余大小(G) free / (1024 * 1024 * 1024) as "Lave(G)", -- 表空间已使用大小(G) (total - free) / (1024 * 1024 * 1024) as "Use(G)" , round((total - free) / total, 4) * 100 as "Usage Rate(%)" FROM (SELECT tablespace_name, SUM(bytes) free FROM dba_free_space GROUP BY tablespace_name) a, (SELECT tablespace_name, SUM(bytes) total FROM dba_data_files GROUP BY tablespace_name) b WHERE a.tablespace_name = b.tablespace_name;查询表空间下所有的表:Select Table_Name, Tablespace_Name From Dba_Tables Where Tablespace_Name = 'USERS';说明:USERS为表空间名称,上面SQL执行表示查询USERS表空间下所有的表查看表空间下的表占用空间情况:select t.segment_name, t.segment_type, sum(t.bytes / 1024 / 1024) as "Use(M)" from dba_segments t where t.tablespace_name = 'USERS' --and t.segment_type='TABLE' group by OWNER, t.segment_name, t.segment_type查看oracle表空间的名称及大小:SELECT t.tablespace_name, round(SUM(bytes / (1024 * 1024)), 0) "Size" FROM dba_tablespaces t, dba_data_files d WHERE t.tablespace_name = d.tablespace_name GROUP BY t.tablespace_name;查看oracle表空间物理文件的名称及大小:SELECT tablespace_name, file_id, file_name, round(bytes / (1024 * 1024), 0) "total Space" FROM dba_data_files ORDER BY tablespace_name;查看oracle回滚段名称及大小:SELECT segment_name, tablespace_name, r.status, (initial_extent / 1024) initialextent, (next_extent / 1024) nextextent, max_extents, v.curext curextent FROM dba_rollback_segs r, v$rollstat v WHERE r.segment_id = v.usn(+) ORDER BY segment_name;查看oracle表空间的使用情况:SELECT SUM(bytes) / (1024 * 1024) as free_space, tablespace_name FROM dba_free_space GROUP BY tablespace_name; 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;注意:只能使用""而不能使用''扩展表空间大小,向表空间里增加数据文件:ALTER TABLESPACE [tablespace_name] ADD DATAFILE '[filename]' SIZE [size];tablespace_name为表空间名称;filename为表空间文件;size为表空间大小向表空间里新增数据文件,并且允许数据文件自动增长:ALTER TABLESPACE USERS ADD DATAFILE 'D:\APP\ADMINISTRATOR\ORADATA\INNETDB\USERS02.DBF' SIZE [50M] AUTOEXTEND ON NEXT [5M] MAXSIZE [100M];删除表空间中的数据文件:ALTER TABLESPACE [tablespace_name] DROP DATAFILE '[filename]';tablespace_name为表空间名称;filename为表空间文件; 实战操作:当表空间满了之后,使用delete删除数据后,表空间不会回收,存在高水位。High Water Mark(HWM) 是Oracle(Segment)级别的概念。在仅有DML(比如delete,insert)操作时,高水位线只会增长,不会降低。具体来说,由于程序使用的delete语句不回收使用过的空间,数据虽然删除了,但是高水位线却没有降低,仍然处于之前的水位。1、扩展表空间:将表空间USERS扩充20000M(自己已尝试,可行)alter tablespace USERS add datafile 'D:\APP\ADMINISTRATOR\ORADATA\INNETDB\USERS02.DBF' size 20000M;2、解决办法:降低表的高水位(自己未曾尝试)语法:alter table my_objects shrink space;需要说明的一点就是,使用truncate删除数据,不会有HWM的现象。 扩展:查看oracle数据库库对象:SELECT owner, object_type, status, COUNT(*) count# FROM all_objects GROUP BY owner, object_type, status;查看oracle数据库的版本:SELECT version FROM product_component_version WHERE substr(product, 1, 6) = 'Oracle';查看oracle数据库的创建日期和归档方式:SELECT created, log_mode FROM v$database;查看oracle控制文件目录:SELECT NAME FROM v$controlfile;查看oracle日志文件目录:SELECT MEMBER FROM v$logfile;查看索引信息:-- 查询表索引 select * from user_indexes ui where ui.table_name = 'T_S_HIS_ALARM_INFO'; -- 查询指定索引 select status from user_indexes where index_name='IDX_HIS_TERMINALID'设置表不写日志:alter table [table_name] NOLOGGING;table_name 为表名称
2018年07月18日
406 阅读
0 评论
0 点赞
2018-05-28
Oracle数据误删找回的方法
今天帮客户直接在数据库删除数据。手一抖一不小心将其他数据给删除掉了。(别提当时心里那个急啊~ )怎么办?被客户怼两句?No No No听同事说,Oracle可以将删除的数据找回。然后根据同事的提示,就自行上网百度搜索了一通。方法很简单,就是利用Oracle的快照来快速找回刚刚被自己删除的数据:-- 创建一个快表将删除修改之前状态的数据找回到这个表中 CREATE TABLE QUICK_TABLE_BKY_201805281037 AS SELECT * FROM t_user AS OF TIMESTAMP sysdate-1/24;我在这里找的是一个小时前的,所以就是 当前时间(sysdate)- 一个小时(1/24);如果要退回一天前,那就直接 sysdate-1 ,这样就是一天前的数据。在我创建的临时表QUICK_TABLE_BKY_201805281037中,我找到了我刚刚不小心删除的数据啦。既然刚刚被我删除的数据找到了,那接下来该怎么做应该就不用我说了吧。那这个时候有的人可能要问, 不小心删除表这个时候怎么办?不要急,不要慌。如果不小心删除表,在 user_recyclebin中找到最近操作过的表名称,然后用快照(只能用于10G及以上版本)就能快速找到啦:FLASH BACK TABLE t_user TO BEFORE DROP;这样就可以快速的找到被删除的t_user表啦 。扩展一下快照的一些用法:一、.FLASHBACK QUERY:恢复表数据方法一: 闪回到15分钟前select * from orders as of timestamp (systimestamp - interval ''15'' minute) where ......这里可以使用DAY、SECOND、MONTH替换minute,例如:SELECT * FROM orders AS OF TIMESTAMP(SYSTIMESTAMP - INTERVAL ''2'' DAY) 方法二: 闪回到某个时间点select * from orders as of timestamp to_timestamp (''01-Sep-04 16:18:57.845993'', ''DD-Mon-RR HH24:MI:SS.FF'') where ... 方法三: 闪回到两天前select * from orders as of timestamp (sysdate - 2) where......... 二、FLASHBACK DROP:恢复被错误drop掉的表方法一: 找回已被删除的表flashback table orders to before drop; 方法二: 如果源表已经重建,可以使用rename to子句flashback table order to before drop rename to order_old_version; 三、FLASHBACK TABLE:恢复表到一个早期状态首先要启用行迁移:alter table order enable row movement;方法一: 闪回表到15分钟前flashback table order to timestamp systimestamp - interval ''15'' minute;方法二: 闪回到某个时间点FLASHBACK TABLE order TO TIMESTAMP TO_TIMESTAMP('2007-09-12 01:15:25 PM','YYYY-MM-DD HH:MI:SS AM')
2018年05月28日
298 阅读
0 评论
0 点赞
2018-04-18
ORA-28002: the password will expire within 5 days
异常信息如下:2018-04-18 08:39:02,494 INFO method:com.mchange.v2.c3p0.SQLWarnings.logAndClearWarnings(SQLWarnings.java:43) - ORA-28002: the password will expire within 5 days java.sql.SQLWarning: ORA-28002: the password will expire within 5 days at oracle.jdbc.driver.DatabaseError.addSqlWarning(DatabaseError.java:2048) at oracle.jdbc.driver.DatabaseError.newSqlWarning(DatabaseError.java:1880) at oracle.jdbc.driver.T4CTTIoer.processWarning(T4CTTIoer.java:522) at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:455) at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:200) at oracle.jdbc.driver.T4CTTIoauthenticate.doOAUTH(T4CTTIoauthenticate.java:379) at oracle.jdbc.driver.T4CTTIoauthenticate.doOAUTH(T4CTTIoauthenticate.java:806) at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:446) at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:557) at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:233) at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:29) at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:556) at com.mchange.v2.c3p0.DriverManagerDataSource.getConnection(DriverManagerDataSource.java:134) at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:182) at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:171) at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$1PooledConnectionResourcePoolManager.acquireResource(C3P0PooledConnectionPool.java:137) at com.mchange.v2.resourcepool.BasicResourcePool.doAcquire(BasicResourcePool.java:1014) at com.mchange.v2.resourcepool.BasicResourcePool.access$800(BasicResourcePool.java:32) at com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask.run(BasicResourcePool.java:1810) at com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:547) 这个是Oracle提示密码即将在5天内过期。解决该问题的办法最直接的就是修改用户的密码,修改后就不不会再有该提示。但是,这么解决治标不治本啊。因为Oracle的密码失效默认为180天过期。在开发过程中,显然大部分时间我们是希望该密码永久有效的。解决办法:1、查看用户的profile设置:select username,profile from dba_users;在Oracle中,每个用户都会有对应的一种特定类型的profile概要设置,默认为DEFAULT。2、查看系统profile中PASSWORD_LIFE_TIME设置:PASSWORD_LIFE_TIME : 密码生命周期,指用户密码什么时候到期,单位是天,如图,安装 Oracle 时默认的 PASSWORD_LIFE_TIME 是 180 天, 即 6 个月,其含义就是,我们的用户密码每 6 个月就需要更新(注意: 这里的更新不是指密码需要改变,而是指一个更新动作,可以维持密码不变,但必须执行这个更新动作)3、修改DBA_PROFILES中的PASSWORD_LIFE_TIME的设置,改为ULIMITED,表示 无限永不过期的。ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;这个时候再去查看DEFAULT的PROFILE中PASSWORD_LIFE_TIME 时,已经被修改为UNIMITED,修改后设置立即生效,不需要重启数据库,此时密码永远就不会过期啦。4、已经被报告了密码快要过期的账户必须再改一次密码(部分需要DBA权限)但为了保险起见,在这里一般都建议将所有经常使用的账户都更新一次密码!可以通过使用PL/SQL登陆,就会提示让你重新设置新的密码,这个时候你只需要继续输入旧密码,然后点击确定即可。(此方法比较简单)也可以通过 sqlplus / as sysdba 登陆到 Oracle (无需密码),然后执行如下命令更新一下密码 :如果是其他用户的话,那么就使用其他用户名,如 scott。alter user scott identified by soctt;我这里还修改了root的密码,否则之前会报28002的错误。5、重新登陆,不再出现 ORA-28002 错误(观察项目控制台,再也没有提示该异常了)项目没有继续抛出该异常;使用工具重新登陆,确认没有报 ORA-28002 错误。 至此,这个问题就彻底解决了,以后无论多长时间,都不会再遇到这个问题。参考资料:https://www.cnblogs.com/shenxiaolin/p/6397753.html
2018年04月18日
312 阅读
0 评论
0 点赞
2018-03-09
Oracle 触发器的启用禁用
一、Oracle 触发器的启用:1、启用指定触发器:alter trigger trigger_name enable;如:alter trigger "tr_add_user" enable;2、启用 指定表 的所有 trigger:alter table table_name enable all triggers;如:alter table t_user enable all triggers;二、Oracle 触发器的禁用:1、禁用指定触发器:alter trigger trigger_name disable;如:alter trigger "tr_add_user" disable;2、禁用 指定表 的所有 trigger:alter table table_name disable all triggers;如:alter table t_user disable all triggers;
2018年03月09日
270 阅读
0 评论
0 点赞
2018-03-01
Oracle修改序列(Sequence)起始值的方法
Oracle 序列(Sequence)主要用于生成流水号,在应用中经常会用到,特别是作为ID值,拿来做表主键使用较多。但是,有时需要修改序列初始值(START WITH)时,有同仁使用这个语句来修改:alter sequence sequencename start with xxxxxxxx。但是,在Oracle DB中,修改序列没有这样的语法。下面介绍几种修改方式:1.先删除序列,然后重新创建。不过这不是当前要讲的重点。这个方法比较暴力,也比较方便,如果序列有在用,会影响应用的正常使用。2.写个循环来增加。如果需要增加500,写个循环运行500次SELECT SEQUENCE_NAME.NEXTVAL FROM DUAL;3.通过Increment By来实现修改初始值。例如:若序列名称是SEQ_TEST,初始值是13,而现在要设置初始值为1013,Increment By值为:1000(1013-13)1) 执行:ALTER SEQUENCE SEQ_TEST INCREMENT BY 1000; --- 设置当前序列递增1000,当前序列为132) 执行:SELECT SEQ_TEST.NEXTVAL FROM DUAL; --- 当前序列为10133) 执行:ALTER SEQUENCE SEQ_TEST INCREMENT BY 1; --- 设置当前序列递增1000,当前序列为1013
2018年03月01日
301 阅读
1 评论
0 点赞
2017-12-06
Oracle 字段类型clob 修改为varchar2 的方法
在Oracle数据库中,将字段的Clob类型修改为VARCHAR2的方法的大致思路:1、新增一个字段,类型为VARCHAR22、将字段类型Clob的列数据更新到新增的列3、删除Clob列4、将新增列名更改为原来的列名具体操作示例如下:--新增一个字段,类型为VARCHAR2 alter table t_demo add temp VARCHAR2(500); --将字段类型Clob的列数据更新到新增的列 update t_demo set temp=CONTENT; --删除Clob列 alter table t_demo drop column CONTENT; --将新增列名更改为原来的列名 alter table t_demo rename column temp to CONTENT;
2017年12月06日
288 阅读
0 评论
0 点赞
2017-07-19
Oracle的列操作
Oracle的列操作:增加列:alter table emp4 add test varchar2(10);修改列:alter table emp4 modify test varchar2(20);删除列:alter table emp4 drop column test;这里要注意几个地方,首先,增加和修改列是不需要加关键字COLUMN,否则会报错ora-00905。其次,对删除单列的话,一定要加COLUMN,然后记住,删除是不需要加列类型的。增加多列:alter table emp4 add (test varchar2(10),test2 number);修改多列:alter table emp4 modify (test varchar2(20),test2 varchar2(20));删除多列:alter table emp4 drop (test,test2);很奇怪的现象,再单列中要加关键字COLUMN,然而再删除多列的时候,不能加COLUMN关键字。
2017年07月19日
300 阅读
0 评论
0 点赞
2017-07-10
Oracle字符串连接concat函数和符串长度length函数的使用
Oracle字符串连接concat()函数:1、concat()字符串连接函数,concat只能连接两个字符,而“||”可以连接多个字符。select concat('BT','_youth') from dual; -- 用concat连接多个字符时,需要嵌套 select concat(concat('aa','bb'),'cc') from dual; select 'aa'||'bb'||'cc' from dual2、Oracle字符串长度length()函数:length(string)计算string所占的字符长度:返回字符串的长度,单位是字符select * from table t where length(t.username) < 10;3、Oracle字符串长度hengthb()函数:lengthb(string)计算string所占的字节长度:返回字符串的长度,单位是字节select lengthb('中国') from dual对于单字节字符,LENGTHB和LENGTH是一样的. 如可以用length(‘string’)=lengthb(‘string’)判断字符串是否含有中文。注: 一个汉字在Oracle数据库里占多少字节跟数据库的字符集有关,UTF8时,长度为三。 select lengthb(''飘'') from dual 可查询汉字在oracle数据库里占多少字节 实操例子:update table t set t.pid = concat('1',t.pid) where length(t.pid) < 10;
2017年07月10日
312 阅读
0 评论
0 点赞
2017-04-13
Navicat for Oracle 连接 Oracle 11g
亲测完全OK可用。Navicat for Oracle 下载:https://www.navicat.com.cn/download然后还需要Oracle 的二个文件 地址为 http://www.oracle.com/technetwork/topics/winsoft-085727.htmlinstantclient-basic-nt-12.1.0.2.0.zipinstantclient-sqlplus-nt-12.1.0.2.0.zip这里我百度云有 链接: http://pan.baidu.com/s/1bpH2TTd 密码: f31q这里我直接把 instantclient-basic-nt-12.1.0.2.0.zip 解压到 Navicat for Oracle 的解压目录的instantclient_10_2目录下(可以随意)然后这个目录下多了instantclient_12_1 这个目录 ,然后再把instantclient-sqlplus-nt-12.1.0.2.0.zip 解压到 instantclient_12_1下完成最后打开Navicat for Oracle 单击 工具->选项-> OCI这里有二个选项 参考我的路径就知道了OCI 你的路径\instantclient_12_1\oci.dllSQL 你的路径\instantclient_12_1\sqlplus.exe最后 连接搞定,可以正常使用了。参考资料及原文链接:http://blog.csdn.net/u013107634/article/details/52741591感恩在互联网上分享知识的每一位。拓展:查询Oracle的版本号:select * from v$version;
2017年04月13日
335 阅读
0 评论
0 点赞