Asela Gunaratne's first Test century steered Sri Lanka to a commanding lead over Zimbabwe on day two in Harare.
The tourists were all out for 504 in their first innings, Zimbabwe reaching 126-2 in reply, with Brian Chari and Craig Ervine both on 60 not out at the close of play.
Sri Lanka had recovered from 112-4 to reach stumps at 290-5 on the opening day, Dhananjaya de Silva leading the revival.
He reached 127 before finally getting out caught and bowled to a Graeme Cremer leg-break (3-136) on Monday, but Gunaratne, who had resumed alongside him on 13, proved equally difficult to dislodge.
Playing in just his second Test, and having made a half-century on debut in Sri Lanka's 225-run win in the opening match of the series, Gunaratne plundered 15 boundaries and a six on his way to notching 116.
He was eventually stumped by Peter Moor off Sean Williams (1-31) to dismiss Sri Lanka shortly before tea, but the damage was well and truly done for the hosts.
And worse was to come for Zimbabwe, as opener Tino Mawoyo departed for three, trapped lbw by Rangana Herath (2-44). First drop Hamilton Masakadza followed for a duck two balls later, caught at slip by Dhananjaya off Herath.
Half-centuries for Chari and Ervine restored some respectability for the home team, but they have a tough task ahead of them on Tuesday to make further inroads into Sri Lanka's lead.