在我的ASM单实例的测试环境中,在启动ASM的时候遇到如下提示:
ORA-29701: unable to connect to Cluster Synchronization Service
笔者这里有2台ASM单实例的环境,一台是linux suse sp11,另一台是oracle linux 6.4,2台电脑启动ASM实例都有这样的错误。请看如下详细:
Linux SUSE 环境和Oracle Liunx 环境都遇到如下错误:
PgSQL
grid@linux-7ff2:~> sqlplus / as sysasm
SQL*Plus: Release 11.2.0.3.0 Production on Sat Nov 30 07:34:55 2013
Copyright (c) 1982, 2011, Oracle. All rights reserved.
Connected to an idle instance.
SQL> startup
ORA-01078: failure in processing system parameters
ORA-29701: unable to connect to Cluster Synchronization Service
1
2
3
4
5
6
7
8
9
10
11
grid@linux-7ff2:~>sqlplus/assysasm
SQL*Plus:Release11.2.0.3.0ProductiononSatNov3007:34:552013
Copyright(c)1982,2011,Oracle.Allrightsreserved.
Connectedtoanidleinstance.
SQL>startup
ORA-01078:failureinprocessingsystemparameters
ORA-29701:unabletoconnecttoClusterSynchronizationService
错误中提示没有连接到CSS服务,随即检查2个环境的CSS服务
Linux Suse环境:
PgSQL
grid@linux-7ff2:~> crsctl check css
CRS-4530: Communications failure contacting Cluster Synchronization Services daemon
grid@linux-7ff2:~> ps -ef | grep cssd
grid 4387 4319 0 07:40 pts/0 00:00:00 grep cssd
1
2
3
4
grid@linux-7ff2:~>crsctlcheckcss
CRS-4530:CommunicationsfailurecontactingClusterSynchronizationServicesdaemon
grid@linux-7ff2:~>ps-ef|grepcssd
grid43874319007:40pts/000:00:00grepcssd
Oracle Linux 环境:
PgSQL
[grid@oraasm ~]$ crsctl check css
CRS-4530: Communications failure contacting Cluster Synchronization Services daemon
[grid@oraasm ~]$ ps -ef | grep cssd
grid 42583 40547 0 20:41 pts/1 00:00:00 grep cssd
1
2
3
4
[grid@oraasm~]$crsctlcheckcss
CRS-4530:CommunicationsfailurecontactingClusterSynchronizationServicesdaemon
[grid@oraasm~]$ps-ef|grepcssd
grid4258340547020:41pts/100:00:00grepcssd
发现2个环境的CSS服务都没有启动,随后怀疑是启动文件中没有配置:
Linux Suse环境:在suse环境中已经配置
PgSQL
# modem getty.
# mo:235:respawn:/usr/sbin/mgetty -s 38400 modem
# fax getty (hylafax)
# mo:35:respawn:/usr/lib/fax/faxgetty /dev/modem
# vbox (voice box) getty
# I6:35:respawn:/usr/sbin/vboxgetty -d /dev/ttyI6
# I7:35:respawn:/usr/sbin/vboxgetty -d /dev/ttyI7
# end of /etc/inittab
h1:35:respawn:/etc/init.d/init.ohasd run >/dev/null 2>&1
1
2
3
4
5
6
7
8
9
10
11
12
13
#modemgetty.
#mo:235:respawn:/usr/sbin/mgetty-s38400modem
#faxgetty(hylafax)
#mo:35:respawn:/usr/lib/fax/faxgetty/dev/modem
#vbox(voicebox)getty
#I6:35:respawn:/usr/sbin/vboxgetty-d/dev/ttyI6
#I7:35:respawn:/usr/sbin/vboxgetty-d/dev/ttyI7
#endof/etc/inittab
h1:35:respawn:/etc/init.d/init.ohasdrun>/dev/null2>&1
Oracle Linux环境:此环境没有配置自启动
PgSQL
[root@oraasm ~]# cat /etc/inittab
# inittab is only used by upstart for the default runlevel.
#
# ADDING OTHER CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
#
# System initialization is started by /etc/init/rcS.conf
#
# Individual runlevels are started by /etc/init/rc.conf
#
# Ctrl-Alt-Delete is handled by /etc/init/control-alt-delete.conf
#
# Terminal gettys are handled by /etc/init/tty.conf and /etc/init/serial.conf,
# with configuration in /etc/sysconfig/init.
#
# For information on how to write upstart event handlers, or how
# upstart works, see init(5), init(8), and initctl(8).
#
# Default runlevel. The runlevels used are:
# 0 - halt (Do NOT set initdefault to this)
# 1 - Single user mode
# 2 - Multiuser, without NFS (The same as 3, if you do not have networking)
# 3 - Full multiuser mode
# 4 - unused
# 5 - X11
# 6 - reboot (Do NOT set initdefault to this)
#
id:5:initdefault:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
[root@oraasm~]#cat/etc/inittab
#inittabisonlyusedbyupstartforthedefaultrunlevel.
#
#ADDINGOTHERCONFIGURATIONHEREWILLHAVENOEFFECTONYOURSYSTEM.
#
#Systeminitializationisstartedby/etc/init/rcS.conf
#
#Individualrunlevelsarestartedby/etc/init/rc.conf
#
#Ctrl-Alt-Deleteishandledby/etc/init/control-alt-delete.conf
#
#Terminalgettysarehandledby/etc/init/tty.confand/etc/init/serial.conf,
#withconfigurationin/etc/sysconfig/init.
#
#Forinformationonhowtowriteupstarteventhandlers,orhow
#upstartworks,seeinit(5),init(8),andinitctl(8).
#
#Defaultrunlevel.Therunlevelsusedare:
#0-halt(DoNOTsetinitdefaulttothis)
#1-Singleusermode
#2-Multiuser,withoutNFS(Thesameas3,ifyoudonothavenetworking)
#3-Fullmultiusermode
#4-unused
#5-X11
#6-reboot(DoNOTsetinitdefaulttothis)
#
id:5:initdefault:
发现如上差异,检查2个环境中的HAS服务是否正常,因为CSS服务需要依赖于HAS维护
Linux Suse环境:
PgSQL
grid@linux-7ff2:~> crsctl check has
CRS-4638: Oracle High Availability Services is online
grid@linux-7ff2:~> ps -ef|grep ohasd.bin
grid 3476 1 0 07:29 ? 00:00:04 /opt/grid/11.2/bin/ohasd.bin reboot
grid 4746 4417 0 07:47 pts/0 00:00:00 grep ohasd.bin
1
2
3
4
5
grid@linux-7ff2:~>crsctlcheckhas
CRS-4638:OracleHighAvailabilityServicesisonline
grid@linux-7ff2:~>ps-ef|grepohasd.bin
grid34761007:29?00:00:04/opt/grid/11.2/bin/ohasd.binreboot
grid47464417007:47pts/000:00:00grepohasd.bin
Oracle Linux环境:
PgSQL
[grid@oraasm ~]$ crsctl check has
CRS-4638: Oracle High Availability Services is online
[grid@oraasm ~]$ ps -ef|grep ohasd.bin
grid 1856 1 0 20:30 ? 00:00:04 /opt/grid/11.2/bin/ohasd.bin reboot
grid 33167 62171 0 20:47 pts/1 00:00:00 grep ohasd.bin
[grid@oraasm ~]$
1
2
3
4
5
6
[grid@oraasm~]$crsctlcheckhas
CRS-4638:OracleHighAvailabilityServicesisonline
[grid@oraasm~]$ps-ef|grepohasd.bin
grid18561020:30?00:00:04/opt/grid/11.2/bin/ohasd.binreboot
grid3316762171020:47pts/100:00:00grepohasd.bin
[grid@oraasm~]$
发现2个环境中的HAS服务都是正常的,然后看一下CSS服务和守护进程的自启动属性
Linux Suse 环境:
PgSQL
grid@linux-7ff2:~> crs_stat -p ora.cssd
NAME=ora.cssd
TYPE=ora.cssd.type
ACTION_SCRIPT=
ACTIVE_PLACEMENT=0
AUTO_START=never
CHECK_INTERVAL=30
DESCRIPTION="Resource type for CSSD"
FAILOVER_DELAY=0
FAILURE_INTERVAL=3
FAILURE_THRESHOLD=5
HOSTING_MEMBERS=
PLACEMENT=balanced
RESTART_ATTEMPTS=5
SCRIPT_TIMEOUT=600
START_TIMEOUT=600
STOP_TIMEOUT=900
UPTIME_THRESHOLD=1m
grid@linux-7ff2:~> crs_stat -p ora.diskmon
NAME=ora.diskmon
TYPE=ora.diskmon.type
ACTION_SCRIPT=
ACTIVE_PLACEMENT=0
AUTO_START=never
CHECK_INTERVAL=3
DESCRIPTION="Resource type for Diskmon"
FAILOVER_DELAY=0
FAILURE_INTERVAL=3
FAILURE_THRESHOLD=5
HOSTING_MEMBERS=
PLACEMENT=balanced
RESTART_ATTEMPTS=10
SCRIPT_TIMEOUT=60
START_TIMEOUT=600
STOP_TIMEOUT=60
UPTIME_THRESHOLD=5s
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
grid@linux-7ff2:~>crs_stat-pora.cssd
NAME=ora.cssd
TYPE=ora.cssd.type
ACTION_SCRIPT=
ACTIVE_PLACEMENT=0
AUTO_START=never
CHECK_INTERVAL=30
DESCRIPTION="Resource type for CSSD"
FAILOVER_DELAY=0
FAILURE_INTERVAL=3
FAILURE_THRESHOLD=5
HOSTING_MEMBERS=
PLACEMENT=balanced
RESTART_ATTEMPTS=5
SCRIPT_TIMEOUT=600
START_TIMEOUT=600
STOP_TIMEOUT=900
UPTIME_THRESHOLD=1m
grid@linux-7ff2:~>crs_stat-pora.diskmon
NAME=ora.diskmon
TYPE=ora.diskmon.type
ACTION_SCRIPT=
ACTIVE_PLACEMENT=0
AUTO_START=never
CHECK_INTERVAL=3
DESCRIPTION="Resource type for Diskmon"
FAILOVER_DELAY=0
FAILURE_INTERVAL=3
FAILURE_THRESHOLD=5
HOSTING_MEMBERS=
PLACEMENT=balanced
RESTART_ATTEMPTS=10
SCRIPT_TIMEOUT=60
START_TIMEOUT=600
STOP_TIMEOUT=60
UPTIME_THRESHOLD=5s
Oracle Linux环境:
PgSQL
[grid@oraasm ~]$ crs_stat -p ora.cssd
NAME=ora.cssd
TYPE=ora.cssd.type
ACTION_SCRIPT=
ACTIVE_PLACEMENT=0
AUTO_START=never
CHECK_INTERVAL=30
DESCRIPTION="Resource type for CSSD"
FAILOVER_DELAY=0
FAILURE_INTERVAL=3
FAILURE_THRESHOLD=5
HOSTING_MEMBERS=
PLACEMENT=balanced
RESTART_ATTEMPTS=5
SCRIPT_TIMEOUT=600
START_TIMEOUT=600
STOP_TIMEOUT=900
UPTIME_THRESHOLD=1m
[grid@oraasm ~]$ crs_stat -p ora.diskmon
NAME=ora.diskmon
TYPE=ora.diskmon.type
ACTION_SCRIPT=
ACTIVE_PLACEMENT=0
AUTO_START=never
CHECK_INTERVAL=3
DESCRIPTION="Resource type for Diskmon"
FAILOVER_DELAY=0
FAILURE_INTERVAL=3
FAILURE_THRESHOLD=5
HOSTING_MEMBERS=
PLACEMENT=balanced
RESTART_ATTEMPTS=10
SCRIPT_TIMEOUT=60
START_TIMEOUT=600
STOP_TIMEOUT=60
UPTIME_THRESHOLD=5s
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
[grid@oraasm~]$crs_stat-pora.cssd
NAME=ora.cssd
TYPE=ora.cssd.type
ACTION_SCRIPT=
ACTIVE_PLACEMENT=0
AUTO_START=never
CHECK_INTERVAL=30
DESCRIPTION="Resource type for CSSD"
FAILOVER_DELAY=0
FAILURE_INTERVAL=3
FAILURE_THRESHOLD=5
HOSTING_MEMBERS=
PLACEMENT=balanced
RESTART_ATTEMPTS=5
SCRIPT_TIMEOUT=600
START_TIMEOUT=600
STOP_TIMEOUT=900
UPTIME_THRESHOLD=1m
[grid@oraasm~]$crs_stat-pora.diskmon
NAME=ora.diskmon
TYPE=ora.diskmon.type
ACTION_SCRIPT=
ACTIVE_PLACEMENT=0
AUTO_START=never
CHECK_INTERVAL=3
DESCRIPTION="Resource type for Diskmon"
FAILOVER_DELAY=0
FAILURE_INTERVAL=3
FAILURE_THRESHOLD=5
HOSTING_MEMBERS=
PLACEMENT=balanced
RESTART_ATTEMPTS=10
SCRIPT_TIMEOUT=60
START_TIMEOUT=600
STOP_TIMEOUT=60
UPTIME_THRESHOLD=5s
可以看到2个环境中的AUTO_START=never属性,都是从不启动。说明并不会随着HAS的启动而启动CSS进程,这里我们可以手动启动CSS进程,我们先只在Linux Suse环境中手动启动这个进程,而Oracle Linux环境,我们修改配置文件,然后重启
Linux Suse环境:
PgSQL
grid@linux-7ff2:~> crsctl start resource ora.cssd
CRS-2672: Attempting to start 'ora.cssd' on 'linux-7ff2'
CRS-2672: Attempting to start 'ora.diskmon' on 'linux-7ff2'
CRS-2676: Start of 'ora.diskmon' on 'linux-7ff2' succeeded
CRS-2676: Start of 'ora.cssd' on 'linux-7ff2' succeeded
1
2
3
4
5
grid@linux-7ff2:~>crsctlstartresourceora.cssd
CRS-2672:Attemptingtostart'ora.cssd'on'linux-7ff2'
CRS-2672:Attemptingtostart'ora.diskmon'on'linux-7ff2'
CRS-2676:Startof'ora.diskmon'on'linux-7ff2'succeeded
CRS-2676:Startof'ora.cssd'on'linux-7ff2'succeeded
检查Linux Suse环境中的css服务:
PgSQL
grid@linux-7ff2:~> crsctl check css
CRS-4529: Cluster Synchronization Services is online
grid@linux-7ff2:~> crs_stat -t
Name Type Target State Host
------------------------------------------------------------
ora.DATA.dg ora....up.type OFFLINE OFFLINE
ora.asm ora.asm.type OFFLINE OFFLINE
ora.cssd ora.cssd.type ONLINE ONLINE linux-7ff2
ora.diskmon ora....on.type OFFLINE OFFLINE
ora.evmd ora.evm.type ONLINE ONLINE linux-7ff2
ora.ons ora.ons.type OFFLINE OFFLINE
ora.orcl.db ora....se.type OFFLINE OFFLINE
1
2
3
4
5
6
7
8
9
10
11
12
grid@linux-7ff2:~>crsctlcheckcss
CRS-4529:ClusterSynchronizationServicesisonline
grid@linux-7ff2:~>crs_stat-t
NameTypeTargetStateHost
------------------------------------------------------------
ora.DATA.dgora....up.typeOFFLINEOFFLINE
ora.asmora.asm.typeOFFLINEOFFLINE
ora.cssdora.cssd.typeONLINEONLINElinux-7ff2
ora.diskmonora....on.typeOFFLINEOFFLINE
ora.evmdora.evm.typeONLINEONLINElinux-7ff2
ora.onsora.ons.typeOFFLINEOFFLINE
ora.orcl.dbora....se.typeOFFLINEOFFLINE
可以看到css服务已经正常启动了,此时启动ASM实例就没有问题了
PgSQL
grid@linux-7ff2:~> sqlplus / as sysasm
SQL*Plus: Release 11.2.0.3.0 Production on Sat Nov 30 07:53:14 2013
Copyright (c) 1982, 2011, Oracle. All rights reserved.
Connected to an idle instance.
SQL> startup
ASM instance started
Total System Global Area 283930624 bytes
Fixed Size 2227664 bytes
Variable Size 256537136 bytes
ASM Cache 25165824 bytes
ASM diskgroups mounted
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
grid@linux-7ff2:~>sqlplus/assysasm
SQL*Plus:Release11.2.0.3.0ProductiononSatNov3007:53:142013
Copyright(c)1982,2011,Oracle.Allrightsreserved.
Connectedtoanidleinstance.
SQL>startup
ASMinstancestarted
TotalSystemGlobalArea283930624bytes
FixedSize2227664bytes
VariableSize256537136bytes
ASMCache25165824bytes
ASMdiskgroupsmounted
注意如上我们是手动启动CSS进程,那么下次服务器重启的话,那么还需要手动来启动这个CSS进程,这样未必有点麻烦,我们这里可以修改配置文件来达到自动启动,我们在Oracle Linux环境中来测试,刚才并没有启动这个环境的CSS进程。
修改Oracle Linux环境中CSS服务和守护进程为自启动
PgSQL
[grid@oraasm ~]$ crsctl modify resource "ora.cssd" -attr "AUTO_START=1"
[grid@oraasm ~]$ crsctl modify resource "ora.diskmon" -attr "AUTO_START=1"
1
2
[grid@oraasm~]$crsctlmodifyresource"ora.cssd"-attr"AUTO_START=1"
[grid@oraasm~]$crsctlmodifyresource"ora.diskmon"-attr"AUTO_START=1"
检查配置文件:
PgSQL
[grid@oraasm ~]$ crs_stat -p ora.cssd
NAME=ora.cssd
TYPE=ora.cssd.type
ACTION_SCRIPT=
ACTIVE_PLACEMENT=0
AUTO_START=1
CHECK_INTERVAL=30
DESCRIPTION="Resource type for CSSD"
FAILOVER_DELAY=0
FAILURE_INTERVAL=3
FAILURE_THRESHOLD=5
HOSTING_MEMBERS=
PLACEMENT=balanced
RESTART_ATTEMPTS=5
SCRIPT_TIMEOUT=600
START_TIMEOUT=600
STOP_TIMEOUT=900
UPTIME_THRESHOLD=1m
[grid@oraasm ~]$ crs_stat -p ora.diskmon
NAME=ora.diskmon
TYPE=ora.diskmon.type
ACTION_SCRIPT=
ACTIVE_PLACEMENT=0
AUTO_START=1
CHECK_INTERVAL=3
DESCRIPTION="Resource type for Diskmon"
FAILOVER_DELAY=0
FAILURE_INTERVAL=3
FAILURE_THRESHOLD=5
HOSTING_MEMBERS=
PLACEMENT=balanced
RESTART_ATTEMPTS=10
SCRIPT_TIMEOUT=60
START_TIMEOUT=600
STOP_TIMEOUT=60
UPTIME_THRESHOLD=5s
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
[grid@oraasm~]$crs_stat-pora.cssd
NAME=ora.cssd
TYPE=ora.cssd.type
ACTION_SCRIPT=
ACTIVE_PLACEMENT=0
AUTO_START=1
CHECK_INTERVAL=30
DESCRIPTION="Resource type for CSSD"
FAILOVER_DELAY=0
FAILURE_INTERVAL=3
FAILURE_THRESHOLD=5
HOSTING_MEMBERS=
PLACEMENT=balanced
RESTART_ATTEMPTS=5
SCRIPT_TIMEOUT=600
START_TIMEOUT=600
STOP_TIMEOUT=900
UPTIME_THRESHOLD=1m
[grid@oraasm~]$crs_stat-pora.diskmon
NAME=ora.diskmon
TYPE=ora.diskmon.type
ACTION_SCRIPT=
ACTIVE_PLACEMENT=0
AUTO_START=1
CHECK_INTERVAL=3
DESCRIPTION="Resource type for Diskmon"
FAILOVER_DELAY=0
FAILURE_INTERVAL=3
FAILURE_THRESHOLD=5
HOSTING_MEMBERS=
PLACEMENT=balanced
RESTART_ATTEMPTS=10
SCRIPT_TIMEOUT=60
START_TIMEOUT=600
STOP_TIMEOUT=60
UPTIME_THRESHOLD=5s
可以看到AUTO_START=1参数已经修改过来了,此时重启Oracle Linux服务器,查看CSS服务是否会不会自动启动。
待Oracle Linux启动后,检查css服务,可以看到css服务自动启动了
PgSQL
[grid@oraasm ~]$ crs_stat -t
Name Type Target State Host
------------------------------------------------------------
ora.DATA.dg ora....up.type OFFLINE OFFLINE
ora.asm ora.asm.type OFFLINE OFFLINE
ora.cssd ora.cssd.type ONLINE ONLINE oraasm
ora.diskmon ora....on.type OFFLINE OFFLINE
ora.evmd ora.evm.type ONLINE ONLINE oraasm
ora.ons ora.ons.type OFFLINE OFFLINE
ora.orcl.db ora....se.type OFFLINE OFFLINE
[grid@oraasm ~]$ crsctl check css
CRS-4529: Cluster Synchronization Services is online
1
2
3
4
5
6
7
8
9
10
11
12
[grid@oraasm~]$crs_stat-t
NameTypeTargetStateHost
------------------------------------------------------------
ora.DATA.dgora....up.typeOFFLINEOFFLINE
ora.asmora.asm.typeOFFLINEOFFLINE
ora.cssdora.cssd.typeONLINEONLINEoraasm
ora.diskmonora....on.typeOFFLINEOFFLINE
ora.evmdora.evm.typeONLINEONLINEoraasm
ora.onsora.ons.typeOFFLINEOFFLINE
ora.orcl.dbora....se.typeOFFLINEOFFLINE
[grid@oraasm~]$crsctlcheckcss
CRS-4529:ClusterSynchronizationServicesisonline
然后启动ASM实例正常
PgSQL
[grid@oraasm ~]$ sqlplus / as sysasm
SQL*Plus: Release 11.2.0.3.0 Production on Sun Dec 1 21:02:49 2013
Copyright (c) 1982, 2011, Oracle. All rights reserved.
Connected to an idle instance.
SQL> startup
ASM instance started
Total System Global Area 283930624 bytes
Fixed Size 2227664 bytes
Variable Size 256537136 bytes
ASM Cache 25165824 bytes
ASM diskgroups mounted
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[grid@oraasm~]$sqlplus/assysasm
SQL*Plus:Release11.2.0.3.0ProductiononSunDec121:02:492013
Copyright(c)1982,2011,Oracle.Allrightsreserved.
Connectedtoanidleinstance.
SQL>startup
ASMinstancestarted
TotalSystemGlobalArea283930624bytes
FixedSize2227664bytes
VariableSize256537136bytes
ASMCache25165824bytes
ASMdiskgroupsmounted
这样以后就不用每次都手动来启动CSS进程了,下面附上几个检查HAS和CSS服务的命令:
1)默认情况下HAS(High Availability Service)是自动启动的.通过如下命令可以取消和启用自动启动
crsctl disable has
crsctl enable has
2)HAS手动启动和停止
crsctl start has
crsctl stop has
3)查看HAS的状态
crsctl check has
4)查看CSS的状态
crsctl check css
5)手动启动CSS进程
crsctl start resource ora.cssd
6)检查所有资源的状态
crsctl status resource -t
crs_stat -t
6)如果想让ora.css和ora.diskmon服务随着HAS的启动而自动启动,那么你可以这两个服务的AUTO_START属性
crsctl modify resource “ora.cssd” -attr “AUTO_START=1”
crsctl modify resource “ora.diskmon” -attr “AUTO_START=1”
7)如果想取消ora.css和ora.diskmon的Auto start
crsctl modify resource “ora.cssd” -attr “AUTO_START=never”
crsctl modify resource “ora.diskmon” -attr “AUTO_START=never”
转载请注明: 版权所有,文章允许转载,但必须以链接方式注明源地址,否则追究法律责任!
最后编辑:2013-11-30作者:Jerry
一个积极向上的小青年,热衷于分享--Focus on DB,BI,ETL