Oracle数据库的登录以及常用数据导入查询
1、Oracle数据库的关闭与启动
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | 关闭: 1、su - oracle 2、lsnrctl stop 3、sqlplus /nolog 4、connect / as sysdba 5、shutdown immediate 6、quit 启动: 1、su - oracle 2、export ORACLE_SID=orcl[服务名] 3、sqlplus /nolog 4、connect / as sysdba 5、startup 6、quit 7、lsnrctl start |
2、Oracle数据库的登录:
1、登录到数据库服务器
2、登录到SQLPlus
1 2 | su - oracle sqlplus / as sysdba |
3、【可选】连接要具体操作的用户
conn 用户名/密码
或者:
sqlplus 用户名/密码@orcl
(sqlplus sys/密码 as sysdba)
*** 关于Oracle中sys和system用户的区别于联系***
SYS和SYSTEM都是Oracle数据库默认创建的内部管理员账户,都拥有高级权限,但它们之间还是存在一些区别:
-
SYS用户:
-
SYS用户是Oracle数据库的超级用户,它具有最高权限。
-
SYS用户主要用于数据库内部的维护任务,例如数据库的启动和关闭。
-
SYS用户拥有所有的系统特权和角色,且无法修改或撤销。
-
默认情况下,SYS模式下的所有数据库对象在SYS模式下创建。
-
在执行一些特定的DBA任务时需要以SYSDBA或SYSOPER的权限登录,如备份、恢复和PATCH更新等。
-
-
SYSTEM用户:
-
SYSTEM用户被用于创建数据字典表和视图,并向Oracle数据库用户授予权限。
-
SYSTEM用户通常用于一般的管理员工作,例如创建和管理用户账户、操纵数据库事例和数据库对象等。
-
SYSTEM用户默认拥有DBA角色。
-
简单来说,Oracle数据库的核心和内部功能是由SYS用户管理的,而其他日常的数据库管理任务则通常由SYSTEM用户执行。由于SYS和SYSTEM用户的权限都非常高,因此应当谨慎使用,并且尽量只在必要的情况下使用这两个账户。对于日常操作和应用程序的运行,应当尽可能创建和使用权限较低的数据库普通用户账户,以方便管理也能够降低风险。
3、用户的创建以及数据库文件的导入导出
用户的创建
1 2 3 4 5 6 7 8 9 10 11 | 1、使用oracle用户: su - oracle 2、登录: sqlplus / as sysdba 3、创建用户及设置密码: create user 用户名 identified by "密码" ; 4、给数据库用户授权: grant dba to 用户名; grant create session,resource to 用户名; 删除用户 drop user 用户名 cascade; |
修改用户密码并设置数据库默认密码为永久有效
1 2 3 4 5 6 7 8 9 10 11 12 | -- 1、设置用户的密码 ALTER USER 用户名 IDENTIFIED BY 密码; -- 2、设置密码的过期时间为永不过期 ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED ; -- 3、查看数据库默认的密码管理方式有效期 SELECT * FROM dba_profiles WHERE profile = 'DEFAULT' AND resource_name = 'PASSWORD_LIFE_TIME' ; |
数据库文件的导出(备份):
注意:
如果公司要求使用的用户名或者密码是包含特殊符号,比如@,这时候就需要进行一些转义,比如下面密码包含@,则要使用双引号括起来:
nohup exp userid='username/"KNfc2@#"'
参考:https://www.cnblogs.com/lhrbest/p/6560906.html
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | 进入到oracle用户执行: su - oracle 后台导出: nohup exp userid=数据库用户名/数据库密码@主机IP:1521/服务名 file=/备份文件名.dmp > /日志文件.log 2>&1 & nohup exp userid=username/userpasswd@192.168.145.xx:1521/orcl file=/xxx.dmp > /xxx.log 2>&1 & 导出指定的表: nohup exp userid=username/userpasswd@192.168.145.xx:1521/orcl file=/xxx.dmp TABLES=\(表名[多个表用逗号隔开]\) > /xxx.log 2>&1 & 增量导出: (1)“完全”增量导出(Complete) 即备份整个数据库,包括所有用户的数据: $exp system/manager inctype=complete file=990702.dmp (2)“增量型”增量导出 备份上一次备份后改变的数据。比如: $exp system/manager inctype=incremental file=990702.dmp (3)“累计型”增量导出(Cumulative) 累计型导出方式只是导出自上次“完全” 导出之后数据库中变化了的信息。比如: $exp system/manager inctype=cumulative file=990702.dmp |
数据库文件的导入:
参数说明:
full=y,是导入文件中全部内容,有可能有多个用户的内容。
说明:一般情况下,不需要导入某张表,是因为这张表数据量庞大,就需要使用下面参数:
ignore=y,在导入数据时忽略错误,并继续导入其他对象,如果已经存在该表的话直接就忽略不导入,
statistics=none,(表不存在情况下:导入)是为了不导入统计信息,如果表很大,导入统计信息会花很长时间。
replace=y,(表存在情况下:更新)将 replace参数设置为 Y
或 y
,可以让 imp
命令在表已经存在的情况下执行更新操作。如果目标表不存在,Oracle将不会执行导入操作。
1 2 3 4 5 6 7 | 进入到oracle用户执行: su - oracle 后台导入: nohup imp 数据库用户名/密码@本机主机IP:端口/服务名 file=/xxx/xxx.dmp full=y ignore=y STATISTICS=NONE > /日志文件.log 2>&1 & nohup imp username/userpasswd@192.168.179.xxx:1521/orcl file=/xxx.dmp full=y ignore=y STATISTICS=NONE > /日志文件.log 2>&1 & 导入指定的表(Oracle模式规定,如果导入指定表的话,就不能指定/使用 full=y): nohup imp username/userpasswd@192.168.179.xxx:1521/orcl file=/xxx.dmp TABLES=\(表名[多个表用逗号隔开]\) ignore=y STATISTICS=NONE > /日志文件.log 2>&1 & |
数据库文件的导入(Linux-->Windows):
今天想将正式库(Linux)的一个表的数据导入到我本机的Windows下,刚开始是使用Navicat的数据传输工具使用,无奈原表有将近40w的数据,这样传输真的太慢了,
还有可能是我的VPN会断掉,然后导入就失败了。然后下面演示的是,我从Linux将数据导入到我本地Oracle数据的过程:
1、新建文件并赋予权限
1 2 3 | touch /data/databackup/bjcczssy20221025.dmp touch /data/databackup/bjcczssy20221025.log chmod 777 /data/databackup/bjcczssy20221025.* |
2、从Linux数据库将这个表导出到服务器(多个表之间用逗号分割)
1 | nohup exp userid=bjcczssy/xxx@192.168.251.xx:1521/bjccora file=/data/databackup/bjcczssy20221025.dmp TABLES=\(T_MK_CMS_ARTICLE\) > /data/databackup/bjcczssy20221025.log 2>&1 & |
3、将dmp文件从服务器下载到本地Windows
4、本地Windows执行导入命令
1 | nohup imp bjccsy/xxx@127.0.0.1:1521/orcl file=E:\bjcczssy20221025.dmp FULL =Y ignore =y STATISTICS =NONE > E:\bjcczssy20220408.log 2>&1 & |
数据库文件的导入(Windows-->Linux):
1 2 3 4 5 | # Windows下备份Oracle数据库 exp userid=bjccsy/密码 @127 .0. 0.1 : 1521 /orcl file=I:\\ 2023 - 08 - 03 .dmp > I:\\ 2023 - 08 - 03 .log # 将备份数据导入到Linux-Oracle下 nohup imp bjccsy/密码 @127 .0. 0.1 : 1521 /orcl file=/ 2023 - 08 - 03 .dmp fromuser=bjccsy touser=bjccsy ignore=y > / 2023 - 08 - 03 .log 2 >& 1 & |
使用expdp排除导出指定表
1 2 3 4 5 6 7 8 9 10 | 1、创建Oracle备份文件存放目录 mkdir /oracle安装目录/expdp 2、登录数据库,创建逻辑目录 sqlplus / as sysdba create directory odir as '/u01/app/oracle/expdp' 3、为用户赋访问权限 grant all on directory odir to public ; 4、执行备份 expdp \'/ as sysdba\' directory=[逻辑目录名称] schemas=[用户名] dumpfile=[备份文件名] logfile=[日志文件名] EXCLUDE= TABLE :\" IN \(\'表1\',\'表2\'\)\" expdp \'/ as sysdba\' directory=odir schemas=bjcczg dumpfile=bjcczg20220921.dmp logfile=bjcczg20220921.log EXCLUDE= TABLE :\" IN \(\'T_LOG_SESSION\',\'T_LOG_VIDEOVISIT\'\)\" |
4、数据查询以及表空间扩容
1、查看并发连接数
1 | select machine,count(*) from gv$session group by machine; |
2、查看日志表空间的大小以及使用:
1 2 3 4 5 6 7 8 9 10 11 12 13 | SELECT a.tablespace_name "表空间名" , a.bytes / 1024 / 1024 "表空间大小(M)" , (a.bytes - b.bytes) / 1024 / 1024 "已使用空间(M)" , b.bytes / 1024 / 1024 "空闲空间(M)" , round(((a.bytes - b.bytes) / a.bytes) * 100, 2) "使用比" FROM (SELECT tablespace_name, sum(bytes) bytes FROM dba_data_files GROUP BY tablespace_name) a, (SELECT tablespace_name, sum(bytes) bytes, max(bytes) largest FROM dba_free_space GROUP BY tablespace_name) b WHERE a.tablespace_name = b.tablespace_name ORDER BY ((a.bytes - b.bytes) / a.bytes) DESC |
3、查看日志表空间目录:
1 2 3 4 5 6 | select tablespace_name, file_id, file_name, round(bytes / (1024 * 1024), 0) total_space from sys.dba_data_files order by tablespace_name |
4、查看日志表空间是否为自动扩展
1 2 3 4 5 | SELECT file_id, file_name, tablespace_name, autoextensible, increment_by FROM dba_data_files WHERE tablespace_name = 'USERS' or tablespace_name = 'SYSAUX' or tablespace_name = 'UNDOTBS1' ; ORDER BY file_id desc; |
5、扩容表空间大小(不需要手动创建文件)
1 | alter tablespace 用户名 add datafile '表空间全路径' size 30720m; |
例: alter tablespace USERS add datafile '/u01/app/app/oracle/oradata/orcl/users10.dbf' size 30720m;
6、设置表空间自动扩展
1 | alter database datafile '表空间全路径' autoextend on ; |
5、修改Oracle最大连接数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | --- 查看当前Oracle连接数 select count(*) from v$process; --- 连接到数据库的每台机器的会话数 select machine,count(*) from gv$session group by machine; --- 查询参数里限制的最大进程数 select value from v$parameter where name = 'processes' ; --- 设置最大连接数 alter system set processes = 3000 scope = spfile; alter system set sessions = 3000 scope = spfile; commit ; 重启Oracle数据库的操作步骤 1.查看监听器状态:lsnrctl status 2.停止监听器:lsnrctl stop 3.连接数据库:sqlplus sys/密码 as sysdba 4.停止数据库:shutdown immediate 5.启动数据库:startup 6.退出数据库:exit 7.启动监听:lsnrctl start 重新加载监听:lsnrctl reload(如果修改了listener.ora文件,可用此命令重新加载) |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话