Sri Lanka 223 for 9 (Dilshan 43, Chandimal 43, Morkel 3-34) beat South Africa 104 for 5 (Herath 2-16) by 17 runs (D/L method)
Scorecard and ball-by-ball details
South Africa's challenge was dealt a serious blow before it even began. Hashim Amla, who missed the first match with a neck niggle but recovered in time for this one, was injured in the field and could not open the batting. Amla slipped in the 43rd over while trying to field a ball at fine leg. He fell on his knee and was immediately taken to hospital for a scan.
Having dropped Colin Ingram to make way for Amla, South Africa needed another makeshift opener and pushed Robin Peterson up the order. He became the first spinner to open both the batting and the bowling for the country, having been given the first new ball earlier, but it was not an occasion for celebration.
Peterson watched as his partner, Alviro Petersen was dropped off the fourth ball of the innings but he had no such reprieve. He kept out one Lasith Malinga yorker but was comprehensively beaten by the next, which crashed into the stumps to see South Africa's opening stand broken in the first over.
Petersen and JP Duminy seemed to settle, with both hitting boundaries that showed their class, but they only had a 32-run stand to show for it. Thisara Perera managed some superb movement and got Duminy to feather an edge to Kumar Sangakkara.
Rangana Herath struck in his first over again, getting Petersen lbw playing for turn to one that went straight on. Tillakaratne Dilshan removed AB de Villiers on review when the South Africa captain missed a sweep. When Faf du Plessis was caught behind in the next over to become Herath's 50th ODI wicket, South Africa were 69 for 5 and defeat was imminent.
With rain looming, David Miller and Ryan McLaren tried to keep up with the Duckworth-Lewis target but they had fallen too far behind. Form in the top order has been exposed as severely lacking by Sri Lanka's wily attack. With none of Duminy, de Villiers or du Plessis posting a half-century in their last five innings, South Africa's batting will have to improve even more than their bowling did in this match.
Although the South Africa attack sent down 14 wides, they found their lines quicker than they had on Saturday. Morne Morkel struck the first blow when he had Upul Tharanga caught by Peterson at mid-wicket but South Africa would have shuddered to see the in-form Sangakkara stride out.
He immediately added stability with the first boundary of the innings, a well-timed flick through the leg side off a wayward Chris Morris delivery. Sangakkara continued to place the ball well even as Dilshan grew frustrated but he was dismissed against the run of play, to a spinner. Sangakkara was tempted by Aaron Phangiso's persistent flight and could not clear extra cover.
Dilshan had to take on the role of anchor and played an uncharacteristically watchful knock. For 36 deliveries after Sangakkara departed, Dilshan and Mahela Jayawardene could not find the boundary and had to content themselves with nudging for singles.
In their 40-run stand, Jayawardene had one shot in anger, a back-foot punch through point, before missing a reverse-sweep and being cleaned up by Peterson.
Dilshan's vigil ended soon after. He got a thick edge off Morkel and de Villiers took a sharp, one-handed catch to his right to send the last of Sri Lanka's senior batsmen on his way. It was up to the young captain, Dinesh Chandimal, to steady Sri Lanka.
He survived a rain interval and the loss of both Jehan Mubarak and Perera but not du Plessis' instincts. Chandimal was out to a superb catch but his 43 proved crucial to helping Sri Lanka post a competitive score on a surface where batting became more difficult, and he can now look forward to sealing the series on Friday.