Oracle 12c系列(一)|多租户容器数据库
sinye56 2024-10-10 10:53 5 浏览 0 评论
作者 杨禹航
出品 沃趣技术
Oracle 12.1发布至今已有多年,但国内Oracle 12C的用户并不多,随着12.2在去年的发布,选择安装Oracle 12c的客户量明显增加,在接下来的几年中,Oracle 12c将逐步得到普及。
目前关于12C新特性的文章很多,但大多都不成体系,本次的文章是一个非常完整、连贯的系列,将带你全面的从基础到深入全方位的理解Oracle 12C。
本篇为Oracle 12c系列的开篇文章《Oracle 12c系列(1)Multitenant Container》。
可插入数据库的概念
Oracle Multitenant Container Database(CDB),即多租户容器数据库,是Oracle 12C引入的特性,指的是可以容纳一个或者多个可插拔数据库的数据库,这个特性允许在CDB容器数据库中创建并且维护多个数据库,在CDB中创建的数据库被称为PDB,每个PDB在CDB中是相互独立存在的,在单独使用PDB时,与普通数据库无任何区别。
CDB根容器数据库的主要作用就是容纳所有相关的PDB的元数据,以及在CDB中对所有的PDB进行管理。
多租户环境的组成
ROOT
- Root容器数据库,是CDB环境中的根数据库,在根数据库中含有主数据字典视图,其中包含了与Root容器有关的元数据和CDB中所包含的所有的PDB信息。在CDB环境中被标识为CDB$ROOT,每个CDB环境中只能有一个Root容器数据库。
- CDB seedCDB seed为PDB的种子,其中提供了数据文件,在CDB环境中被标识为PDB$SEED,是创建新的 PDB的模板,你可以连接PDB$SEED,但是不能执行任何事物,因为PDB$SEED是只读的,不可进行修改。
- PDBsPDB数据库,在CDB环境中每个PDB都是独立存在的,与传统的Oracle数据库基本无差别,每个PDB拥有自己的数据文件和objects,唯一的区别在于PDB可以插入到CDB中,以及在CDB中拔出,并且在任何一个时间点之上PDB必须拔出或者插入到一个CDB中,当用户链接PDB时不会感觉到根容器和其他PDB的存在。
CDBwith PDBs
sys. ora12c>show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 ORA12CPDB READ WRITE NO
4 PDB2 MOUNTED
5 PDB1 MOUNTED
6 PDB3 READ WRITE NO
sys. ora12c>
PDB$SEED为CDB seed,ORA12CPDB/PDB1/PDB2/PDB3为PDB数据库。
Application Containers
在12cR2版本中,Oracle对多租户功能进行了增强,在CDB root容器中可以创建一个叫做Application root的容器,可在其内创建多个依赖于Application root的Application PDBs,架构图如下:
ApplicationContainers in a CDB
Application
更多的关于Application Containers相关内容请参考之前的ApplicationContainers系列:
《Oracle12cR2版本Application Containers特性(1)》
《Oracle12cR2版本Application Containers特性(2)》
《Oracle12cR2版本Application Containers特性(3)》
CDB环境中的用户
CDB环境中包含两类用户,公用用户和本地用户。
丨公用用户
公用用户是在root数据库中和所有的PDB数据库中都存在的用户,公用用户必须在根容器中创建,然后此用户会在所有的现存的PDB中自动创建,公用用户标识必须以c##或者C##开头,sys和system用户是Oracle在CDB环境中自动创建的公用用户。
create user c##yyh identified by yyh;
创建完成公用用户,需要为公用用户赋予所有可插拔数据库的权限,公用用户才可以访问其他PDB,如果在连接根容器时仅仅为公用用户赋予了相关权限,那么该权限不会被传递到所有的可插拔数据库中,必须为公用用户赋予能够传递到PDB中的权限,可以创建公用角色然后赋予公用用户,或者在为公共用户付权时指定子句container=ALL;
例如:
或者
grant dba to c##yyh container=all;
create role c##dbaprivs container=all;
grant dba to c##dbaprivs container=all;
grant c##dbaprivs to c##yyh container=all;
或者
grant dba to c##yyh container=all;
丨本地用户
本地用户指的是在PDB中创建的普通用户,只有在创建它的PDB中才会存在该用户,并且PDB中只能创建本地用户。
CDB中你需要再次了解的基础知识
丨SYSTEM/SYSAUX
在CDB的数据库环境中,SYSTEM/SYSAUX表空间并不是公用,CDB$ROOT以及每个PDB都拥有自己的SYSTEM和SYSAUX表空间。
丨REDO文件
在CDB环境中所有的PDB共用CDB$ROOT中的REDO文件,REDO中的条目标识REDO来自那个PDB。
在PDB中无法执行ALTERSYSTEM SWITCH LOGFILE命令,只有公用用户在ROOT容器中才可以执行该命令。
另外ALTER SYSTEM CHECKPOINT命令是可以在PDB中执行的。
丨归 档
在CDB环境中所有的PDB共用CDB的归档模式,以及归档文件,不可以单独为PDB设置自己的归档模式,只有特权用户连接根容器之后才可以启动归档模式。
丨UNDO MODE
在12.2之前的版本中,所有的PDB共用CDB$ROOT中的UNDO文件,在12.2之后的版本中UNDO的使用模式有两种:SHARED UNDO MODE和LOCAL UNDO MODE,顾名思义,LOCAL UNDO MODE就是每个PDB使用自己的UNDO表空间,但当PDB中没有自己的UNDO表空间时,会使用CDB$ROOT中的公共UNDO表空间。
查看UNDO表空间的使用模式(CDB$ROOT):
COL PROPERTY_NAME FOR A50
COL PROPERTY_VALUE FOR A50
COL DESCRIPTION FOR A50
SELECT property_name, property_value
FROM database_properties
WHERE property_name='LOCAL_UNDO_ENABLED';
PROPERTY_NAME PROPERTY_VALUE
-------------------- --------------------
LOCAL_UNDO_ENABLED TRUE
在创建CDB时使用了SHARED UNDO MODE方式,如果后续想更改为LOCAL UNDO MODE,我们可以使用如下命令更改UNDO MODE为LOCAL UNDO MODE:
startup upgrade
alter database local undo on;
shutdown immediate
startup
更改为local undo后CDB中的所有的PDB会自动创建自己的UNDO表空间。
丨临时文件
每个PDB都有自己的临时表空间,如果PDB没有自己的临时表空间文件,那么,PDB可以使用CDB$ROOT中的临时表空间。
08:42:46 sys. woqu>select con_id, tablespace_name from cdb_temp_files;
CON_ID TABLESPACE_NAME
---------- --------------------
1 TEMP
3 TEMP
Elapsed: 00:00:00.11
08:43:02 sys. woqu>
丨参数文件
参数文件中只记录了根容器的参数信息,没有记录PDB级别的参数信息,在根容器中修改初始化参数,会被继承到所有的PDB中,在PDB中修改参数后,PDB的参数会覆盖CDB级别的参数,PDB级别的参数记录在根容器的pdb_spfile$视图中,但并不是所有的参数都可以在PDB中修改,可以通过v$system_parameter视图查看PDB中可修改的参数:
SELECT name FROM v$system_parameter
WHERE ispdb_modifiable = 'TRUE'
ORDER BY name;
pdb_spfile$:
08:37:58 sys. yyh>show parameter open_cursors
NAME TYPE VALUE
------------------------------------ ----------- -----
open_cursors integer 999
08:38:04 sys. yyh>show parameter local_listener
NAME TYPE VALUE
------------------------------------ ----------- ----------------
local_listener string PDB_YYH
08:38:08 sys. yyh>select pdb_uid, name, value$ from pdb_spfile$;
PDB_UID NAME VALUE$
---------- ------------------ ------------------
1167267009 open_cursors 999
1167267009 local_listener 'PDB_YYH'
Elapsed: 00:00:00.00
08:38:11 sys. yyh>
这里在PDB:1167267009中更改了open_cursors/ local_listener两个参数。
丨控制文件
CDB环境中只有一组控制文件,所有的PDB共用这组公共的控制文件,从任何PDB中添加数据文件都会记录到公共控制文件当中,公用用户连接根容器时,可对控制文件进行管理。
20:51:03 sys. woqu>show parameter control_files
NAME TYPE VALUE
------------------------------------ -----------------------------------------
control_files string /u01/app/oracle/oradata/woqu/c
ontrol01.ctl, /u01/app/oracle/
oradata/woqu/control02.ctl
20:51:06 sys. woqu>
20:50:55 sys. woqupdb>show parameter control_files
NAME TYPE VALUE
------------------------------------ -----------------------------------------
control_files string /u01/app/oracle/oradata/woqu/c
ontrol01.ctl,/u01/app/oracle/
oradata/woqu/control02.ctl
20:51:23 sys.woqupdb>
丨告警日志以及跟踪文件
在CDB中所有的PDB共用一个告警日志和一组跟踪文件,所有的PDB告警信息都会写入同一个告警日志中。
丨时区
在CDB环境中可以为CDB以及所有的PDB设置相同的时区,也可以为每个PDB设置单独的时区。
20:51:50 sys. woqu>show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 WOQUPDB READ WRITE NO
20:52:00 sys. woqu>select dbtimezone from dual;
DBTIME
------
+00:00
Elapsed: 00:00:00.00
20:52:01 sys. woqu>
20:51:53 sys. woqupdb>select dbtimezone from dual;
DBTIME
------
+08:00
Elapsed: 00:00:00.00
20:52:02 sys. woqupdb>
丨字符集
在CDB中定义字符集也可以应用于它所含有的PDB中,每个PDB也可以有自己的字符集设置。
20:52:33 sys. woqu>SELECT a.value || '_' || b.value || '.'|| c.value NLS_LANG
20:52:33 2 FROM nls_database_parameters a,nls_database_parameters b, nls_database_parameters c
20:52:33 3 WHERE a.parameter = 'NLS_LANGUAGE' ANDb.parameter = 'NLS_TERRITORY' AND c.parameter = 'NLS_CHARACTERSET';
NLS_LANG
----------------------------------------
AMERICAN_AMERICA.AL32UTF8
Elapsed: 00:00:00.06
20:52:33 sys. woqu>20:52:33 sys. woqu>
20:52:36 sys. woqupdb>SELECT a.value || '_' || b.value || '.'|| c.value NLS_LANG
20:52:36 2 FROM nls_database_parameters a,nls_database_parameters b, nls_database_parameters c
20:52:36 3 WHERE a.parameter = 'NLS_LANGUAGE' ANDb.parameter = 'NLS_TERRITORY' AND c.parameter = 'NLS_CHARACTERSET';
NLS_LANG
----------------------------------------
AMERICAN_AMERICA.ZHS16GBK
Elapsed: 00:00:00.08
20:52:36 sys. woqupdb>20:52:36 sys. woqupdb>
丨数据字典视图与动态性能视图
在CDB环境中引入了CDB级别的数据字典视图,它的级别高于DBA_/ALL_/USER_,CDB级别的数据字典视图含有所有PDB的元数据信息,其中增加了con_id列,con_id为CDB中所有容器唯一标识符,其中con_id为0的是CDB$ROOT,con_id为2的是PDB$SEED,每个PDB在CDB中都会分配一个唯一的con_id。如果要想查看CDB级别的数据字典视图,必须使用公用用户在跟容器中查看,并且要查看的PDB必须处于open状态,才可以看到PDB中的信息。
20:53:42 sys. woqu>showpdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 WOQUPDB READ WRITE NO
20:53:45 sys. woqu>
20:54:40 sys. woqu>select con_id, pdb_id, pdb_name, dbid, status fromcdb_pdbs;
CON_ID PDB_ID PDB_NAME DBID STATUS
---------- --------- ------------------------------ --------------
2 2 PDB$SEED 2834527297 NORMAL
3 3 WOQUPDB 3238406520 NORMAL
20:54:43 sys. woqu>
CDB的创建
如果要使用可插拔数据库的功能,需要在创建数据库时专门指定启用可插拔数据库,创建CDB通常有如下两种方式:
- 使用DBCA图形工具创建CDB这里需要注意的是Oracle 12.2之后支持LOCAL UNDO,这里注意需要手动要勾选LOCAL UNDO选项。
- CREATE DATABASE语句创建CDB在使用脚本创建CDB时Oracle提供了两种方法,一种是使用OMF,另外一种是非OMF的方式,注意参数文件中需要将ENABLE_PLUGGABLE_DATABASE设置为TRUE。
这里演示使用非OMF方式创建CDB,数据名称为ora12c:
1.设置ENABLE_PLUGGABLE_DATABASE参数为TRUE,参数文件如下:
audit_file_dest='/u01/app/oracle/admin/ora12c/adump'
audit_trail='none'
compatible='12.2.0'
control_files='/u01/app/oracle/oradata/ora12c/control01.ctl','
/u01/app/oracle/oradata/ora12c/control02.ctl'
db_block_size=8192
db_domain='linux.com'
db_name='ora12c'
diagnostic_dest='/u01/app/oracle'
enable_pluggable_database=true
memory_target=801m
nls_language='AMERICAN'
nls_territory='AMERICA'
remote_login_passwordfile='EXCLUSIVE'
undo_tablespace='UNDOTBS1'
2.创建相应目录以及设置环境变量
export ORACLE_SID=ora12c
export ORACLE_HOME=$ORACLE_BASE/product/12.2.0/dbhome_1
export PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$ORACLE_HOME/perl/bin:$ORACLE_HOME/jdk/bin:$PATH
3.CREATE DATABASE脚本createdb.sql如下:
CREATE DATABASE ora12c
USER SYS IDENTIFIED BY oracle
USER SYSTEM IDENTIFIED BY oracle
LOGFILE GROUP 1('/u01/app/oracle/oradata/ora12c/redo01a.log','/u01/app/oracle/oradata/ora12c/redo01b.log')
SIZE 100M BLOCKSIZE 512,
GROUP 2('/u01/app/oracle/oradata/ora12c/redo02a.log','/u01/app/oracle/oradata/ora12c/redo02b.log')
SIZE 100M BLOCKSIZE 512,
GROUP 3('/u01/app/oracle/oradata/ora12c/redo03a.log','/u01/app/oracle/oradata/ora12c/redo03b.log')
SIZE 100M BLOCKSIZE 512
MAXLOGHISTORY 1
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 1024
CHARACTER SET AL32UTF8
NATIONAL CHARACTER SET AL16UTF16
EXTENT MANAGEMENT LOCAL
DATAFILE '/u01/app/oracle/oradata/ora12c/system01.dbf'
SIZE 700M REUSE AUTOEXTEND ON NEXT10240K MAXSIZE UNLIMITED
SYSAUX DATAFILE '/u01/app/oracle/oradata/ora12c/sysaux01.dbf'
SIZE 550M REUSE AUTOEXTEND ON NEXT10240K MAXSIZE UNLIMITED
DEFAULT TABLESPACE deftbs
DATAFILE'/u01/app/oracle/oradata/ora12c/deftbs01.dbf'
SIZE 500M REUSE AUTOEXTEND ONMAXSIZE UNLIMITED
DEFAULT TEMPORARY TABLESPACE tempts1
TEMPFILE '/u01/app/oracle/oradata/ora12c/temp01.dbf'
SIZE 20M REUSE AUTOEXTEND ON NEXT640K MAXSIZE UNLIMITED
UNDO TABLESPACE undotbs1
DATAFILE'/u01/app/oracle/oradata/ora12c/undotbs01.dbf'
SIZE 200M REUSE AUTOEXTEND ONNEXT 5120K MAXSIZE UNLIMITED
ENABLE PLUGGABLE DATABASE
SEED
FILE_NAME_CONVERT =('/u01/app/oracle/oradata/ora12c/',
'/u01/app/oracle/oradata/ora12c/pdbseed/')
SYSTEM DATAFILES SIZE 125MAUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED
SYSAUX DATAFILES SIZE 100M
USER_DATA TABLESPACE usertbs
DATAFILE'/u01/app/oracle/oradata/ora12c/pdbseed/usertbs01.dbf'
SIZE 200M REUSE AUTOEXTEND ONMAXSIZE UNLIMITED;
这段代码中"ENABLE PLUGGABLE DATABASE"之后部分与PDB有关,其他部分与创建传统的Oracle数据库语句均相同。
FILE_NAME_CONVERT
子句指定了使用'/u01/app/oracle/oradata/ora12c/'中的文件名在'/u01/app/oracle/oradata/ora12c/pdbseed/'中生产CDBseeds。
USER_DATA_TABLESPACE
子句可以在容器中创建额外的表空间,这个表空间在后续使用PDB$SEED创建PDB时会被复制到PDB中。
4.将数据库启动到nomount状态,然后执行上面createdb.sql脚本创建CDB
startup nomount;
@createdb.sql
当数据库创建成功之后可以看到新建立的数据库被加入到/etc/oratab文件中。
#cat/etc/oratab
+ASM:/u01/app/11.2.0/grid:N
ora12c:/u01/app/oracle/product/12.2.0/dbhome_1:N
orcl:/u01/app/oracle/product/11.2.0/dbhome_1:N # line added by Agent
newdb:/u01/app/oracle/product/12.2.0/dbhome_1:N
yyh:/u01/app/oracle/product/12.2.0/dbhome_1:N
5.查看监听,根容器的服务ora12c.linux.com已经被注册到监听中。
Service"ora12c.linux.com" has 1 instance(s).
Instance "ora12c", status READY,has 1 handler(s) for this service...
6.运行catcdb.sql脚本创建CDB相关视图:
@?/rdbms/admin/catcdb.sql
注意事项:
1.在catcdb.pl执行过中需要输入两个参数,文档中并没有指出是什么参数.
第一个参数应输入:
$ORACLE_HOME/rdbms/admin
第二个参数应输入:
catcdb.pl
2.环境变量中必须将$ORACLE_HOME/perl/bin指定到PATH中,否则报如下错误:
Can'tlocate Term/ReadKey.pm
3.需要将$ORACLE_HOME/perl/lib/5.22.0/x86_64-linux-thread-multi/Hash中的catcdb.pl文件内容:
use Data::Dumper;
use util qw(trim, splitToArray);
use catcon qw(catconSqlplus);
更改为
use Data::Dumper;
use Utilqw(trim, splitToArray);
use catcon qw(catconSqlplus);
4.切换到$ORACLE_HOME/perl/lib/5.22.0/x86_64-linux-thread-multi/Hash目录中,然后sqlplus连接到数据,在执行catcdb.sql,否则报如下错误:
Can'tlocate Util.pm
7.开启localundo mode(因为上面再创建CDB时没有加入localundo mode子句)
sys. ora12c>shutdown immediate
sys. ora12c>startup upgrade
sys. ora12c>alter database local undo on;
Database altered.
Elapsed: 00:00:00.72
查看是否为local undo mode:
SELECT property_name, property_value
FROM database_properties
WHERE property_name='LOCAL_UNDO_ENABLED';
PROPERTY_NAME PROPERTY_VALUE
-------------------- --------------------
LOCAL_UNDO_ENABLED TRUE
Elapsed: 00:00:00.02
sys. ora12c>
重启数据库:
shutdown immediate
startup
启动数据库的过程中会在PDB$SEED中自动创建UNDO表空间,提供给后来采用PDB$SEED方式创建PDB所使用。
PS:如果CDB中已经存在多个PDB,当在根容器中使用alter database local undo on;开启local undo mode时会自动为每个PDB创建local undo。
8.检查CDB是否已经创建成功
sys. ora12c>SELECT dbid, name, open_mode, cdb, con_id FROM v$database;
DBID NAME OPEN_MODE CDB CON_ID
---------- --------- -------------------- --- ----------
323027068 ORA12C READ WRITE YES 0
Elapsed: 00:00:00.11
sys. ora12c>
此时CDB中含有两个容器:根容器CDB$ROOT和种子容器PDB$SEED,如下:
sys. ora12c>SELECT con_id, dbid, con_uid, guid, name FROM v$containers;
CON_ID DBID CON_UID GUID NAME
------ ---------- ---------- --------------------------------- ----------
1 323027068 150A57CDEFD150C96E0530838A8C0206E CDB$ROOT
2 1453953285 145395328550A57CDEFD160C96E0530838A8C0206E PDB$SEED
Elapsed: 00:00:00.00
sys. ora12c>SELECT con_id, tablespace_name, file_id, file_name
FROM cdb_data_files;
CON_ID TABLESPACE_NAME FILE_ID FILE_NAME
------ --------------- ---------------------------------------------------
1 SYSTEM 1/u01/app/oracle/oradata/ora12c/system01.dbf
1 SYSAUX 3/u01/app/oracle/oradata/ora12c/sysaux01.dbf
1 UNDOTBS1 5/u01/app/oracle/oradata/ora12c/undotbs01.dbf
1 DEFTBS 6/u01/app/oracle/oradata/ora12c/deftbs01.dbf
Elapsed: 00:00:00.01
sys. ora12c>show con_id con_name user
CON_ID
------------------------------
1
CON_NAME
------------------------------
CDB$ROOT
USER is "SYS"
sys. ora12c>
CDB的管理
管理CDB时,通常需要使用sys用户连接根容器数据库,在操作方式上与非CDB数据库同样。
当前连接容器的信息:
1.
23:03:31 sys. woqu>show con_id con_name user
CON_ID
------------------------------
1
CON_NAME
------------------------------
CDB$ROOT
USER is "SYS"
23:03:33 sys. woqu>
2.
COL CON_ID FOR A10
COL CUR_CONTAINER FOR A25
COL CUR_USER FOR A25
SELECT
sys_context('USERENV','CON_ID')con_id,
sys_context('USERENV','CON_NAME') cur_container,
sys_context('USERENV','session_user') cur_user
FROM dual;
CON_ID CUR_CONTAINER CUR_USER
---------- ------------------------- -------------------------
1 CDB$ROOT SYS
丨启动和停止CDB
只有公用用户才可以连接根容器,并且启动和停止CDB,停止和启动与普通数据库的处理过程相同,当公用用户连接PDB时,无法启动和停止CDB:
sys. ora12c>startup
默认情况下启动CDB时不会自动启动PDBs,我们可以使用手工的方式启动PDB:
ALTER PLUGGABLE DATABASE [pdb_name] OPEN;
ALTER PLUGGABLE DATABASE ALL OPEN; --打开所有PDB
sys. ora12c>shutdown immediate
在关闭CDB时,CDB中正在运行PDSs会也会关闭,连接CDB与PDBs的session均会断开。
查看CDB环境中表空间使用情况:
with generator0 as
(select cf.con_id,cf.tablespace_name, sum(cf.bytes) / 1024 / 1024 frm
from cdb_free_space cf
group by cf.con_id,cf.tablespace_name),
generator1 as
(select cd.con_id,cd.tablespace_name, sum(cd.bytes) / 1024 / 1024 usm
from cdb_data_files cd
group by cd.con_id,cd.tablespace_name),
generator2 as(
select g0.con_id, c.name con_name, g0.tablespace_name, g0.frm, g1.usm
from generator0 g0, generator1 g1,v$containers c
where g0.con_id = g1.con_id
and g0.tablespace_name =g1.tablespace_name
and c.con_id = g1.con_id
union
select c.con_id,
c.name,
ct.tablespace_name,
null,
sum(ct.bytes) / 1024 / 1024
from v$containers c,cdb_temp_files ct
where c.con_id = ct.con_id
group by c.con_id, c.name,ct.tablespace_name)
select con_id,
case when con_name = LAG(con_name, 1) OVER(PARTITION BY con_name ORDER BYtablespace_name) THEN null ELSE con_name END
con_name, tablespace_name, frm freemb, usm usemb
from generator2
order by con_id;
CON_ID CON_NAME TABLESPACE_NAME FREEMB USEMB
------ ------------ --------------- ---------- ----------
1 CDB$ROOT SYSAUX 28 470
1 SYSTEM 6.5625 810
1 TEMP 33
1 UNDOTBS1 1.9375 60
1 USERS 4 5
3 ORA12CPDB SYSAUX 18.125 360
3 SYSTEM 1.25 250
3 TEMP 64
3 UNDOTBS1 33 100
3 USERS 4 5
丨切换容器
使用公用用户连接CDB后可以使用alter session的方式切换不同的容器:
alter session set container=pdb1;
alter session set container = cdb$root;
在切换容器时无需运行监听器和密码文件。只要公用用户拥有相关权限就可以切换到另外的容器中。
相关推荐
- CTO偷偷传我的系统性能优化十大绝招(万字干货)
-
上篇引言:取与舍软件设计开发某种意义上是“取”与“舍”的艺术。关于性能方面,就像建筑设计成抗震9度需要额外的成本一样,高性能软件系统也意味着更高的实现成本,有时候与其他质量属性甚至会冲突,比如安全性、...
- 提升效率!VMware虚拟机性能优化十大实用技巧
-
我40岁,干跨境婚恋中介的。为服务各国用户,常得弄英语、日语、俄语系统环境,VMware虚拟机帮了不少忙。用久了发现优化下性能,效率能更高。今儿就来聊聊优化技巧和同类软件。一、VMware虚拟...
- 低延迟场景下的性能优化实践
-
本文摘录自「全球C++及系统软件技术大会」ScottMeyers曾说到过,如果你不在乎性能,为什么要在C++这里,而不去隔壁的Pythonroom呢?今天我们就从“低延迟的概述”、“低延迟系...
- Linux性能调优之内存负载调优的一些笔记
-
写在前面整理一些Linux内存调优的笔记,分享给小伙伴博文没有涉及的Demo,理论方法偏多,可以用作内存调优入门博文内容涉及:Linux内存管理的基本理论寻找内存泄露的进程内存交换空间调优不同方式的...
- 优化性能套路:带你战胜这只后段程序员的拦路虎
-
来源|极客时间《卖桃者说》作者|池建强编辑|成敏你好,这里是卖桃者说。今天给大家推荐一篇文章,来自倪朋飞老师的专栏《Linux性能优化实战》,文章主要讲的是优化性能的套路,这几乎是每个后端程序员...
- SK海力士CXL优化解决方案已成功搭载于Linux:带宽提升30%,性能提升12%以上
-
SK海力士宣布,已将用于优化CXL(ComputeExpressLink)存储器运行的自研软件异构存储器软件开发套件(HMSDK)中主要功能成功搭载于全球最大的开源操作系统Linux上,不但提升了...
- Linux内核优化:提升系统性能的秘诀
-
Linux内核优化:提升系统性能的艺术在深入Linux内核优化的世界之前,让我们先来理解一下内核优化的重要性。Linux内核是操作系统的核心,负责管理系统资源和控制硬件。一个经过精心优化的内核可以显著...
- Linux系统性能优化:七个实战经验
-
Linux系统的性能是指操作系统完成任务的有效性、稳定性和响应速度。Linux系统管理员可能经常会遇到系统不稳定、响应速度慢等问题,例如在Linux上搭建了一个web服务,经常出现网页无法打开、打开速...
- 腾讯面试:linux内存性能优化总结
-
【1】内存映射Linux内核给每个进程都提供了一个独立且连续的虚拟地址空间,以便进程可以方便地访问虚拟内存;虚拟地址空间的内部又被分为内核空间和用户空间两部分,不同字长的处理器,地址空间的范围也不同...
- Linux文件系统性能调优《参数优化详解》
-
由于各种的I/O负载情形各异,Linux系统中文件系统的缺省配置一般来说都比较中庸,强调普遍适用性。然而在特定应用下,这种配置往往在I/O性能方面不能达到最优。因此,如果应用对I/O性能要求较高,除...
- Nginx 性能优化(吐血总结)
-
一、性能优化考虑点当我需要进行性能优化时,说明我们服务器无法满足日益增长的业务。性能优化是一个比较大的课题,需要从以下几个方面进行探讨当前系统结构瓶颈了解业务模式性能与安全1、当前系统结构瓶颈首先需要...
- Linux问题分析与性能优化
-
排查顺序整体情况:top/htop/atop命令查看进程/线程、CPU、内存使用情况,CPU使用情况;dstat2查看CPU、磁盘IO、网络IO、换页、中断、切换,系统I/O状态;vmstat2查...
- 大神级产品:手机装 Linux 运行 Docker 如此简单
-
本内容来源于@什么值得买APP,观点仅代表作者本人|作者:灵昱Termux作为一个强大的Android终端模拟器,能够运行多种Linux环境。然而,直接在Termux上运行Docker并不可行,需要...
- 新手必须掌握的Linux命令
-
Shell就是终端程序的统称,它充当了人与内核(硬件)之间的翻译官,用户把一些命令“告诉”终端程序,它就会调用相应的程序服务去完成某些工作。现在包括红帽系统在内的许多主流Linux系统默认使用的终端是...
- Linux 系统常用的 30 个系统环境变量全解析
-
在Linux系统中,环境变量起着至关重要的作用,它们犹如隐藏在系统背后的“魔法指令”,掌控着诸多程序的运行路径、配置信息等关键要素。尤其在shell脚本编写时,巧妙运用环境变量,能让脚本如虎...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- oracle忘记用户名密码 (59)
- oracle11gr2安装教程 (55)
- mybatis调用oracle存储过程 (67)
- oracle spool的用法 (57)
- oracle asm 磁盘管理 (67)
- 前端 设计模式 (64)
- 前端面试vue (56)
- linux格式化 (55)
- linux图形界面 (62)
- linux文件压缩 (75)
- Linux设置权限 (53)
- linux服务器配置 (62)
- mysql安装linux (71)
- linux启动命令 (59)
- 查看linux磁盘 (72)
- linux用户组 (74)
- linux多线程 (70)
- linux设备驱动 (53)
- linux自启动 (59)
- linux网络命令 (55)
- linux传文件 (60)
- linux打包文件 (58)
- linux查看数据库 (61)
- linux获取ip (64)
- linux进程通信 (63)